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.
(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