Vererbung
Vererbung ist ein wichtiges Konzept des objektorientierten Entwurfs. Wenn eine Klasse von einer anderen Klasse ableitet, dann erbt sie alle Eigenschaften der Oberklasse und kann weitere Eigenschaften hinzufügen. Vererbung kann über beliebig viele Stufen erfolgen. Eine Klasse B
, die von einer Klasse A
erbt, kann selbst wieder als Oberklasse für von ihr abgeleiteten Klassen C
und D
auftreten. Durch Vererbung entsteht so ein Baum von Klassen und deren Unterklassen.
Neben der Wiederverwendung von Eigenschaften, definiert die Vererbungsbeziehung eine "Ist-Ein"-Relation. Nimmt man an, dass das Roboter-Beispiel aus dem Abschnitt Referenzen aus einer Applikation für Fabrikplanung stammt, dann ist ein Roboter (RobotSystem
) im weitesten Sinne ein Gerät (Appliance
). Dabei tragen alle Geräte möglicherweise eine Inventarnummer und sind einem Ort (Location
) in einem Gebäude zugeordnet. Neben Robotern gibt es aber noch eine Vielzahl anderer Einrichtungsgegenstände, wie z.B. Förderbänder (Conveyor
), Regale und vieles mehr. Die Relation "Roboter ist ein Einrichtungsgegenstand" wird über eine Vererbungsbeziehung zwischen den Klassen für einen Roboter und für einen allgemeinen Einrichtungsgegenstand ausgedrückt. Im Diagramm sähe das Modell dann aus wie folgt.
Eine Vererbungsbeziehung sorgt nicht nur dafür, dass alle von einer Oberklasse (Appliance
) abgeleitete Unterklassen (RobotSystem
und Conveyor
) die Eigenschaften der Oberklasse erben und daher nicht selbst definieren müssen, sondern sie sorgt auch dafür, dass an allen Stellen, an denen eine Instanz der Oberklasse erwartet wird, alle Instanzen aller Unterklassen zuweisbar/verwendbar sind. Hätte man also an anderer Stelle des so modellierten Systems eine Referenz auf eine Appliance
, so könnten hierfür alle Instanzen von RobotSystem
und Conveyor
ausgewählt und zugewiesen werden. Somit ist die Strukturierung des Modells in Ober- und Unterklassen die einfachste und direkteste Möglichkeit, Optionslisten für Auswahlen zu steuern.
Abstrakte Klassen
In obigem Beispiel ist die Klasse Gerät (Appliance
) so allgemein, dass man von dieser nicht sinnvoll Objekte anlegen und in einem Fabrikplan verwenden kann. Die Klasse dient lediglich zur Strukturierung des Modells bzw. als Zieltyp für Referenzen, an die alle möglichen Geräte zugewiesen werden können. Eine solche Klasse, von der es keine Instanzen geben kann heißt "abstrakt". Diese Eigenschaft kann bei der Erzeugung einer Klasse gesetzt werden und steuert in der Anwendung, ob an einer bestimmten Stelle ein Objekt angelegt werden kann, oder nicht.
Anders als in UML vorgesehen, unterscheidet ein TopLogic-Modell nicht zwischen einer abstrakten Klasse und einer Schnittstelle (Interface). Dies hat damit zu tun, dass TopLogic-Klassen keine allgemeinen Methoden (Code) haben können, sondern nur Eigenschaften. Dabei ist eine Eigenschaft einer TopLogic-Klasse gleichbedeutend mit einer Set- und Get-Methode, die den Wert der Eigenschaft setzt bzw. abfragt. So gesehen sind berechnete Attribute eine spezielle Form von Methoden (ohne Argumente), die in einem TopLogic-Modell definierbar sind. Berücksichtigt man diese Einschränkungen, kann man eine konkrete (nicht-abstrakte) TopLogic-Klasse mit einer Klasse in UML und eine abstrakte TopLogic-Klasse mit einem UML-Interface beschreiben.
Mehrfachvererbung
In TopLogic ist es möglich, dass eine Klasse mehr als eine Oberklasse hat. In diesem Fall erbt die Klasse die Eigenschaften von allen ihren Oberklassen. Bei Modellen mit Mehrfachvererbung muss man ganz besonders darauf achten, dass man eine Eigenschaft mit demselben Namen nicht von mehr als einer Oberklasse erbt.