5 Objektorientiertes Design
5 Objektorientiertes Design
5 Objektorientiertes Design
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.