+-----------------+
| eltern_objekt | Vorgänger
+-----------------+
/ \
+-----------------+ +-----------------+
| kind_objekt_1 | | kind_objekt_2 | Nachfolger
+-----------------+ +-----------------+
Wenn keine besonderen Vorkehrungen getroffen werden, erben die Nachfolger
alle Attribute und alle Methoden ihres Vorgängers.
Für die objektorientierten Spracherweiterungen von Pascal ist
Einfachvererbung typisch: Es gibt maximal einen Vorgänger.
Pascal++ erlaubt Mehrfachvererbung (multiple inheritance).
Der Vererbungsmechanismus bringt einige Vorteile mit sich:
Die verschiedenen Objekttypen gemeinsamen Ressourcen müssen
nur einmal beschrieben werden.
Für den Entwurf einer Objekt(typ)hierarchie gibt es zwei Ansatzpunkte:
Der Entwurf "guter" Objekt(typ)hierarchien hat sich als äußerst anspruchsvolle Tätigkeit erwiesen.
Achtung:
Der Vererbungsmechanismus wird durch die
Sichtbarkeit der Ressourcen des Objekts
beeinflußt.
Alle Pascal-Varianten mit Objekt-Erweiterungen stellen hybride Sprachen
dar:
Es gibt Beschreibungsmittel, die objektorientiert aussehen. Die Objekte
erfüllen jedoch nicht alle Kriterien eines "richtigen" Objekts.
Turbo Pascal
TYPE objekt_typ = OBJECT ( eltern_objekt_typ )
zusätzliche attribute
zusätzliche methoden
END;
Der Typ objekt_typ erbt die Ressourcen des Typs
eltern_objekt_typ. Beispiel:
TYPE person = OBJECT
name : STRING[20];
vorname : STRING[20];
alter : INTEGER;
...
END;
mitarbeiter = OBJECT ( person )
personalnummer : INTEGER;
...
END;
Es gibt keinen Objekttyp, der Vorfahre aller Objekttypen ist.
Delphi
TYPE objekt_typ = CLASS ( eltern_objekt_typ )
zusätzliche attribute
zusätzliche methoden
END;
Der Objekttyp TObject ist automatisch Vorfahre aller mittels
CLASS deklarierter Typen.
Pascal++
Einfachvererbung
OBJECT TYPE subtyp;
...
INHERIT supertyp;
...
END;
...
END;
Mehrfachvererbung
OBJECT TYPE subtyp;
...
INHERIT supertyp_1;
...
END;
...
INHERIT supertyp_n;
...
END;
...
END;
Innerhalb der Anweisungsklammer
INHERIT name; ... END;können Ressourcen der Superklasse name überschreiben werden.
Beispiel:
OBJECT TYPE person;
VAR name : string20;
vorname : string20;
BEGIN
...
END;
OBJECT TYPE ident;
VAR nr : INTEGER;
abteilung : string20;
BEGIN
...
END;
OBJECT TYPE mitarbeiter;
INHERIT person; { erbt Attribute name, vorname }
END;
INHERIT ident; { erbt Attribute nr, abteilung }
END;
BEGIN
...
END;