Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
3.2.2 Klassen in Eiffel<br />
Mit den abstrakten Datentypen haben wir eine mathematische Beschreibungsform gegeben, die es erlaubt,<br />
Klassen von Objekten vollständig, genau und eindeutig zu charakterisieren und dabei gleichzeitig eine Überspezifikation<br />
zu vermeiden. Wir wollen nun zeigen, wie man eine solche Beschreibungsform in einer Programmiersprache<br />
ausdrücken kann.<br />
In <strong>der</strong> Denkweise <strong>der</strong> Programmiersprachen hat sich anstelle des Namens “abstrakter Datentyp” <strong>der</strong> Begriff<br />
“Klasse” zur Beschreibung <strong>der</strong> Gemeinsamkeiten einer Gruppe von Objekten eingebürgert. In Eiffel ist das<br />
Konzept <strong>der</strong> Klasse nahezu identisch mit dem <strong>der</strong> abstrakten Datentypen. Gegenüber <strong>der</strong> mathematischen<br />
Sichtweise än<strong>der</strong>n sich nur einige <strong>der</strong> verwendeten Begriffe und Schlüsselworte.<br />
Die einfachste Form einer Klassendefinition ist etwas ähnliches wie ein Verbundtyp in Pascal, in dem nur die<br />
gemeinsame Struktur einer Gruppe von Objekten festgelegt wird:<br />
class PERSON feature<br />
name, vornamen: STRING;<br />
geburtsjahr, todesjahr: INTEGER;<br />
nationalität: STRING<br />
end -- class PERSON<br />
Abbildung 3.5: Eine einfache Klassendefinition<br />
Die Klasse in Abbildung 3.5 beschreibt die Struktur einer Menge von Objekten, die Instanzen o<strong>der</strong> Exemplare<br />
dieser Klasse genannt werden. Die Klasse erhält den Namen PERSON und stellt Komponenten wie name,<br />
vorname, etc. zur Verfügung. Die Komponenten einer Klasse werden als Dienstleistungen <strong>der</strong> Klasse betrachtet,<br />
die für eventuelle Benutzer dieser Klasse nach außen hin verfügbar sind. Dabei spielt es – von außen<br />
betrachtet – keine Rolle, ob diese Dienstleistungen erbracht werden, indem auf eine abgespeicherte Komponente<br />
zugegriffen wird o<strong>der</strong> indem eine Berechnung (z.B. zur Bestimmung einer eindeutigen internen Kennung)<br />
durchgeführt wird. Diese Sicht deckt sich mit <strong>der</strong> im Abschnitt 3.2.1 angesprochenen Philosophie <strong>der</strong> abstrakten<br />
Datentypen, die alle Dienstleistungen als Funktionen ansieht, von denen einige vielleicht keine Eingaben<br />
benötigen.<br />
Um dieser Sichtweise Rechnung zu tragen, werden in Eiffel alle nach außen hin sichtbaren Dienstleistungen<br />
einer Klasse mit dem Oberbegriff feature 6 bezeichnet. Im einfachsten Fall sind Features nur Attribute, also Bestandteile<br />
von Klassen, die tatsächlich eine Komponente <strong>der</strong> Objekte <strong>der</strong> Klasse bezeichnen. Features können<br />
aber auch an<strong>der</strong>e von <strong>der</strong> Klasse bereitgestellte Dienstleistungen sein, nämlich Routinen, die Operationen auf<br />
den Objekten <strong>der</strong> Klasse beschreiben, wie zum Beispiel die Bestimmung aller <strong>der</strong>zeit verfügbaren (nicht ausgeliehenen)<br />
Bücher, die von einem bestimmten Autor geschrieben wurden. Hierauf werden wir im Abschnitt<br />
3.3 zurückkommen.<br />
Die Schlüsselworte class, feature und end, gedruckt in einem an<strong>der</strong>en Schriftsatz, werden zur syntaktischen<br />
Aufteilung einer Klassendefinition in Klassendeklaration und Deklaration von Features benutzt. Features vom<br />
selben Typ können in Deklaration gruppiert werden. Für die Aneinan<strong>der</strong>reihung von Deklarationen (und später<br />
auch von an<strong>der</strong>en Instruktionen) wird als Trennzeichen das Semikolon “;” verwendet und für Kommentare<br />
<strong>der</strong> doppelte Bindestrich “--”. Es hat sich als gute Konvention bewährt, am Ende einer Klassendefinition den<br />
Namen <strong>der</strong> Klasse im Kommentar zu wie<strong>der</strong>holen.<br />
Klassen sind die Grundkomponenten, aus denen alle Eiffel-Programme aufgebaut werden. Sie beschreiben<br />
nicht nur die Datenstrukturen, die in einem Softwareprodukt verwendet werden, son<strong>der</strong>n ebenso alle Module,<br />
aus denen dieses Softwareprodukt aufgebaut ist – einschließlich dem “Hauptprogramm”. Diese Vorgehensweise<br />
entspricht einer konsequenten Umsetzung <strong>der</strong> objektorientierten Sichtweise. Ein Programm ist nichts<br />
6 Der deutsche Begriff für feature ist Merkmal. Der englische Begriff hat sich jedoch auch in <strong>der</strong> deutsprachigen Literatur<br />
eingebürgert, da er in seinem Verwendungszweck eindeutiger zu sein scheint. Wir werden dieser Tatsache Rechnung tragen und<br />
trotz des sich daraus ergebenden Mißbrauchs <strong>der</strong> deutschen Sprache und Grammatik den Begriff feature weiterverwenden.