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.
gnis ausstellen zu können. Auf <strong>der</strong> an<strong>der</strong>en Seite müssen zum Zwecke <strong>der</strong> schnellen Informationsverbreitung<br />
Klausurergebnisse öffentlich zur Einsicht ausgehängt werden. Es wäre Ihnen aber sicher nicht recht, wenn ein<br />
nicht so gutes Ergebnis jedem bekannt würde. Deshalb darf <strong>der</strong> Name nicht mit ausgedruckt werden, son<strong>der</strong>n<br />
nur Note und Matrikelnummer. Selektive Verbreitung von Informationen – eingeschränkt auf das unbedingt<br />
Notwendige – ist eine <strong>der</strong> wesentlichen Grundfor<strong>der</strong>ungen des Datenschutzes.<br />
Deshalb können Features selektiv bereitgestellt werden, d.h. es ist möglich, zu jedem feature anzugeben, welche<br />
Klasse es benutzen darf. Diese werden in geschweiften Klammern hinter <strong>der</strong> feature-Klausel genannt.<br />
feature {Klasse1,...,Klassen} featurelist<br />
bedeutet, daß die features <strong>der</strong> Aufzählung featurelist an die genannten Klassen Klasse1,...,Klassen (sowie<br />
an alle Klassen, die von diesen erben!) exportiert werden. Demzufolge bedeutet feature {} featurelist daß<br />
die features <strong>der</strong> Aufzählung featurelist überhaupt nicht weitergegeben werden. feature featurelist drückt<br />
aus, daß die features <strong>der</strong> Aufzählung featurelist an alle Klassen weitergegeben werden.<br />
class PERSON<br />
creation<br />
init mit namen<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 />
feature{EINWOHNERMELDEAMT}<br />
geburtsjahr, todesjahr: INTEGER;<br />
alter(jahr:INTEGER): INTEGER is ... do ... end;<br />
vater, mutter: PERSON;<br />
nationalität: STRING<br />
feature{STANDESAMT}<br />
setze todesjahr(jahr:INTEGER) is ... do ... end;<br />
feature{EINWOHNERMELDEAMT, PERSON}<br />
geschwister: ARRAY[PERSON] is ... do ... end;<br />
feature{PERSON}<br />
großeltern: ARRAY[PERSON] is ... do ... end;<br />
feature{}<br />
vornamen liste: STRING;<br />
end -- class PERSON<br />
Abbildung 3.16: Klassendefinition mit selektivem Export von Features<br />
In Abbildung 3.16 haben wir unser Beispiel um fiktive Klassen EINWOHNERMELDEAMT und STANDESAMT erweitert.<br />
Das Beispiel drückt aus, daß das Einwohnermeldeamt Geburts- und Todesjahr, Alter, Nationalität und Eltern<br />
abfragen kann, darüber hinaus – zusammen mit <strong>der</strong> Klasse PERSON – aber auch die Geschwister. Großeltern<br />
sind nur für Personen abfragbar. Nur das Standesamt darf das Todesjahr eintragen. Namen und Vornamen<br />
sind allgemein zugänglich.<br />
Durch eine saubere Ausarbeitung dieser recht einfach aufgestellten Vereinbarung kann die Verbreitung von Informationen<br />
klar geregelt werden. Die Klasse PERSON entscheidet, wer von ihr welche Informationen bekommt.<br />
Wie diese dann von den an<strong>der</strong>en Klassen weiterverbreitet werden, fällt nicht mehr in die Verantwortung dieser<br />
Klasse, son<strong>der</strong>n unter die Zuständigkeit <strong>der</strong> Klasse, welche die bereitgestellte Information verarbeitet. Mehr<br />
zum Geheimnisprinzip findet man in [Meyer, 1988, Kapitel 2.2.5 und 9].