Klassenextension: Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „=Definition (von W. Kowarschick)<ref>Kowarschick, W.: Multimedia-Programmierung</ref>= Die zu einer Klasse gehörende Klassenextension is…“) |
Kowa (Diskussion | Beiträge) |
||
Zeile 3: | Zeile 3: | ||
=Bemerkungen= | =Bemerkungen= | ||
Der Begriff der [[Klassenextension]] ist zunächst einmal für die formales Definition des Begriffes [[Klasse (OOP)|Klasse]] von großem Vorteil. | |||
Aber auch für die Implementierung von Programmsystemen und Anwendungen ist dieser Begriff wichtiger, als man zunächst meinen könnte | |||
(da viele objektorientierte Sprachen keinen direkten Zugriff auf die Klassenextension realisieren). | |||
Viele objektorientierte Programmiersprachen verwalten die Klassenextension explizit (ohne dem Programmierer einen direkten Zugang zu gewähren) — zum Beispiel, damit ein [[Garbage Collector]] korrekt arbeiten kann. | |||
[[Objektorientiertes Datenbanksystem|Objektorientierte Datenbanksysteme]] machen die Klassenextension dagegen immer allen Benutzern zugänglich, die die entsprechenden Rechte haben. In derartigen Systemen wird an Stelle des Begriffs [[Klassenextension]] üblicherweise der Begriff [[Tabelle]] verwendet. Die dauerhafte Speicherung von Daten in Tabellen ist die wesentliche Aufgabe eines jeden [[Datenbanksystem]]s. | [[Objektorientiertes Datenbanksystem|Objektorientierte Datenbanksysteme]] machen die Klassenextension dagegen immer allen Benutzern zugänglich, die die entsprechenden Rechte haben. In derartigen Systemen wird an Stelle des Begriffs [[Klassenextension]] üblicherweise der Begriff [[Tabelle]] verwendet. Die dauerhafte Speicherung von Daten in Tabellen ist die wesentliche Aufgabe eines jeden [[Datenbanksystem]]s. | ||
===Beispiel=== | ===Beispiel=== | ||
Im folgenden Beispiel wird die Extension der Klasse <code> | Gerade in der Spieleprogrammierung ist es häufig wichtig, dass auch der Programmierer einen direkten Zugang zur Extension einer Klasse hat | ||
(zum Beispiel zur Extension der Klasse <code>Combatant</code> der Spielgegner). Dies kann mit Hilfe von [[Klassenmethoden]] ganz einfach relaisiert werden. | |||
Im folgenden Beispiel wird die Extension der Klasse <code>Combatant</code> | |||
in einem statischen Attribut <code>extension</code> (der Art <code>Dictionary</code>) zur Verfügung gestellt. | in einem statischen Attribut <code>extension</code> (der Art <code>Dictionary</code>) zur Verfügung gestellt. | ||
Jedes Mal, wenn ein neues Objekt erzeugt wird, fügt der [[Konstruktor]] dieses | Jedes Mal, wenn ein neues Objekt erzeugt wird, fügt der [[Konstruktor]] dieses | ||
neue Objekt automatisch in die Extension ein. Das automatische Löschen von Elementen aus der Extension | neue Objekt automatisch in die Extension ein. Das automatische Löschen von Elementen aus der Extension | ||
ist in Sprachen mit Garbage Collection etwas mühsam, in Sprachen wie C++ kann diese Aufgabe jedoch | ist in Sprachen mit Garbage Collection etwas mühsam, in Sprachen wie C++ kann diese Aufgabe jedoch | ||
problemlos von [[Destruktor]] übernommen werden. | problemlos von [[Destruktor]] übernommen werden. In Sprachen wie ActionScript oder Java müssen eigene | ||
Delete-Operationen (z.B. als statische Methoden) implementiert werden. | |||
<source lang="actionscript3"> | <source lang="actionscript3"> | ||
public class | public class Combatant | ||
{ | { | ||
private static var sv_extension: Dictionary = new Dictionary(); | private static var sv_extension: Dictionary = new Dictionary(); | ||
//besser wäre: Dictionary<Combatant>, wird aber von Actionscript 3 nicht unterstützt | |||
public static function get extension(): Dictionary | public static function get extension(): Dictionary | ||
Zeile 25: | Zeile 33: | ||
} | } | ||
public function | public function Combatant(...) | ||
{ | { | ||
sv_extension[this] = this; | sv_extension[this] = this; |
Version vom 24. Februar 2011, 18:43 Uhr
Definition (von W. Kowarschick)[1]
Die zu einer Klasse gehörende Klassenextension ist eine (i. Allg. endliche) Menge, die zu jedem Zeitpunkt genau diejenigen Objekte, die der Klasse zugeordnet sind, enthält.
Bemerkungen
Der Begriff der Klassenextension ist zunächst einmal für die formales Definition des Begriffes Klasse von großem Vorteil. Aber auch für die Implementierung von Programmsystemen und Anwendungen ist dieser Begriff wichtiger, als man zunächst meinen könnte (da viele objektorientierte Sprachen keinen direkten Zugriff auf die Klassenextension realisieren). Viele objektorientierte Programmiersprachen verwalten die Klassenextension explizit (ohne dem Programmierer einen direkten Zugang zu gewähren) — zum Beispiel, damit ein Garbage Collector korrekt arbeiten kann.
Objektorientierte Datenbanksysteme machen die Klassenextension dagegen immer allen Benutzern zugänglich, die die entsprechenden Rechte haben. In derartigen Systemen wird an Stelle des Begriffs Klassenextension üblicherweise der Begriff Tabelle verwendet. Die dauerhafte Speicherung von Daten in Tabellen ist die wesentliche Aufgabe eines jeden Datenbanksystems.
Beispiel
Gerade in der Spieleprogrammierung ist es häufig wichtig, dass auch der Programmierer einen direkten Zugang zur Extension einer Klasse hat
(zum Beispiel zur Extension der Klasse Combatant
der Spielgegner). Dies kann mit Hilfe von Klassenmethoden ganz einfach relaisiert werden.
Im folgenden Beispiel wird die Extension der Klasse Combatant
in einem statischen Attribut extension
(der Art Dictionary
) zur Verfügung gestellt.
Jedes Mal, wenn ein neues Objekt erzeugt wird, fügt der Konstruktor dieses
neue Objekt automatisch in die Extension ein. Das automatische Löschen von Elementen aus der Extension
ist in Sprachen mit Garbage Collection etwas mühsam, in Sprachen wie C++ kann diese Aufgabe jedoch
problemlos von Destruktor übernommen werden. In Sprachen wie ActionScript oder Java müssen eigene
Delete-Operationen (z.B. als statische Methoden) implementiert werden.
public class Combatant
{
private static var sv_extension: Dictionary = new Dictionary();
//besser wäre: Dictionary<Combatant>, wird aber von Actionscript 3 nicht unterstützt
public static function get extension(): Dictionary
{
return sv_extension;
}
public function Combatant(...)
{
sv_extension[this] = this;
...
}
}
Quellen
- Kowarschick, W.: Multimedia-Programmierung
- Kowarschick, W. (2002): Multimedia-Programmierung - Objektorientierte Grundlagen