6.14 Gegenseitige Abhängigkeiten von Klassen
In Java brauchen wir uns keine Gedanken um die Reihenfolge der Deklarationen zu machen. Wo es in anderen Sprachen genau auf die Reihenfolge ankommt, kann in Java eine Klasse eine andere benutzen, auch wenn diese erst später im Programmtext definiert ist. In C ist dies ein bekanntes Problemfeld. Wir wollen eine Funktion nutzen, müssen diese aber vor dem Aufruf schon definiert haben.1 Noch schlimmer ist dies bei verketteten Listen und ähnlichen Datenstrukturen. Dann wird dort erst deklariert (zum Beispiel class Element) und später definiert und implementiert. In Java können wir uns ganz und gar auf den Compiler verlassen - es ist seine Aufgabe, mit den Abhängigkeiten zurechtzukommen.
Ein gewisses Problem bereiten die Abhängigkeiten dennoch, zum Beispiel die eines Angestelltenverhältnisses. Jeder Arbeiter hat einen Vorarbeiter, aber auch ein Vorarbeiter ist ein Arbeiter. Wie sollen nun die Klassen implementiert werden? Definieren wir die Arbeiter-Klasse zuerst, kann der Vorarbeiter sie erweitern. Aber dann kennt der Arbeiter noch keinen Vorarbeiter! Dieses Problem ist glücklicherweise nur in C oder C++ problematisch. In Java hilft uns der Compiler, denn dieser unternimmt während des Compile-Vorgangs eine Vorausschau in den Dateien der importierten Pakete und in den eigenen Dateien. Die Beziehung zwischen Arbeiter und Vorarbeiter kann auf zwei Wegen gelöst werden: Jede Klasse wird in eine Datei gekapselt, so etwa in die Datei Arbeiter.java und in die Datei Vorarbeiter.java.
class Arbeiter
{
Vorabeiter vorarbeiter;
// was einen Arbeiter so auszeichnet
}
Im Fall der Dateitrennung wird der Compiler in die jeweils andere Quelltextdatei sehen.
class Vorarbeiter extends Arbeiter
{
// und hier, was er alles mehr hat
}
Sind beide Klassen in einer physikalischen Datei platziert, findet der Compiler die andere Klasse leicht.
1 Oder mit extern oder Prototypen diese Definition vorziehen.
|