Erste Lösungsmöglichkeit Zweite Lösungsmöglichkeit Dritte Lösungsmöglichkeit |
2.
Lösungsmöglichkeit Zwei Methoden, eine zur Initialisierung und eine zum
Zeichnen sollen implementiert werden:
public class RechteckProgramm2
{
private Bildschirm bildschirm;
private Stift stift;
private Maus maus;
public void init()
{
bildschirm=new Bildschirm();
stift = new Stift();
maus = new Maus();
}
public void gibFrei()
{
maus.gibFrei();
stift.gibFrei();
bildschirm.gibFrei();
}
public void zeichnen()
{
stift.hoch();
stift.bewegeBis(20,20);
stift.zeichneRechteck(100,100);
while (!maus.istGedrueckt()){;}
this.gibFrei();
}
public static void main(String[] s)
{
RechteckProgramm2 rp2;
rp2 = new RechteckProgramm2();
/* rp2 ist ein Objekt der Klasse RechteckProgramm2 */
rp2.init();
rp2.zeichnen();
}
}
Erläuterung:
Abgesehen von der "main"-Methode stehen die
angegebenen Methoden und Variablen nur in Verbindung mit Objekten der Klasse
RechteckProgramm2 zur Verfügung, sie sind nicht als Klassenmethoden oder Klassenvariablen
deklariert. In der Methode main wird ein solches Objekt
erzeugt durch Aufruf des Standardkonstruktors RechteckProgramm2
und es werden die Nachrichten init und zeichnen an dieses Objekt geschickt.
Gleichwertig zu obigem Programm ist das folgende, bei dem an Stelle von init ein Konstruktor deklariert wird:
public class RechteckProgramm3
{
private Bildschirm bildschirm;
private Stift stift;
private Maus maus;
public RechteckProgramm3()
/* Achtung: kein Rückgabetyp, auch kein "void" */
{
bildschirm=new Bildschirm();
stift = new Stift();
maus = new Maus();
}
public void gibFrei()
{
maus.gibFrei();
stift.gibFrei();
bildschirm.gibFrei();
}
public void zeichnen()
{
stift.hoch();
stift.bewegeBis(20,20);
stift.zeichneRechteck(100,100);
while (!maus.istGedrueckt()){;}
this.gibFrei();
}
public static void main(String[] s)
{
RechteckProgramm3 rp3;
rp3 = new RechteckProgramm3();
/* rp3 ist ein Objekt der Klasse RechteckProgramm3 */
rp3.zeichnen();
}
}
Die beiden letztgenannten Lösungsvarianten zeigen zwar
Strukturierungsmöglichkeiten, die der erste Ansatz nicht erlaubte, allerdings ist die
Kombination von Klassenmethoden und dynamischen Methoden in einer Klasse
gerade im Anfangsunterricht didaktisch ungünstig. Folgende dritte Lösungsmöglichkeit
bietet einen Ausweg: |