Destruktor: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Keine Bearbeitungszusammenfassung
 
Keine Bearbeitungszusammenfassung
 
(15 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Definition=
{{Qualität
Ein '''Destruktor''' ist eine spezielle [[Prozedur]] zur "Vernichtung" existierender [[Objekt]]e.
|correctness        = 5
|extent              = 5
|numberOfReferences  = 2
|qualityOfReferences = 3
|conformance        = 5
}}
==Definition==
Ein '''Destruktor''' ist eine spezielle [[Prozedur]] zur „Zerstörung“ existierender [[Objekt]]e.


Ein Destruktor führt bei Aufruf folgende Aufgaben durch:
Ein Destruktor führt bei Aufruf folgende Aufgaben durch:


# Optional: Aktivierung weiterer [[Finalisierungs]]methoden; insbesondere können [[Beziehunge]]n aufgelöst und weitere Objekte zerstört werden
# Optional: Aktivierung weiterer [[Finalisierungs]]methoden; insbesondere können [[Beziehung]]en aufgelöst und weitere Objekte zerstört werden
# Optional: Löschung des Objektzustandes, d.h. Überschreibung des Speicherplatzes mit geeigneten Finalwerten (Datenschutz!)
# Optional: Löschung des Objektzustandes, d.h. Überschreibung des Speicherplatzes mit geeigneten Finalwerten (Datenschutz!)
# Freigabe des für den [[Objektzustand]] reservierten Speicherplatzes  
# Freigabe des für den [[Objektzustand]] reservierten Speicherplatzes  
# Markieren des [[Objektidentifikator]]s als ungültig (oder Freigabe des Objektidentifikators)
# Markieren des [[Objektidentifikator]]s als ungültig (oder Freigabe des Objektidentifikators)


=Bemerkungen=
==Bemerkungen==
==Destruktor als Methode==
===Destruktor als Methode===
Ein Destruktor kann einer [[Klasse (OOP)|Klasse]] als [[Modifikationsmethode]] zugeordnet sein.  
Ein Destruktor kann einer [[Klasse (OOP)|Klasse]] als [[Modifikationsmethode]] zugeordnet sein.  
Ein derartiger Destruktor veringert bei jedem Aufruf die zugehörige [[Klassenextension]] um ein Objekt.
Ein derartiger Destruktor verringert bei jedem Aufruf die zugehörige [[Klassenextension]] um ein Objekt.


Es gibt aber auch Destruktoren, die keiner Klasse zugeordnet sind. Derartige Konstruktoren zerstören Objekte,
Es gibt aber auch Destruktoren, die keiner Klasse zugeordnet sind. Derartige Konstruktoren zerstören Objekte,
die ebenfalls keiner Klasse zugeordnet sind.
die ebenfalls keiner Klasse zugeordnet sind.


==Beziehungen==
===Beziehungen===
[[Beziehung]]en zu anderen [[Objekt]]en können nicht nur vom Destruktor, sondern auch früher von anderen [[Prozedur]]en und
[[Beziehung]]en zu anderen [[Objekt]]en können nicht nur vom Destruktor, sondern auch früher von anderen [[Prozedur]]en und
[[Modifikationsmethode]]n gelöscht werden.
[[Modifikationsmethode]]n gelöscht werden.


==Löschung des Objektzustandes==
===Löschung des Objektzustandes===
Die Löschung des Objektzustandes durch Überschreiben des Speicherplatzes mit binären Nullen oder Zufallszahlen wird i. Allg. nicht direkt unterstützt. Das heißt, wenn dies aus Datenschutzgründen notwendig sein sollte, muss der Programmierer entsprechenden Code selbst schreiben.
Die Löschung des Objektzustandes durch Überschreiben des Speicherplatzes mit binären Nullen oder Zufallszahlen wird i. Allg. nicht direkt unterstützt. Das heißt, wenn dies aus Datenschutzgründen notwendig sein sollte, muss der Programmierer entsprechenden Code selbst schreiben.


==Freigabe des Objektidentifikators==
===Freigabe des Objektidentifikators===
Aus Sicht der "reinen objektorientierten Lehre" sollte ein Objektidentifikator niemals wiederverwendet werden,  
Aus Sicht der "reinen objektorientierten Lehre" sollte ein Objektidentifikator niemals wiederverwendet werden,  
insbesondere dann nicht, wenn es möglich ist, Objektidentifikatoren im Klartext abzuspeichern oder auszudrucken.
insbesondere dann nicht, wenn es möglich ist, Objektidentifikatoren im Klartext abzuspeichern oder auszudrucken.
Zeile 31: Zeile 38:
Allerdings werden vor allem in hauptspeicherbasierten Programmiersystemen (Java, C++ etc.) meist Hauptspeicher-Adressen als Objektidentifikatoren verwendet. In derartigen Systemen müssen Objektidentifikatoren wiederverwendet werden, da (realer oder virtueller) Hauptspeicher nicht unbegrenzt zur Verfügung steht.
Allerdings werden vor allem in hauptspeicherbasierten Programmiersystemen (Java, C++ etc.) meist Hauptspeicher-Adressen als Objektidentifikatoren verwendet. In derartigen Systemen müssen Objektidentifikatoren wiederverwendet werden, da (realer oder virtueller) Hauptspeicher nicht unbegrenzt zur Verfügung steht.


In objektorientierten Datenbanksystemen werden dagegen Objektidentifikatioren meist nicht wiederverwendet. Aus Performanzgründen
In objektorientierten Datenbanksystemen werden dagegen Objektidentifikatoren meist nicht wiederverwendet. Aus Performanzgründen
werden die Objektidentifikatoren dann allerdings temporär durch Hauptspeicheradressen ersetzt, wenn ein Objekt in den Hauptspeicher geladen wird. Diese (nicht-triviale) Optimierungstechnik heißt [[Pointer Swizzling]].
werden die Objektidentifikatoren dann allerdings temporär durch Hauptspeicheradressen ersetzt, wenn ein Objekt in den Hauptspeicher geladen wird. Diese (nicht-triviale) Optimierungstechnik heißt [[Pointer Swizzling]].


==Garbage Collection==
===Garbage Collection===
Viele objeteorientierte Programmiersysteme unterstützen [[Garbage Collection]],  
Viele objektorientierte Programmiersysteme unterstützen [[Garbage Collection]],  
d.h. die automatische Zerstörung von Objekten, auf die nicht mehr zugegriffen werden kann.  
{{dh}} die automatische Zerstörung von Objekten, auf die nicht mehr zugegriffen werden kann.  
In derartigen System braucht der Programmierer Destruktoren nicht explizit zu programmieren.
In derartigen System braucht der Programmierer Destruktoren nicht explizit zu programmieren.


Diese (ebenfalls nicht-triviale) Technik hilft, viele Programmierfehler zu vermeiden. Sie
Diese (ebenfalls nicht-triviale) Technik hilft, viele Programmierfehler zu vermeiden. Sie
kann allerdings temporär zu Perfomanzproblemen führen.
kann allerdings temporär zu Perfomanzeinbußen führen.


=Siehe auch=
==Quellen==
[[Konstruktor]]


[[Wikipedia:Konstruktoren und Destruktoren]]
#{{Quelle|Kowarschick, W.: Multimedia-Programmierung}}
[[Kategorie:Objektorientierte Programmierung]]
#{{Quelle|Kowarschick, W. (2002): Multimedia-Programmierung - Objektorientierte Grundlagen}}
[[en:Destructor]]
#{{Quelle|Kowarschick, W. (2002): Skriptum zur Vorlesung Multimedia Softwareentwicklung II}}
 
==Siehe auch==
*[[Konstruktor]]
<noinclude>[[Kategorie:Objektorientierte Programmierung]]
[[Kategorie:Glossar]]
[[en:Desrtuctor]]
[[Kategorie:Kapitel:Multimedia-Programmierung]]
</noinclude>

Aktuelle Version vom 6. April 2017, 15:21 Uhr

Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen nur teilweise:

Korrektheit: 5
(vollständig überprüft)
Umfang: 5
(wesentliche Fakten vorhanden)
Quellenangaben: 2
(wichtige Quellen fehlen)
Quellenarten: 3
(gut)
Konformität: 5
(ausgezeichnet)

Definition

Ein Destruktor ist eine spezielle Prozedur zur „Zerstörung“ existierender Objekte.

Ein Destruktor führt bei Aufruf folgende Aufgaben durch:

  1. Optional: Aktivierung weiterer Finalisierungsmethoden; insbesondere können Beziehungen aufgelöst und weitere Objekte zerstört werden
  2. Optional: Löschung des Objektzustandes, d.h. Überschreibung des Speicherplatzes mit geeigneten Finalwerten (Datenschutz!)
  3. Freigabe des für den Objektzustand reservierten Speicherplatzes
  4. Markieren des Objektidentifikators als ungültig (oder Freigabe des Objektidentifikators)

Bemerkungen

Destruktor als Methode

Ein Destruktor kann einer Klasse als Modifikationsmethode zugeordnet sein. Ein derartiger Destruktor verringert bei jedem Aufruf die zugehörige Klassenextension um ein Objekt.

Es gibt aber auch Destruktoren, die keiner Klasse zugeordnet sind. Derartige Konstruktoren zerstören Objekte, die ebenfalls keiner Klasse zugeordnet sind.

Beziehungen

Beziehungen zu anderen Objekten können nicht nur vom Destruktor, sondern auch früher von anderen Prozeduren und Modifikationsmethoden gelöscht werden.

Löschung des Objektzustandes

Die Löschung des Objektzustandes durch Überschreiben des Speicherplatzes mit binären Nullen oder Zufallszahlen wird i. Allg. nicht direkt unterstützt. Das heißt, wenn dies aus Datenschutzgründen notwendig sein sollte, muss der Programmierer entsprechenden Code selbst schreiben.

Freigabe des Objektidentifikators

Aus Sicht der "reinen objektorientierten Lehre" sollte ein Objektidentifikator niemals wiederverwendet werden, insbesondere dann nicht, wenn es möglich ist, Objektidentifikatoren im Klartext abzuspeichern oder auszudrucken. Anderenfalls könnten außerhalb des eigentlichen Systems Verweise auf falsche Objekte existieren.

Allerdings werden vor allem in hauptspeicherbasierten Programmiersystemen (Java, C++ etc.) meist Hauptspeicher-Adressen als Objektidentifikatoren verwendet. In derartigen Systemen müssen Objektidentifikatoren wiederverwendet werden, da (realer oder virtueller) Hauptspeicher nicht unbegrenzt zur Verfügung steht.

In objektorientierten Datenbanksystemen werden dagegen Objektidentifikatoren meist nicht wiederverwendet. Aus Performanzgründen werden die Objektidentifikatoren dann allerdings temporär durch Hauptspeicheradressen ersetzt, wenn ein Objekt in den Hauptspeicher geladen wird. Diese (nicht-triviale) Optimierungstechnik heißt Pointer Swizzling.

Garbage Collection

Viele objektorientierte Programmiersysteme unterstützen Garbage Collection, d. h. die automatische Zerstörung von Objekten, auf die nicht mehr zugegriffen werden kann. In derartigen System braucht der Programmierer Destruktoren nicht explizit zu programmieren.

Diese (ebenfalls nicht-triviale) Technik hilft, viele Programmierfehler zu vermeiden. Sie kann allerdings temporär zu Perfomanzeinbußen führen.

Quellen

  1. Kowarschick (MMProg): Wolfgang Kowarschick; Vorlesung „Multimedia-Programmierung“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2018; Quellengüte: 3 (Vorlesung)
  2. Kowarschick (2002a): Wolfgang Kowarschick; Multimedia-Programmierung – Objektorientierte Grundlagen; Hrsg.: Michael Lutz und Christian Märtin; Reihe: Informatik interaktiv; Verlag: Fachbuchverlag Leipzig im Carl Hanser Verlag; ISBN: 3446217002; 2002; Quellengüte: 5 (Buch)
  3. Kowarschick (2002): Wolfgang Kowarschick; Vorlesung „Multimedia Softwareentwicklung II“ – Wintersemester 2001/2002; Hochschule: Fachhochschule Augsburg; Adresse: Augsburg; Web-Link; 2002; Quellengüte: 4 (Skript)

Siehe auch