2. Die Terminologie von Eiffel

Eiffel verwendet z.T. eine etwas andere Terminologie als andere objektorientierte Sprachen. Insbesondere wird es in Kapitel 8.2 um den Unterschied zur Terminologie von C++ gehen. Daher soll hier zunächst die Terminologie von Eiffel eingeführt werden.

Als Referenz für die Terminologie von Eiffel verwende ich [Meyer 91]. Die Standardwerke zu C++ sind [Stroustrup 92] und [EllisStrou 90].

2.1.   Sprachkonzepte

Ein Eiffel-Programm setzt sich aus einzelnen Klassen (engl. classes) zusammen. Die Klassen beschreiben jeweils einen Datentyp. Zur Laufzeit werden Exemplare der Klasse erzeugt, die dann Objekte (engl. objects) genannt werden.

In Eiffel werden die Klassen durch sog. Merkmale (engl. features) beschrieben. Dabei werden die Merkmale unterteilt in Attribute (engl. attributes), die den Zustand beschreiben, und Routinen (engl. routines), die die Operationen beschreiben.

Klassen können auf zwei Arten miteinander in Beziehung stehen: durch Vererbung und durch Benutzung. In den Diagrammen werden zwei unterschiedliche Pfeilarten zur Kennzeichnung dieser Beziehungen verwendet.

Abb. 1 Beziehungen zwischen Klassen

Im Beispiel (Abb. 1) erben also die Klassen A2 und A3 von der Klasse A1, und die Klasse B2 erbt von B1, während die Klasse A1 die Klasse B1 benutzt.

Nach der Eiffel-Terminologie ist A1 Elternteil (engl. parent) von A2 und A3, da A2 und A3 direkt von A1 erben. Andersherum betrachtet sind die Klassen A2 und A3 Erben (engl. heir) von der Klasse A1.[1]

Eine Klasse, die direkt oder indirekt von einer Klasse erbt, wird als ihr Nachkomme (engl. descendant) bezeichnet. Im Beispiel sind A2, A3 und A4 Nachkommen von A1. Die Klasse A1 wird dann als Vorfahre (engl. ancestor) dieser Klassen bezeichnet. Der Unterschied zu den vorher vorgestellten Begriffen Vorfahre und Elternteile liegt darin, daß keine direkte Vererbung vorliegen muß, um eine Klasse als Nachkomme bzw. Vorfahre zu bezeichnen. So kann z.B. auch die Beziehung von A1 und A4 miterfaßt werden.

Synonym für die Begriffe Nachkomme und Vorfahre verwende ich auch die Begriffe Unterklasse und Oberklasse.

Im Beispiel (Abb. 1) ist Klasse A1 Kunde (engl. client) von B2. Dies entspricht der Benutzungs-Beziehung (gestrichelter Pfeil). Da die Klasse B2 einen Dienst erbringt wird sie auch als Lieferant (engl. supplier) bezeichnet.

Wie andere objektorientierte Sprachen auch bietet Eiffel die Möglichkeit, Klassen oder Merkmale als aufgeschoben (engl. deferred) zu deklarieren. Dabei wird lediglich die Schnittstelle, nicht aber die Implementierung angegeben. Eine Klasse ist aufgeschoben, wenn sie als aufgeschoben deklariert ist oder wenn sie ein aufgeschobenes Merkmal besitzt. Von aufgeschobenen Klassen können keine Exemplare erzeugt werden, sehr wohl aber von Klassen, die von ihnen erben und alle aufgeschobenen Merkmale konkretisiert haben.

Da Eiffel grundsätzlich mit Referenzsemantik arbeitet, dies aber z.B. bei Basisdatentypen nicht erwünscht ist, besteht die Möglichkeit, Klassen als expandiert (engl. expanded) zu deklarieren, so daß für diese Klassen bei Zuweisungen und Vergleichen immer Wertsemantik verwendet wird (ohne daß auf die Routinen clone und equal zurückgegriffen werden muß). Diese Eigenschaft einer Klasse wird vererbt, ohne daß die Erben sie in ihrer Deklaration erwähnen müssen.

2.2.   Strukturierungskonzepte

Oberhalb von Klassen gibt es noch weitere Strukturierungsmittel in Eiffel, die aber nicht mehr in Eiffel selbst ausgedrückt werden können. Sie dienen dazu, entweder fachlich oder technisch zusammengehörige Klassen zu Projekten bzw. Bibliotheken zu gruppieren. Dies erhöht die Übersichtlichkeit für den Programmierer und teilt den verwendeten Werkzeugen mit, welche Klassen bearbeitet (z.B. übersetzt) werden müssen.[2]

Die Zusammenstellung einer oder mehrerer Klassen, die ein ausführbares Programm bilden (sollen), wird in Eiffel-Terminologie als System bezeichnet. Als Cluster bezeichnet man eine Menge von zusammengehörigen Klassen. Diese können z.B. eine Bibliothek oder aber auch nur ein einzelnes Designmuster verkörpern. Die Menge aller Cluster, die für einen speziellen Entwurf verwendet werden, wird als Universum (engl. universe) bezeichnet.

Meyer schlägt in [Meyer 91] eine Beschreibungssprache namens LACE (Language for Assembling Classes in Eiffel) vor, um die Strukturierung und Montage eines Systems zu beschreiben. Zur Beschreibung von Clustern wird die Verwendung von Verzeichnissen des Dateisystems vorgeschlagen, in denen die zugehörigen Klassen abgelegt werden. Die Abgrenzung des Universums ergibt sich aus den in LACE referenzierten Clustern.

Da LACE nicht Bestandteil der Sprache Eiffel ist, haben die verschiedenen Hersteller von Eiffel-Compilern z.T. sehr abweichende Implementationen vorgenommen.[3]


 


Last updated: 24. Aug 2005
Page maintained by Jan Willamowius
Impressum · Datenschutz
 
English: Home | Linux | Perl | Java | Eiffel | Books | Music | Jan Willamowius | Updates | Site Map
Deutsch: Home | Badminton | ISBN-Suche | Musik-Suche | Rezepte | Jan Willamowius