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.

Viel sinnvoller ist es, bei <strong>der</strong> Beschreibung einer Klasse noch nicht an die konkrete Implementierung zu denken<br />

son<strong>der</strong>n eine möglichst abstrakte Beschreibung <strong>der</strong>jenigen Informationen zu geben, die wirklich von Interesse<br />

sind. Die Klasse <strong>der</strong> Autoren, zum Beispiel, soll uns Namen, Vornamen, Nationalität, Geburts- und Todesjahr<br />

– falls vorhanden – liefern und umgekehrt zulassen, daß das Todesjahr nachgetragen wird. Alle an<strong>der</strong>en<br />

Informationen dürfen dagegen nicht verän<strong>der</strong>t werden – namensrechtliche Probleme bei Heirat seien außer<br />

Acht gelassen.<br />

Wir stehen also vor <strong>der</strong> Aufgabe, einerseits eine vollständige, genaue und eindeutige Beschreibung einer Klasse<br />

von Objekten zu geben, gleichzeitig aber eine Überspezifikation zu vermeiden. Die Antwort auf dieses Problem<br />

liegt in <strong>der</strong> Theorie <strong>der</strong> abstrakten Datentypen.<br />

3.2.1 Abstrakte Datentypen<br />

Ausgangspunkt <strong>der</strong> Theorie <strong>der</strong> abstrakten Datentypen ist die Feststellung, daß für ein Softwaresystem,<br />

welches die Objekte einer bestimmten Klasse benutzt, weniger die konkrete Realisierung relevant ist, als<br />

die Art <strong>der</strong> Dienstleistungen, welche es bietet. So bietet zum Beispiel die Klasse <strong>der</strong> Autoren an, Namen,<br />

Vornamen, Nationalität, Geburts- und Todesjahr, und ggf. auch das Alter eines Autors abzufragen und das<br />

Todesjahr zu verän<strong>der</strong>n. Wie diese Dienste realisiert werden – also ob z.B. das Alter des Autors berechnet<br />

o<strong>der</strong> gespeichert wird – ist ziemlich unbedeutend. Wichtig ist dagegen, daß diese Dienstleistungen gewisse<br />

Eigenschaften erfüllen, auf die sich das System verlassen darf, wie zum Beispiel, daß das Alter eines Autors<br />

eine ganze Zahl ist, die größer als Null ist (wahrscheinlich wäre 8 sinnvoller, aber man kann ja nie wissen).<br />

Eine abstrakte Datentypspezifikation beschreibt daher eine Klasse nicht durch die konkrete Realisierung son<strong>der</strong>n<br />

durch eine Liste von Dienstleistungen, die für die Außenwelt verfügbar sein sollen, und durch die Eigenschaften<br />

dieser Dienstleistungen. 4 Auf diese Art wird sichergestellt, daß die Außenwelt auf die Objekte einer<br />

Klasse nur mithilfe <strong>der</strong> bekanntgegebenen Dienstleistungen zugreifen kann und nicht etwa über die Implementierung(,<br />

welche sich ja möglicherweise än<strong>der</strong>n kann). Durch diese Form <strong>der</strong> Datenkapselung wird sichergestellt,<br />

daß sich jede Komponente eines Softwaresystems ausschließlich um ihre eigenen Geschäfte kümmert und in<br />

die Aufgaben <strong>der</strong> an<strong>der</strong>en nicht hineinpfuscht. Nur dieses Geheimnisprinzip garantiert die Integrität eines<br />

Moduls in einer Umwelt ständiger Verän<strong>der</strong>ungen.<br />

Für eine vollständige formale Spezifikation eines abstrakten Datentyps sind vier Fragen zu beantworten:<br />

• Welche Typen werden eingeführt?<br />

• Welche Funktionen (Dienstleistungen) werden eingeführt?<br />

• Was sind die Vorbedingungen für die Anwendbarkeit <strong>der</strong> Funktionen?<br />

• Welche Axiome (Eigenschaften) erfüllen die Funktionen?<br />

Typen und Funktionen beschreiben die Syntax des abstrakten Datentyps, Vorbedingungen und Axiome seine<br />

Semantik. Diese Beschreibung wird in einer rein mathematischen Form gegeben, um die gewünschte Genauigkeit<br />

und Eindeutigkeit sicherzustellen.<br />

Wir wollen die Bedeutung dieser vier Teile am Beispiel <strong>der</strong> vollständigen Spezifikation endlicher Listen<br />

(vgl. Abschnitt 2.3.5) illustrieren. Eine Liste wird als Struktur betrachtet, die folgende Dienste zur Verfügung<br />

stellt: trage ein neues Element ein (cons), greife auf das erste Element zu (head), entferne das erste Element<br />

(tail), prüfe ob die Liste leer ist (empty), erzeuge eine neue Liste (new), usw. Listen und ihre Dienstleistungen<br />

werden in sehr vielen Anwendungen benötigt und können auf viele verschiedene Arten implementiert werden,<br />

je nachdem, ob über die obengenannte Dienstleistungen hinaus noch weitere Dienstleistungen wie z.B. das<br />

Zusammensetzen von Listen (& in Abschnitt 2.3) angeboten werden sollen o<strong>der</strong> nicht.<br />

4 Anstelle von “Dienste” sagt man auch “Operationen” o<strong>der</strong> “Merkmale” (in Englisch “features”).

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!