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.

Um die hier genannten Vorteile ausnutzen zu können, ist es wichtig, sich die Denkweise des objektorientierten<br />

Entwurfs anzueignen und das zentralistische Denken, in dem das “Hauptprogramm” eine so wichtige Rolle<br />

spielt, beiseite zu legen, wenn man es sich schon angewöhnt hat. Bei größeren Softwaresystemen ist eine<br />

dezentrale Architektur mit überschaubaren, unabhängigen und gleichberechtigten Einheiten unverzichtbar.<br />

4.1.3 Aufspüren <strong>der</strong> Klassen<br />

Die Frage, die sich hierbei natürlich direkt ergibt, ist “wie finde ich die Klassen, die ich brauche?”. Hierauf<br />

gibt es bisher keine allgemeingültige Antwort (und wahrscheinlich wird es auch nie eine solche geben), aber<br />

zumindest ein paar allgemeine Einsichten.<br />

Da Lösungskritik leichter ist als Lösungen zu schaffen, sollte man zunächst lernen, vorhandene Entwürfe zu<br />

analysieren und ihre Stärken und Schwächen zu beurteilen, um daraus Erfahrungen für eigene Entwürfe zu<br />

gewinnen. Hierzu werden beson<strong>der</strong>s die Kriterien aus Abschnitt 3.10 hilfreich sein. Es lohnt sich auch, in<br />

Teams zunächst unabhängig mehrere Lösungsansätze aufzustellen und dann zu beurteilen. Zum einen findet<br />

man hierdurch unter Umständen eine Lösung, die besser ist als jede einzelne, und zum zweiten weist die Kritik<br />

oft auf Denkfehler hin, die man beim nächsten Entwurf vermeiden kann. Aus Fehlern lernt man eine ganze<br />

Menge, aber nur wenn man zuläßt, daß diese auch aufgedeckt werden. Wer aber (sachliche) Kritik vermeidet,<br />

<strong>der</strong> wird auch selten etwas lernen.<br />

Für das Aufspüren von Klassen, die benötigt werden, um gefor<strong>der</strong>te Leistungen mit geringerem Aufwand zu<br />

beschreiben, bietet es sich an, zunächst einmal die Eiffel-Bibliotheken nach Lösungen für ähnliche Problemstellungen<br />

zu durchforsten. Für wichtige Datenstrukturen wie Listen, Bäume, Fel<strong>der</strong>, Stacks, Queues, Dateien,<br />

Strings, Hash-Tabellen, Bäume, usw. gibt es für nahezu alle Routineaufgaben (wie Einfügen, Löschen, sortieren<br />

etc.) längst eine vordefinierte Lösung, auf die man zurückgreifen kann. Da mindestens die Hälfte aller<br />

Probleme aus <strong>der</strong>artigen Routineaufgaben besteht, erspart dieser naive, aber doch sehr wirksame Weg eine<br />

Menge Arbeit und reduziert das Risiko von Fehlern.<br />

Ein weiterer wichtiger Hinweis ist, daß viele Klassen keine an<strong>der</strong>e Aufgabe haben werden, als das Verhalten<br />

externer Objekte zu modellieren. Ihre features und Eigenschaften ergeben sich also nahezu direkt aus <strong>der</strong><br />

Grobspezifikation.<br />

Ob ein Begriff aus <strong>der</strong> realen Welt als Klasse realisiert werden soll, hängt vor allem davon ab, wie damit<br />

umgegangen werden soll. Interessiert man sich zum Beispiel in einem Bibliothekssystem nur für Namen und<br />

Vornamen des Autors eines Buches als Ordnungskriterium, führt aber keine Operationen auf Autoren durch,<br />

so sollten Autoren nicht als eigene Klasse deklariert werden. Stattdessen sollte die Klasse BUCH zwei Komponenten<br />

für Namen und Vornamen beinhalten. An<strong>der</strong>s sieht dies aus, wenn man z.B. in einem angeschlossenen<br />

Informationssystem über Buchautoren immer die aktuelle Adresse mitverwalten und ggf. än<strong>der</strong>n möchte. Hier<br />

lohnt es sich schon, Autoren in einer separaten Klasse zusammenzufassen.<br />

Im allgemeinen kann man sagen, daß oft zu viele unnötige Klassen gebildet werden. Ein Begriff sollte genau<br />

dann zur Klasse erhoben werden, wenn er eine Menge von Objekten beschreibt, die interessante Operationen<br />

mit axiomatisch charakterisierbaren Eigenschaften besitzen.<br />

4.1.4 Schnittstellentechniken<br />

Ebenso wichtig wie die Strukturierung eines Systems in Klassen ist <strong>der</strong> Entwurf guter Schnittstellen, also die<br />

Fixierung <strong>der</strong>jenigen features, die nach außen hin angeboten werden. Die Qualität und Verständlichkeit dieser<br />

Schnittstellen bestimmt, in welchem Maße eine Klasse auch tatsächlich benutzt werden wird.<br />

Eine <strong>der</strong> wesentlichen Richtlinien ist hierbei eine strikte Trennung von Prozeduren und Funktionen. Die Programmiersprache<br />

Eiffel läßt prinzipiell zu, daß Funktionen nicht nur Werte berechnen, son<strong>der</strong>n gleichzeitig<br />

auch “Seiteneffekte” haben, d.h. während ihrer Abarbeitung auch das aktuelle Exemplar verän<strong>der</strong>n. Es ist

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!