Programmiersprache Pascal

Objekte - Vererbung

Objekte (Objekttypen) können Bestandteil einer hierarchischen Struktur sein:
             +-----------------+
             |  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.

Zu beachten ist, daß der Vorteil erst ab einer bestimmter Problemgröße uneingeschränkt zum Tragen kommt.

Für den Entwurf einer Objekt(typ)hierarchie gibt es zwei Ansatzpunkte:

  1. Modellierung:
    Im Anwendungsgebiet existieren hierarchische Strukturen, die nachgebildet werden können.
    Beispiele: Verwaltungsstrukturen, Stammbaum
  2. Wiederverwendung:
    In Software-Produkten kommen in verschiedenen Bereichen gleichartige Datenstrukturen und Routinen zum Einsatz.
Je nach Schwerpunktsetzung können völlig verschiedene Hierarchien entstehen.

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.
Im einfachsten Fall kann der Anweisungsteil innerhalb der Anweisungsklammer leer sein, d.h. es werden keine Überschreibungen vorgenommen.

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;


P. Böhme, 08.08.1996