Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
8.1 Abstrakte Methoden und Klassen<br />
abstract public class NumberSystem{<br />
abstract int toInt(String s);<br />
abstract String toString(int value);<br />
}<br />
Da die Methoden toInt() und toString() in der Klasse NumberSystem abstrakt<br />
sind, ist es plausibel, dass die Klasse NumberSystem nicht instanziert werden kann.<br />
Aus dem Programm ist aber auch zu entnehmen, dass die Klasse ArabicSystem<br />
ebenfalls eine abstrakte Klasse ist, obwohl sie keine abstrakte Methoden deklariert 1 . Es ist<br />
möglich, eine Klasse als abstract zu deklarieren, auch wenn diese keine abstrakten<br />
Methoden enthält. Hierdurch lässt sich eine Instanzierung verhindern.<br />
Im Beispiel können lediglich die Unterklassen der Klasse ArabicSystem instanziert<br />
werden. Da erst in den Unterklassen die bereits in der Oberklasse deklarierte<br />
Instanzvariable radix initialisiert wird, wäre eine Instanzierung von ArabicSystem<br />
wenig sinnvoll.<br />
Die Klasse NumberField, eine Unterklasse von TextField, wird für die Textfelder<br />
der graphischen Benutzeroberfläche verwendet. Sie deklariert Methoden, um den int-<br />
Wert einer Zahl, welche der Benutzer eingegeben hat, zu ermitteln oder eine Zahl als<br />
String im GUI anzuzeigen. Andererseits ermöglicht sie auch die Repräsentation der Zahlen<br />
in den unterschiedlichen Zahlenformaten.<br />
Nach eingehender Betrachtung merkt man aber, dass die besagten Methoden lediglich die<br />
Methoden toInt() und toString() aufrufen. Der Empfänger numberSystem der<br />
Botschaften toInt() und toString() wird als Instanz der Klasse NumberSystem<br />
deklariert und referenziert immer eine Instanz derjenigen „Zahlensystem-Klasse“, welche<br />
momentan in der Choice selektiert ist 2 .<br />
Entscheidend dabei ist, dass numberSystem vom Typ NumberSystem deklariert<br />
wurde, da hierdurch eine konversionslose Zuweisung gewährleistet ist. Hätte man<br />
numberSystem als Instanz der Klasse DecNumber deklariert, so könnte man ihr nicht<br />
eine Instanz der Klasse RomanNumber zuweisen, da ein type cast erforderlich wäre.<br />
Dies illustriert auch einen weiteren Vorteil für die Verwendung von abstrakten Methoden<br />
bzw. Klassen: Deren Einsatz zwingt den Programmierer, bereits auf höherer<br />
Hierarchiestufe die Signatur von weiter unten implementierten Methoden festzulegen,<br />
1 Die Unterscheidung zwischen abstrakten Klassen und nicht-abstrakten Klassen wird im Programm<br />
zusätzlich noch durch den Identifier unterstrichen: abstrakte Klassen werden als ∼System und sonstige<br />
Klassen als ∼Number bezeichnet.<br />
2 In der Klasse UserFrame wird ein Array base verwendet, welcher gewissermassen „auf Vorrat“<br />
Instanzen der fünf „Zahlensystem-Klassen“ enthält. Eine solche Instanz wird der Klasse NumberField<br />
einerseits zu Programmbeginn durch Aufruf ihres Konstruktors und andererseits durch die Methode<br />
changeBase() übergeben.<br />
210