29.01.2014 Aufrufe

Script Java

Script Java

Script Java

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.

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!