22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Prinzipiell wäre es sogar möglich, daß eine Klasse K dieselbe Elternklasse mehrfach in ihrer Erbklausel<br />

auflistet, um ggf. ein feature unter mehreren Namen anzubieten. Da man diese Konstellation nicht prinzipiell<br />

ausschließen kann, muß sie sehr sauber geregelt werden.<br />

Man könnte nun verlangen, daß alle wie<strong>der</strong>holt auftretenden features durch Umbenennung getrennt werden<br />

müssen, aber das Beispiel <strong>der</strong> Hilfskräfte zeigt, daß dies nicht gerade sinnvoll ist. Die doppelt von PERSON<br />

geerbten features sind ja in Wirklichkeit absolut identisch, da sie we<strong>der</strong> umbenannt noch redefiniert wurden.<br />

Deshalb möchte man sie ohne Komplikationen wie<strong>der</strong> als einfach vorkommende features benutzen können.<br />

Entwurfsprinzip 3.8.12 (Regel des wie<strong>der</strong>holten Erbens)<br />

Bei wie<strong>der</strong>holtem Erben wird jedes feature des gemeinsamen Vorfahren als gemeinsam genutzt (shared)<br />

angesehen, wenn es auf dem gesamten Vererbungspfad nicht umbenannt wurde. Features, die auf mindestens<br />

einem Wege umbenannt wurden, werden als vervielfältigt (replicated) angesehen.<br />

Die Regel besagt also, daß alleine <strong>der</strong> Name eines wie<strong>der</strong>holt ererbten features festlegt, wie oft es in einem<br />

Erben vorkommen muß. Normalerweise erzeugt ein wie<strong>der</strong>holt geerbtes feature keine Kollision, son<strong>der</strong>n wird<br />

wie<strong>der</strong> zu einem einzelnen feature vereinigt.<br />

Jede Umbenennung eines features auf dem Vererbungpfad von <strong>der</strong> erstmalig deklarierenden Ahnenklasse zum<br />

Erben erzeugt jedoch eine weitere Kopie dieses Merkmals. Hierfür gibt es durchaus eine Reihe von Anwendungen.<br />

So könnten zum Beispiel STUDENT und UNI-ANGESTELLTE von <strong>der</strong> Klasse PERSON ein weiteres<br />

feature adresse geerbt haben – im ersten Fall als Wohnadresse, im zweiten als Adresse des Arbeitsplatzes.<br />

In HILFSKRAFT kommen nun beide Versionen vor, so daß dieses feature beim Erben umbenannt werden sollte<br />

und somit vervielfältigt wird. Die Umbenennung kann in <strong>der</strong> Klasse HILFSKRAFT stattfinden, aber sinnvoller<br />

wäre es, dies bereits vorher zu tun.<br />

Die Regel des wie<strong>der</strong>holten Erbens gilt gleichermaßen für Routinen und Attribute. Nicht erlaubt ist daher, daß<br />

eine gemeinsam genutzte Routine (in <strong>der</strong> definierenden Klasse) Verweise auf Attribute o<strong>der</strong> Routinen enthält,<br />

die auf dem Vererbungspfad umbenannt wurden. Wegen <strong>der</strong> Vervielfältigung wären diese in <strong>der</strong> Erbenklasse<br />

nicht mehr eindeutig zu identifizieren. Derartige Routinen müssen auf dem Vererbungsweg ebenfalls an<br />

passen<strong>der</strong> Stelle umbenannt werden. (Tut man dies zu spät, so muß man sogar umbenennen und redefinieren!)<br />

So, wie sie bisher formuliert wurde, hinterläßt die Regel des wie<strong>der</strong>holten Erbens noch ungeklärte Probleme bei<br />

features, die an formale generische Parameter gebunden sind. In <strong>der</strong> folgenden Situation, die in komplexerer<br />

Form auch bei indirektem wie<strong>der</strong>holten Erben auftreten kann, wird ein feature f auf dem Vererbungsweg<br />

nicht umbenannt, erhält aber beim Erben verschiedene Typen.<br />

class GENERISCH[X] feature<br />

f:X; ....<br />

end -- GENERISCH<br />

class ERBE inherit<br />

GENERISCH[INTEGER]; GENERISCH[PERSON]<br />

.<br />

end -- ERBE<br />

Bei einer gemeinsamen Nutzung von f wäre unklar, ob f vom Typ INTEGER o<strong>der</strong> vom Typ PERSON ist. Ähnliche<br />

Mehrdeutigkeiten träten auf, wenn f als eine Routine mit einem formalen Argument vom Typ X deklariert<br />

worden wäre. Diese Mehrdeutigkeit wird durch die folgende Regel eliminiert.<br />

Entwurfsprinzip 3.8.13 (Regel <strong>der</strong> Generizität bei wie<strong>der</strong>holtem Erben)<br />

Der Typ eines beim wie<strong>der</strong>holten Erben gemeinsam genutzten features darf in <strong>der</strong> Elternklasse kein<br />

generischer Parameter sein. Ebenso darf eine gemeinsam genutzte Routine in <strong>der</strong> Elternklasse keine<br />

formalen Argumente enthalten, <strong>der</strong>en Typ ein generischer Parameter ist.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!