3. Referenzen

OOPWerkzeugeReferenzenFädenSynchronisationAppletsDokumentation


Referenzen

Wenn Sie bereits mit der Programmiersprache Pascal oder C gearbeitet haben, dann wissen Sie bestimmt wo Zeiger in diesen Sprachen eingesetzt werden. Zeiger benötigen wir für die Programmierung von dynamischen Datenstrukturen, VAR Parameter in Pascal und Adressübergabe in C verwenden wir bei Parameterübergabe des Originals.

Java verfolgt einen anderen Weg: Java kennt keine Zeiger! Jetzt stellt sich sofort die Frage, wie wir ohne Zeiger dynamische Datenstrukturen programmieren können. Glücklicherweise können wir Sie beruhigen: dynamische Datenstrukturen können in Java implementiert werden, ansonsten hätte diese Programmiersprache nie eine solche Beliebtheit erlangt.

Java kennt zwei Arten von Typen: einfache Typen und Referenztypen. Einfache Typen sind boolean, byte, short, int, long, char, float und double. Klassen und Arrays sind Referenztypen. Ein Referenzwert enthält eine Referenz auf die Daten des Objektes bzw. Arrays. Hinter den Referenzen stecken somit Zeiger, auf welche wir nicht zugreifen können. Fehlmanipulationen mit Zeigerarithmetik oder mit Zeigerkonvertierungen sind somit ausgeschlossen.

In den Programmiersprachen C und Pascal werden sehr viele Fehler beim Freigeben des Speichers gemacht. Oft geben wir dynamischen Speicher zu früh frei oder vergessen ihn überhaupt freizugeben. Im ersten Fall stürzt das Programm beim nächsten Zugriff auf den freigegebenen Speicher ab, oder liefert ein falsches Resultat zurück. Im zweiten Fall geht uns nach gewisser Zeit der Speicher aus. Um solche Fehler zu vermeiden, bauten die Designer von Java einen Speichermüllsammler ein. Dieser wird in regelmässigen Abständen gestartet und überprüft, welche Objekte noch referenziert werden. Wird ein Objekt nicht mehr referenziert, wird der nicht mehr benötigte Speicher eingesammelt und freigegeben. Wir brauchen uns deshalb nicht mehr um das Freigeben von Speicher zu kümmern. Speichermüllsammeln heisst auf Englisch Garbage Collection. Dieser Begriff hat sich im deutschsprachigen Raum durchgesetzt, so dass wir ab jetzt von Garbage Collection sprechen.

In diesem Werkstattposten wollen wir unser zweites Javaprogramm, eine Listenverwaltung für Fraktale, schreiben. Diese Liste benötigen wir um Fraktalinformationen zu speichern und später wieder zu laden.

Ziel

Wenn Sie den Posten bearbeitet haben, dann verstehen Sie wie Java den dynamischen Speicher verwaltet, und Sie werden in der Lage sein, dynamische Datenstrukturen in Java zu programmieren. 

Auftrag

Jedes Fraktal soll einen Namen erhalten. Erweitern Sie deshalb Ihre Klasse Fractal mit den Methoden

void setName(String name) setzt dem Fraktalnamen
String getName()gibt den Namen des Fraktals zurück
double getfx() gibt den Wert fx zurück
double getfy() gibt den Wert fy zurück
double getfw() gibt den Wert fw zurück
double getfh()gibt den Wert fh zurück

Schreiben Sie danach eine Klasse FractalList, welche eine einfach verkettete Liste von Fraktalen verwaltet. Implementieren Sie dabei die Methoden

FractalList () Klassenkonstruktor
int elementCount() gibt die Anzahl Fraktale der Liste zurück
void add(Fractal fractal) fügt das Fraktal fractal in die Liste ein
void remove(String name) löscht das Fraktal Namens name aus der Liste
Fractal getElement(int i) gibt das i-te Fraktal aus der Liste zurück

Testen Sie danach Ihr Programm mit unserem Testprogramm ListViewer aus. Wir erwarten von Ihnen, dass Ihre Klasse FractalList fehlerfrei mit unserem Testprogramm läuft.

Material

Es stehen Ihnen folgende Materialien zur Verfügung:

Referenzen in Java
Beschreibt den Unterschied von Java Referenzen zu Zeigern in den Programmiersprachen Pascal und C. Ebenfalls wird die Speicherverwaltung von Java erklärt.
Tips und Hinweise
Lesen Sie diesen Text durch bevor Sie mit der Arbeit anfangen.
Lösungsmöglichkeit
Enthält einen Lösungsvorschlag für diesen Werkstattposten.

OOP - Werkzeuge - Referenzen - Fäden - Synchronisation - Applets - Dokumentation
Werkstatt - Bibliographie