22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Entwurfsprinzip 3.3.2 (Punktnotation) Alle Aufrufe von Funktionen, Prozeduren und Komponentenzugriffen<br />

auf ein Objekt werden in Eiffel einheitlich in <strong>der</strong> Notation entity.operation(argumente) ausgedrückt.<br />

Eine Operation entity.operation(argumente) greift auf ein Objekt über den Verweis zu, <strong>der</strong> durch entity<br />

bezeichnet wird. Damit dies fehlerfrei geschehen kann, muß das zugehörige Objekt natürlich existieren, d.h. <strong>der</strong><br />

zu entity gehörende Verweis darf nicht leer sein. Dies gilt für alle Operationen, insbeson<strong>der</strong>e auch für Zugriffe<br />

auf Komponenten. Der Versuch, auf ein Merkmal eines leeren Verweises zuzugreifen, ist einer <strong>der</strong> häufigsten<br />

Ursachen für Laufzeitfehler, die bei <strong>der</strong> Eiffel-Programmierung auftauchen.<br />

In “klassischen” Programmiersprachen wie Pascal wird anstelle von entity.operation(argumente) die Notation<br />

operation(objekt,argumente) benutzt. Bei einer ersten Betrachtung scheint diese Form symmetrischer<br />

zu sein als die von Eiffel. Jedoch benutzt Pascal beim Zugriff auf Komponenten eines Verbundes ebenfalls die<br />

Punktnotation und verlangt also vom Benutzer, die Unterscheidung zwischen Zugriff und Funktion vorzunehmen.<br />

Eiffel ist da einheitlicher. Der spezielle Grund für die Punktnotation, bei <strong>der</strong> das Objekt am Anfang<br />

jedes Aufrufs genannt wird, ist wie<strong>der</strong>um die objektorientierte Denkweise: es ist das wichtigste zu sagen,<br />

auf welchem Objekt eine Operation ausgeführt wird. Aus diesem Grunde soll das Objekt durch die Notation<br />

beson<strong>der</strong>s hervorgehoben werden.<br />

3.3.2 Definition von Routinen<br />

Nachdem wir gesehen haben, wie man Routinen aufruft, wollen wir nun zeigen, wie man sie definiert. Dazu<br />

muß als wichtigstes herausgehoben werden, daß Routinen prinzipiell nur als Dienstleistungen einer Klasse<br />

definiert werden können und nicht etwa als unabhängige “Unterprogramme”. 9 Routinen werden daher gleichberechtigt<br />

zu den Attributen einer Klasse als Features aufgeschrieben. Abbildung 3.10 zeigt eine abstrahierte<br />

Implementierung <strong>der</strong> in Beispiel 3.3.1 benutzten Routinen innerhalb <strong>der</strong> Klasse PERSON.<br />

class PERSON<br />

feature<br />

name, vornamen: STRING;<br />

geburtsjahr, todesjahr: INTEGER;<br />

nationalität: STRING;<br />

vater, mutter: PERSON;<br />

anzahl vornamen: INTEGER is -- Anzahl <strong>der</strong> Vornamen bestimmen<br />

do<br />

Result := Anzahl <strong>der</strong> Vornamen in vornamen<br />

end; -- anzahl vornamen<br />

alter(jahr:INTEGER): INTEGER is -- Alter im gegebenen Jahr bestimmen<br />

do<br />

Result := jahr - geburtsjahr<br />

end; -- alter<br />

setze todesjahr(jahr:INTEGER) is -- todesjahr auf jahr setzen<br />

do<br />

todesjahr := jahr<br />

end -- setze todesjahr<br />

end -- class PERSON<br />

Abbildung 3.10: Klassendefinition mit Routinen<br />

Neben den Attributen name, vornamen, geburtsjahr, todesjahr, nationalität, vater und mutter<br />

enthält die Klasse PERSON drei Routinen, die man an dem Vorhandensein <strong>der</strong> Schlüsselwortfolge is...do...end<br />

erkennt. Diese Folge begrenzt den Rumpf einer Routine. Eine Routine kann formale Argumente in Klammern<br />

9 Die im Abschnitt 3.3.4 vorgestellten Operationen, die auf allen Klassen Gültigkeit haben, sind daher in Eiffel als Dienstleistungen<br />

einer Klasse ANY realisiert, die ihre Konzepte auf alle Klassen vererbt.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!