Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
über den Namen eines Attributs Werte zuweisen. Wertzuweisungen von außerhalb <strong>der</strong> Klasse, die den Typ<br />
eines Objektes beschreibt, sind nicht möglich. Dies entspricht dem Geheimnisprinzip, welches wir in Abschnitt<br />
3.4 ausführlicher diskutieren werden.<br />
Die Bedeutung des aktuellen Exemplars erklärt die dezentralisierte Natur objektorientierter Programmierung.<br />
Es gibt kein übergeordnetes Hauptprogramm im Sinne <strong>der</strong> klassischen, zentralistisch denkenden Programmiersprachen.<br />
Stattdessen haben wir im Programm eine Menge von Klassen und zur Laufzeit eine Menge von Objekten,<br />
welche über Serviceleistungen <strong>der</strong> Klassen Operationen aufeinan<strong>der</strong> ausführen können. Es ist klar, daß<br />
man für ein ausführbares System festlegen muß, wo dieser Ausführungsprozeß beginnen soll. Diese Festlegung<br />
aber geschieht spät und unabhängig von dem eigentlichen Programm (siehe Abschnitt 3.9).<br />
In den meisten Fällen bleibt das aktuelle Exemplar implizit, d.h. es wird nicht direkt im Programmtext<br />
genannt. Manchmal ist es aber nötig, das aktuelle Exemplar im Programmtext explizit zu kennzeichnen –<br />
zum Beispiel um einen Verweis eines Objekts auf sich selbst zu ermöglichen. Hierzu stellt Eiffel die Funktion<br />
Current zur Verfügung, welche das aktuelle Objekt <strong>der</strong> den Aufruf umschließenden Klasse bezeichnet. Ist das<br />
aktuelle Exemplar z.B. ein Objekt <strong>der</strong> Klasse BANKKUNDE (vgl. Abschnitt 3.2.4), so bewirkt <strong>der</strong> Befehl<br />
bürge := Current<br />
daß die Komponente bürge des aktuellen Objektes auf sich selbst verweist, daß also <strong>der</strong> beschriebene Bankkunde<br />
für sich selbst bürgt. Man beachte jedoch, daß Current eine Funktion ist, die einen Wert liefert, und<br />
nicht etwa eine Größe, <strong>der</strong> man einen Wert zuweisen könnte.<br />
3.3.6 Nicht-standardmäßiges Erzeugen<br />
In den bisherigen Beispielen ergibt die Erzeugungsoperation jedesmal, wenn sie für irgendeine Größe einer<br />
Klasse aufgerufen wird, das gleiche (nicht dasselbe) Objekt. Für die Komponente autor eines Buchobjektes,<br />
die vom Typ PERSON ist, wird durch !!autor also immer ein Personenobjekt mit leeren Verweis auf Namen,<br />
Vornamen und Nationalität sowie Geburts- und Todesjahr 0 erzeugt. Da diese Form <strong>der</strong> Initialisierung<br />
hochgradig unflexibel ist, bietet Eiffel die Möglichkeit an, für jede Klasse eine (o<strong>der</strong> mehrere) vom Standard<br />
abweichende Initialisierungsprozedur zu deklarieren. Hierzu werden einfach einige <strong>der</strong> als features erklärten<br />
Routinen explizit als Initialisierungsprozeduren (creators) vereinbart. Eiffel (Version 3) benutzt hierzu das<br />
Schlüsselwort creation.<br />
class PERSON<br />
creation<br />
init mit namen<br />
feature<br />
.<br />
init mit namen(n,v:STRING) is -- Initialisiere Person mit Vornamen und Namen<br />
do<br />
name := n;<br />
vornamen := v<br />
end; -- init mit namen<br />
.<br />
end -- class PERSON<br />
Abbildung 3.13: Klassendefinition mit Initialisierungsprozedur<br />
In Abbildung 3.13 haben wir die Klasse PERSON um die Initialisierungsprozedur init mit namen erweitert.<br />
Diese nimmt zwei Strings und initialisiert Namen und Vornamen eines neugeschaffenen Objektes entsprechend.<br />
Alle an<strong>der</strong>en Komponenten werden gemäß <strong>der</strong> Standardwerte initialisiert. Es ist durchaus möglich mehrere<br />
Initialisierungsprozeduren für verschiedene Zwecke zu deklarieren.