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.

(libraries), die eine Reihe vordefinierter Klassen enthalten und bei Bedarf geladen werden können. Darunter<br />

befindet sich auch eine Eiffel-Basisbibliothek, die beim Aufruf <strong>der</strong> Programmierumgebung immer geladen wird.<br />

Aus diesem Grunde gibt es eine Reihe vordefinierter Klassentypen wie STRING und ARRAY, die zwar keine einfachen<br />

Typen sind, aber für die meisten Zwecke wie einfachen Typen behandelt werden können. Eine genaue<br />

Beschreibung aller vordefinierten Typen findet man üblicherweise in den Unterlagen des aktuellen Compilers.<br />

3.2.4 Kunden, Lieferanten und Selbstreferenz<br />

Enthält eine Klasse A eine Deklaration <strong>der</strong> Form attribut:B, so sagt man auch, daß die Klasse A von<br />

<strong>der</strong> Klasse B kauft bzw. daß B an A verkauft. Diese eher kaufmännische Terminologie wurde bewußt in die<br />

Konzeption von Eiffel übernommen, da das Prinzip von Liefern und Kaufen am besten die Denkweise <strong>der</strong><br />

unabhängig operierenden Klassen ausdrückt.<br />

Definition 3.2.1 (Kunden und Lieferanten) Eine Klasse A heißt Kunde (Client) <strong>der</strong> Klasse B, wenn A<br />

eine Deklaration <strong>der</strong> Form entity:B enthält. B heißt in diesem Fall Lieferant (Supplier) von A.<br />

Der Begriff entity (Größe) in <strong>der</strong> obigen Definition ist das objektorientierte Gegenstück zum Begriff <strong>der</strong><br />

Variablen in konventionellen Sprachen, umfaßt aber mehr als dieser, z.B. die Attribute einer Klasse. Eine<br />

vollständige Definition geben wir in Abschnitt 3.3.3, nachdem wir alle an<strong>der</strong>en Arten vorgestellt haben.<br />

Wichtig ist, daß eine Klasse ihr eigener Kunde sein kann. So könnte man z.B. die Klasse PERSON erweitern<br />

um eine Angabe <strong>der</strong> Eltern, welche natürlich wie<strong>der</strong> Personen sind:<br />

class PERSON feature<br />

name, vornamen: STRING;<br />

geburtsjahr, todesjahr: INTEGER;<br />

nationalität: STRING;<br />

vater, mutter: PERSON<br />

end -- class PERSON<br />

Abbildung 3.8: Klassendefinition mit Selbstreferenz<br />

Prinzipiell wird damit die Möglichkeit gegeben, daß ein Objekt <strong>der</strong> Klasse PERSON auf sich selbst verweist<br />

(Selbstreferenz), also ein Zyklus im Graphen <strong>der</strong> Objekte vorhanden ist. Im Falle <strong>der</strong> Eltern mach dies natürlich<br />

keinen Sinn. Es sind jedoch durchaus Klassen denkbar, die eine sinnvolle zyklische Struktur im Objektgraphen<br />

erlauben, wie z.B. die folgende vereinfachte Klasse von Bankkunden, die einen Bürgen angeben müssen.<br />

class BANKKUNDE feature<br />

name, vornamen: STRING;<br />

bürge: BANKKUNDE<br />

end -- class BANKKUNDE<br />

Diese Klassendefinition erlaubt z.B. die folgende durchaus realistische zyklische Objektstruktur.<br />

‘‘Kreitz’’<br />

‘‘Christoph’’<br />

✛<br />

✛<br />

‘‘Kreitz’’<br />

‘‘Bärbel’’<br />

Abbildung 3.9: Zyklische Objektstruktur<br />

Das Vorhandensein eines solchen Zyklus folgt nicht notwendig aus <strong>der</strong> Existenz einer sich selbst beliefernden<br />

Klasse. Allerdings ist es richtig, daß <strong>der</strong> Graph <strong>der</strong> Objekte entwe<strong>der</strong> einen Zyklus haben muß o<strong>der</strong> einen

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!