Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
• Die Verän<strong>der</strong>ung und Auswertung <strong>der</strong> Daten darf nur über prozedurale Schnittstellen geschehen. Ein<br />
direktes Lesen und Schreiben ist nicht erlaubt, son<strong>der</strong>n nur über Funktionen und Prozeduren für Anfragen<br />
und Än<strong>der</strong>ungen.<br />
Eiffel realisiert dieses Prinzip, indem qualifizierte Vorkommen von Attributen als Funktionen aufgefaßt werden,<br />
die nur einen Wert liefern, nicht aber eine Zuweisung von Werten zulassen. Wertzuweisungen sind nur innerhalb<br />
<strong>der</strong> deklarierenden Klasse, also nur über unqualifizierte Attribute des aktuellen Exemplars möglich.<br />
Darüber hinaus müssen nicht alle Attribute nach außen hin zugänglich sein, da manche vielleicht nur für die<br />
interne Darstellung benötigt werden. So könnte es zum Beispiel sein, daß die Klasse PERSON die Vornamen<br />
einer Person intern als Liste einzelner Vornamen darstellt, nach außen aber nur als einen einzigen String<br />
liefert. Ob vornamen also ein Attribut ist o<strong>der</strong> eine Funktion, darf den Benutzer nicht interessieren.<br />
Dieses Prinzip ist auch die Ursache dafür, daß <strong>der</strong> Aufruf (und die Deklaration) von Routinen und Attributen<br />
in Eiffel die gleiche Syntax haben. Es erlaubt dem Systementwickler, nachträglich die Implementierung einer<br />
Klasse zu än<strong>der</strong>n, ohne daß dies Konsequenzen für die Außenwelt hat. Kunden einer Klasse sind – was<br />
die Art <strong>der</strong> Verarbeitung angeht – von Än<strong>der</strong>ungen überhaupt nicht betroffen. Es än<strong>der</strong>t sich allenfalls die<br />
Geschwindigkeit, mit <strong>der</strong> Instruktionen ausgeführt werden.<br />
class PERSON<br />
creation<br />
init mit namen<br />
feature{}<br />
vornamen liste: STRING;<br />
feature<br />
init mit namen(n,v:STRING) is ... do ... end;<br />
name: STRING;<br />
vornamen: STRING is ... do ... end;<br />
anzahl vornamen: INTEGER is ... do ... end;<br />
geburtsjahr, todesjahr: INTEGER;<br />
alter(jahr:INTEGER): INTEGER is ... do ... end;<br />
setze todesjahr(jahr:INTEGER) is ... do ... end;<br />
vater, mutter: PERSON;<br />
geschwister: ARRAY[PERSON] is ... do ... end;<br />
großeltern: ARRAY[PERSON] is ... do ... end;<br />
nationalität: STRING<br />
end -- class PERSON<br />
Abbildung 3.15: Klassendefinition mit Datenkapselung<br />
Welche features für die Außenwelt sichtbar sein sollen, wird durch die genaue Form <strong>der</strong> feature-Klausel beschrieben.<br />
Features, die hinter dem Schlüsselwort feature {} genannt werden – in Abbildung 3.15 das feature<br />
vornamen liste –, bleiben nach außen hin unsichtbar. Features, die hinter einem einfachen Schlüsselwort<br />
feature vorkommen (also alle an<strong>der</strong>en hier genannten features), sind für alle Kunden zugänglich. 12 Dies gilt<br />
sowohl für Attribute als auch für Routinen.<br />
Eiffel erlaubt sogar eine feinere Unterscheidung, die auch die Verwendung <strong>der</strong> Klammern “{}” motiviert. Es<br />
kann nämlich sehr sinnvoll sein, die Zugangsberechtigung für bestimmte features abhängig zu machen von<br />
<strong>der</strong> Klasse, welche die Anfrage stellt. Dies realisiert den Gedanken, daß die Herausgabe aller verfügbarer<br />
Informationen sehr unangenehme Konsequenzen haben könnte, wenn sie in die falschen Hände geraten. Auf<br />
<strong>der</strong> an<strong>der</strong>en Seite sind diese Informationen für manche Verarbeitungen unbedingt notwendig.<br />
Bei <strong>der</strong> Verwaltung von Studentendaten müssen zum Beispiel Namen, Matrikelnummern und Prüfungsergebnisse<br />
gesammelt werden. Das Prüfungsamt braucht alle diese Informationen, um im Endeffekt ein Diplomzeu-<br />
12 In früheren Versionen von Eiffel mußten diese Features explizit in einer Export-Liste genannt werden. Dies ist aber überflüssig<br />
geworden durch die verbesserte Syntax. export wird nur noch für die Aufschlüsselung <strong>der</strong> Sichtbarkeit vererbter features benötigt.