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.

Komponentenzugriff: Der direkte Zugriff auf Komponenten eines Objektes geschieht über den Namen des<br />

entsprechenden Attributs. Ist also person 1 ein bereits bekanntes Objekt vom Typ Person, dann liefert<br />

person 1.name<br />

die Zeichenkette, die unter <strong>der</strong> zu name zugehörigen Komponente gespeichert ist. Bei Attributen, <strong>der</strong>en<br />

Typ eine Klasse ist, wird natürlich <strong>der</strong> Verweis geliefert und nicht etwa das Objekt selbst.<br />

person 1.vater<br />

liefert also einen Verweis auf das Objekt, welches den Vater von person 1 darstellen soll.<br />

Auch bei <strong>der</strong> Verwendung von Komponentenzugriffen gilt die obengenannte Einschränkung des Geheimnisprinzips.<br />

Ein Komponentenzugriff gilt ebenso wie jede an<strong>der</strong>e Routine als eine Dienstleistung,<br />

die von <strong>der</strong> Klasse bereitgestellt werden muß. Ein Zugriff auf eine beliebige Komponente ist daher nur<br />

dann möglich, wenn dies bei <strong>der</strong> Klassendeklaration explizit vereinbart wurde. Näheres dazu besprechen<br />

wir im Abschnitt 3.4.<br />

Auflösen eines Verweises: Manchmal kann es nötig sein, einen Verweis von dem ihm zugeordneten Objekt<br />

wie<strong>der</strong> zu lösen. Dies geschieht durch Zuweisung des Wertes Void. Um also die Komponente autor eines<br />

gegebenen Buchobjektes wie<strong>der</strong> von ihrem Objekt zu lösen, schreibt man:<br />

autor := Void<br />

Diese Auflösung des Verweises versetzt also Verweis aus dem Zustand created zurück in den leeren Zustand.<br />

Wichtig ist aber, hierdurch ausschließlich <strong>der</strong> Zustand des Verweises verän<strong>der</strong>t wird und nicht etwa<br />

das Objekt selbst. Das Objekt, mit dem die Komponente autor verbunden war, wird nicht angerührt.<br />

Insbeson<strong>der</strong>e wird es auch nicht gelöscht, son<strong>der</strong>n bleibt ggf. über an<strong>der</strong>e Verweise noch zugreifbar.<br />

Auflösung von Verweisen darf auch nicht verwechselt werden mit Anweisungen, die Speicherplatz an das<br />

Betriebssystem zurückgeben (wie etwa dispose in Pascal). Solche Anweisungen sind sehr gefährlich, da<br />

hierdurch eventuell Objekte zerstört werden, die noch über an<strong>der</strong>e Verweise zugreifbar waren. In Eiffel<br />

(und auch z.B. in Lisp) wird die Speicherplatzverwaltung automatisch durch die Programmierumgebung<br />

durchgeführt und nicht etwa durch den Programmierer selbst.<br />

Überprüfung des Verweiszustandes: Um den Zustand eines Verweises zu überprüfen, <strong>der</strong> mit einer Komponente<br />

verbunden ist, bietet Eiffel einen einfachen Test an. Der boolesche Ausdruck<br />

autor = Void<br />

liefert den Wert true, wenn <strong>der</strong> Verweis <strong>der</strong> Komponente autor leer ist, und ansonsten den Wert false.<br />

Duplizierung von Objekten: Bei <strong>der</strong> Zuweisung von Objekten mittels := haben wir gesehen, daß nur die<br />

Verweise kopiert werden, aber das genannte Objekt nach wie vor nur einmal vorhanden ist. Dies ist im<br />

Normalfall die sinnvollste Vorgehensweise. In manchen Fällen ist es aber nötig, eine Kopie eines bereits<br />

bekannten Objektes (und nicht nur des Verweises) anzulegen, z.B. um daraus ein Objekt zu erzeugen, das<br />

fast identisch mit dem ersten ist. Hierzu ist die Funktion clone da. Ist person 1 ein bereits bekanntes<br />

Objekt vom Typ Person, dann liefert <strong>der</strong> Aufruf<br />

clone(person 1)<br />

einen Verweis auf ein neues Objekt, dessen Komponenten mit denen von person 1 identisch sind. Ein<br />

solcher Aufruf macht allerdings nur Sinn im Zusammenhang mit einer Zuweisung, da sonst dieses neue<br />

Objekt nicht erreichbar wäre. Die Zuweisung<br />

autor := clone(person 1)<br />

hat also zwei Effekte. Sie erzeugt ein neues, mit person 1 identisches Objekt und weist <strong>der</strong> Komponente<br />

autor als Wert einen Verweis auf dieses Objekt zu (eventuell bestehende Verweise werden also aufgelöst).<br />

clone und die mit !! zusammenhängenden Erzeugungsprozeduren sind die einzigen Operationen, welche<br />

Objekte erzeugen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!