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.
class ARBEITNEHMER<br />
inherit PERSON<br />
export<br />
{ARBEITGEBER} name, vornamen, geburtsjahr;<br />
{FINANZAMT} all<br />
end -- feature-Anpassung von PERSON<br />
feature<br />
adresse: ADRESSEN;<br />
gehaltsklasse: STRING;<br />
gehalt: REAL is -- Gehalt berechnen<br />
do Result := Gehalt aus Tabelle nach gehaltsklasse end<br />
end -- class ARBEITNEHMER<br />
Abbildung 3.30: Klassendefinition mit selektivem Export geerbter features<br />
Diese Koppelung <strong>der</strong> Vererbung mit dem in Abschnitt 3.4 diskutierten Geheimnisprinzip hat eine Reihe interessanter<br />
Anwendungen. Sie erlaubt es, durch verschiedene Erbenklassen auch verschiedene Sichten auf<br />
eine Datenstruktur zu ermöglichen und hierüber die unterschiedlichen Zugriffsrechte zu regeln. So gibt es<br />
zum Beispiel bei einem Bankkonto die Vorgänge eröffnen, abheben, einzahlen, geheimzahl eingeben,<br />
geheimzahl prüfen, geheimzahl än<strong>der</strong>n, löschen, gebühren einziehen, konto sperren, usw. Nicht je<strong>der</strong><br />
dieser Vorgränge darf vom Kunden selbst ausgeführt werden (für die Eröffnung des Kontos sind z.B. einige<br />
Vorschriften zu beachten) son<strong>der</strong>n nur von den Bankangestellten am Schalter und umgekehrt. An<strong>der</strong>e Vorgänge<br />
(Kontosperrung) dürfen nur von Angestellten des Managements ausgelöst werden. Diese verschiedenen Sichten<br />
auf ein und dieselbe Datenstruktur läßt sich durch Vererbung auf eine sehr einfache und übersichtliche<br />
Art realisieren. Die in Abbildung 3.31 genannten Erben <strong>der</strong> Klasse BANKONTO stellen jeweils einen Teil <strong>der</strong><br />
Dienstleistungen <strong>der</strong> Ahnenklasse bereit und darüber hinaus noch ihre eigenen speziellen features.<br />
✬<br />
✫<br />
SCHALTER<br />
✬<br />
BANKONTO<br />
✫<br />
✟✩✟✟✟✟✯ ✬<br />
✻<br />
✪✫<br />
KUNDE<br />
✩<br />
❍❨ ❍✪<br />
❍<br />
✩❍<br />
❍✬<br />
✪✫<br />
MANAGEMENT<br />
✩<br />
✪<br />
Abbildung 3.31: Vererbung und Datenkapselung: Verschiedene Sichten auf eine Datenstruktur<br />
Eine gewisse Ausnahme von <strong>der</strong> Regel, daß features einer Elternklasse für gewöhnlich übernommen werden,<br />
betrifft Initialisierungsprozeduren. Meist besitzen die Erben einer Klasse mehr Attribute als ihre Vorfahren<br />
und auch die Eigenschaften <strong>der</strong> geerbten features sind oft spezieller als die <strong>der</strong> Elternklasse 22 . Aus diesem<br />
Grunde müssen spezifische Initialisierungsprozeduren einer Nachkommenklasse oft völlig an<strong>der</strong>s aussehen als<br />
die <strong>der</strong> Eltern. Man kann also nicht einfach die Initialisierungsprozedur <strong>der</strong> Elternklasse erneut zur Erzeugung<br />
von Objekten <strong>der</strong> Nachkommenklasse verwenden. Ist dies dennoch gewünscht, so muß diese Prozedur erneut<br />
über eine creation-Klausel als Initialisierungsprozedur <strong>der</strong> Nachkommenklasse deklariert werden. Ansonsten ist<br />
sie nicht mehr als eine gewöhnliche geerbte Routine, die bestehende Objekte än<strong>der</strong>t, nicht aber neue erzeugt.<br />
Vererbung ermöglicht es, Objekte einer Nachkommenklasse auch als Objekte <strong>der</strong> Vorfahrenklasse zu betrachten.<br />
Arbeitnehmer und Entleiher sind insbeson<strong>der</strong>e auch Personen – man besitzt nur einige zusätzliche<br />
Informationen über Arbeitnehmer und Entleiher, die man von Personen nicht unbedingt erhalten kann.<br />
22 So muß zum Beispiel ein Arbeitnehmer in Deutschland immer älter als 14 Jahre sein, während für Personen eine solche<br />
Einschränkung nicht sinnvoll ist.