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.

3.8.11 Kaufen o<strong>der</strong> Erben?<br />

Wenn Sie bei einer Klassendeklaration features einer an<strong>der</strong>en Klasse K benötigen, dann werden Sie vor <strong>der</strong><br />

Frage stehen, welche Beziehungsart gewählt werden soll: soll K vererben o<strong>der</strong> Lieferant sein?<br />

Die meisten Programmierer, die noch nicht mit <strong>der</strong> objektorientierten Denkweise vertraut sind, werden im<br />

allgemeinen die Vererbung vorziehen, da man hier auf die qualifizierten Aufrufe verzichten kann. Dies bedeutet<br />

aber einen Mißbrauch <strong>der</strong> Vererbung, da hierdurch die durch die das Klassenkonzept geför<strong>der</strong>te Strukturierung<br />

von Softwaresystemen in unabhängige Komponenten wie<strong>der</strong> verlorengeht. Wer Vererbung nur <strong>der</strong> leichteren<br />

Schreibweise wegen bevorzugt, läuft Gefahr, in Eiffel nach wie vor einen Pascal-Stil zu verwenden.<br />

Sinnvoller ist es, sich Gedanken darüber zu machen, welche konzeptionelle Beziehung zwischen den Objekten<br />

<strong>der</strong> realen Welt besteht, die durch die Klassen beschrieben werden. Vererbung drückt aus, daß die Objekte<br />

<strong>der</strong> Erbenklasse auch Objekte <strong>der</strong> Elternklasse sind, also Attribute <strong>der</strong> Elternklasse besitzen. Die Kunden-<br />

Lieferant Beziehung besagt, daß ein Kundenobjekt das Lieferantenobjekt als Bestandteil hat (und daß möglicherweise<br />

mehrere Kundenobjekte dasselbe Lieferantenobjekt haben).<br />

So kann zum Beispiel die Klasse BUCH niemals sinnvoll ein Erbe <strong>der</strong> Klasse PERSON sein, da Bücher nun einmal<br />

keine Personen sind. Bei Studenten, Entleihern und Arbeitnehmern sieht das ganz an<strong>der</strong>s aus.<br />

Natürlich gibt es Gründe, von dieser Vorgehensweise abzuweichen. Bei <strong>der</strong> Implementierung <strong>der</strong> Klasse<br />

FIXED LIST (Abbildung 3.38 auf Seite 111) haben wir die Klasse ARRAY geerbt, obwohl Fel<strong>der</strong> eindeutig<br />

keine Listen sind. Hier stand die Effizienz und Einfachheit <strong>der</strong> Schreibweise im Vor<strong>der</strong>grund. Auch mag die<br />

Flexibilität <strong>der</strong> Redefinition ein Kriterium für Vererbung anstelle des Kaufens sein.<br />

Die größere Flexibilität <strong>der</strong> Vererbung erkauft man sich jedoch durch eine stärkere Bindung an die Elternklasse.<br />

Kunden und Lieferanten kommunizieren über sauber definierte Schnittstellen und Verträge. Der Kunde<br />

wird von Än<strong>der</strong>ungen <strong>der</strong> Implementierungen bei den Dienstleistungen nicht beeinflußt. Zwischen Eltern und<br />

Nachkommen gibt es keine <strong>der</strong>artigen Sicherheiten. Eine globale Entscheidung für o<strong>der</strong> wi<strong>der</strong> die Vererbung<br />

gibt es also nicht. Sie sollte im Einzelfall durch eine Bewertung dieser Kriterien getroffen werden.<br />

3.9 Arbeiten mit Eiffel<br />

In den bisherigen Unterkapiteln haben wir alle wesentlichen Konzepte für die Strukturierung von Daten angesprochen<br />

und an vielen Beispielen illustriert. Damit haben wir alle Komponenten beisammen, die wir für einen<br />

systematischen Entwurf <strong>der</strong> Architektur von Softwaresystemen benötigen. Sie sind in nun <strong>der</strong> Lage, Klassen<br />

zu entwerfen, die Beziehungen <strong>der</strong> Klassen untereinan<strong>der</strong> durch von Vererbung und Benutzung festzulegen<br />

und die notwendigen Leistungen einer Klasse in <strong>der</strong> Form von Kontrakten genau zu spezifizieren.<br />

Auf Programmierkonstrukte für eine systematische Implementierung <strong>der</strong> einzelnen Leistungen einer Klasse<br />

(also Schleifen, Prozeduren, Ausdrücke) werden wir erst im nächsten Kapitel eingehen. Sie sind aber bereits<br />

prinzipiell in <strong>der</strong> Lage, die Dienstleistungen bereits existieren<strong>der</strong> Klassen in ihren eigenen zu benutzen und<br />

sich somit das große Spektrum vordefinierter Softwarestücke aus <strong>der</strong> Eiffel-Bibliothek zunutze zu machen.<br />

Bisher haben wir aber erst wenig dazu gesagt, wie man aus dieser losen Ansammlung von Klassen ein ausführbares<br />

Eiffel-Softwarepaket erzeugt. Der Grund hierfür ist, daß es einer <strong>der</strong> Grundgedanken <strong>der</strong> objektorientierten<br />

Programmierung ist, die konkrete Implementierung und die Bestimmung eines “Hauptprogramms”<br />

so lange wie möglich zu verschieben und den eigentlichen Entwurf – die Strukturierung von Daten und Dienstleistungen<br />

– in den Vor<strong>der</strong>grund zu stellen. An<strong>der</strong>s als in <strong>der</strong> “konventionellen” Programmierung wird<br />

ein also Softwaresystem nicht um eine zentrale Hauptfunktion herum entworfen, son<strong>der</strong>n als Ansammlung<br />

unabhängig agieren<strong>der</strong> Einzelbetriebe, die in einer Bibliothek (library) gesammelt werden. Auf diese Art wird<br />

die Entwicklung wie<strong>der</strong>verwendbarer Softwarebausteine betont, die als Implementierungen von Klassen gebaut<br />

werden.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!