8. Objektorientierte Programmierung | ||||||
|
||||||
8.7 Abstrakte Klassen
Wenn zum Zeitpunkt, zu dem eine Anwendung einer Klasse geschrieben werden soll, noch keine Entscheidung über die darin aufzunehmenden Typen getroffen ist, können abstrakte Klassen verwenden werden, um ein (kompilierbares) Gerüst für eine Klassenhierarchie zu entwerfen. Die Konkretisierung der Typen und Unterprogramme muß dann später in den abgeleiteten Klassen erfolgen. Abstrakte Typen und Unterprogramme (Abstrakte Klasse / Abstrakter Typ / Abstrakte Unterprogramme) dienen zur Bildung von ganz allgemeinen Basisklassen. Die abstrakte Klasse liefert Vorgaben von Datentypen und Operationen, aber keine Implementierungen. Von abstrakten Klassen können dementsprechend auch keine Objekte gebildet werden. Dies ist erst mit den davon abgeleiteten, konkreten Klassen möglich. In einer abstrakten Basisklasse könnten z. B. allgemeine Funktionen zum Lesen und Schreiben von Objekten auf Datenträger bereitgestellt werden. Anschließend werden von dieser Basisklasse unterschiedliche Klassen abgeleitet. Diese Klassen haben dann als einzige Gemeinsamkeit genau diese Schreib-/Lese-Prozeduren der abstrakten Basisklasse. Die von einer abstrakten Basisklasse bereitgestellten abstrakten Prozeduren müssen in den abgeleiteten Klassen konkretisiert werden. Der Übersetzer prüft, ob alle abstrakten Rümpfe in allen Subklassen konkretisiert werden. Eine abstrakte Basisklasse kann aber auch "normale" Prozeduren bereitstellen, die nicht konkretisiert werden müssen. (record_type_definition <BNF>) (abstract_subprogram_declaration <BNF>) Der Datentyp der abstrakten Basisklasse wird als "abstract tagged null record" gekennzeichnet. Deklariert wird nur die Spezifikation des Paketes, kein Rumpf. Alle Unterprogramme, die erst später konkretisiert werden sollen, werden hier als "abstract" gekennzeichnet. -- die abstrakte Basisklasse
Eine von einer abstrakten Klasse abgeleitete Klasse muß den Datentyp der abstrakten Basisklasse aufgreifen und um eigene Verbundelemente erweitern. Die abstrakten Unterprogramme der abstrakten Basisklasse müssen durch gleichnamige Unterprogramme überladen werden. Der Übersetzer prüft, ob alle abstrakten Unterprogramme überladen wurden. -- eine von einer abstrakten Basisklasse abgeleitete Klasse
|
||||||
|