22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!