24.11.2013 Aufrufe

5 Objektorientiertes Design

5 Objektorientiertes Design

5 Objektorientiertes Design

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

62 3 <strong>Objektorientiertes</strong> <strong>Design</strong><br />

Führen wir das Programm als Ant-Target REFERENCESEMANTICSEXAMPLE aus, so<br />

werden die ersten beiden Einträge "Test1" und "Test2" des Arrays geändert. Wir<br />

erhalten folgende Ausgabe:<br />

[Michael, changed this entry, !!!]<br />

Außerdem wird durch diese Ausgabe offensichtlich, dass die Neuzuweisung der Referenz<br />

innerhalb der Methode sich nicht in der main()-Methode auswirkt, Wertänderungen<br />

einzelner Elemente dagegen schon. Das gilt ebenso für Datenstrukturen aus dem<br />

Collections-Framework (vgl. Kapitel 5), etwa für Listen und Mengen. Dieser Sachverhalt<br />

sollte einem immer bewusst sein, da sich ansonsten leicht Fehler einschleichen,<br />

die schwierig zu finden sind. Call-by-Value bezieht sich in Java wirklich ausschließlich<br />

auf den Wert der Referenz bzw. des primitiven Typs. Auf weitere Auswirkungen der<br />

Referenzsemantik werde ich im Verlauf dieses Buchs, insbesondere in Abschnitt 3.4.1,<br />

detaillierter eingehen.<br />

Lebenszyklus von Objekten und Speicherfreigabe Der Lebenszyklus eines<br />

Objekts beginnt bei dessen Konstruktion. Ein Objekt ist an sein »Lebensende« gelangt,<br />

wenn keine Referenzvariable mehr auf dieses Objekt verweist. Folglich kann es von<br />

keiner Stelle im Programm mehr erreicht und angesprochen werden. Der genaue Zeitpunkt<br />

des »Ablebens« und der damit verbundenen Speicherfreigabe kann in der JVM<br />

nicht exakt bestimmt werden. Das liegt daran, dass die Aufräumarbeiten und die Speicherfreigabe<br />

durch einen speziellen Mechanismus zur Speicherbereinigung, die sogenannte<br />

Garbage Collection, erfolgen. Die konkreten Zeitpunkte der Ausführung sind<br />

nicht vorhersehbar, da diese von der gewählten Aufräumstrategie und des gerade belegten<br />

und noch freien Speichers abhängig sind. Details dazu beschreibt Abschnitt 8.7.<br />

Sichtbarkeiten Beim objektorientierten Programmieren unterscheidet man verschiedene<br />

Sichtbarkeiten, die festlegen, ob und wie andere Klassen auf Methoden und<br />

Attribute zugreifen dürfen. Java bietet folgende vier Sichtbarkeiten:<br />

■<br />

■<br />

■<br />

■<br />

public – von überall aus zugreifbar<br />

protected – Zugriff für abgeleitete Klassen und alle Klassen im selben Package<br />

Package-private oder default (kein Schlüsselwort 5 ) – nur Klassen im selben Package<br />

haben Zugriff darauf<br />

private – nur die Klasse selbst und alle ihre inneren Klassen haben Zugriff<br />

Kapselung Die Kapselung von Daten (Information Hiding) stellt einen Weg dar,<br />

die Attribute eines Objekts vor dem direkten Zugriff und der direkten Manipulation<br />

durch andere Objekte zu schützen. Dazu kann man die Sichtbarkeit der Attribute auf<br />

5 Man kann diese Sichtbarkeit durch einen Kommentar der Form /*private*/ bzw.<br />

/*package*/ andeuten. Dies ist hilfreich, um versehentliche Sichtbarkeitserweiterungen zu<br />

verhindern. Man dokumentiert somit, dass bewusst diese Sichtbarkeit gewählt wurde.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!