Dieses Jahr beginne ich meine zehnten Klassen wieder ganz anders, und zwar zum einem mit meinem GeisterGo-Projekt, zum anderen setze ich den Schwerpunkt gleich auf Objektreferenzen statt auf primitive Attributtypen. Wenn man mit diesen primitiven Typen (ganze Zahl, Kommazahl, Wahrheitswert) anfängt, sind die Schüler später total überrascht, dass ein Attribut oder allgemein eine Variable allgemein auch einen Objekttyp haben kann; wenn man gleich mit Objekttypen anfängt, geht das vielleicht leichter. Schauen wir mal.
Zum Üben bringe ich bald meine Ukulele mit, und wir singen zusammen „Drunt in der greana Au“ (Wikipedia):
(Alle:) Drunt in da greana Au steht a Birnbam, sche blau, juche. / Drunt in da greana Au steht a Birnbam, sche blau.
(A:) Was is an dem Bam? (B:) A wunderschena Ast. (Alle:) Ast am Bam, Bam in der Au. / Drunt in da greana Au steht a Birnbam, sche blau, juche. / Drunt in da greana Au steht a Birnbam, sche blau.
(A:) Was ist an dem Ast? (B:) A wunderschens Astl. (Alle:) Astl am Ast, Ast am Bam, Bam in der Au. / Drunt in da greana Au …
(A:) Was is an dem Astl? (B:) A wunderschens Zweigerl. (Alle:) Zweigerl am Astl, Astl am Ast, Ast am Bam, Bam in der Au. / Drunt in …
(A:) Was ist an dem Zweigerl? (B:) A wunderschens Blattl. (Alle:) Blattl am Zweigerl, Zweigerl am Astl, Astl am Ast, Ast am Bam, / …
(A:) Was ist an dem Blattl? (B:) A wunderschens Nesterl. (Alle:) Nest am …
(A:) Was is in dem Nest? (B:) A wunderschens Oar. (Alle:) Oar im Nest, …
(A:) Was is in dem Oar? (B:) A wunderschens Vogerl. (Alle:) Vogerl im Oar, …
(A:) Was is an dem Vogerl? (B:) A wunderschens Federl. (Alle:) Federl vom …
(A:) Was wird vo dem Federl? (B:) A wunderschens Betterl. (Alle:) Betterl vom …
(A:) Wer liegt in dem Betterl? (B:) A wunderschens Maderl. (Alle:) Maderl im …
(A:) Wer liegt bei dem Maderl? (B:) A wunderschenes Buaberl. (Alle:) Buaberl …
Beim objektorientierten programmieren schreibt man nicht ein großes Programm, in das man alles unterbringt, sondern man packt die Informationen in kleine, möglichst selbstständige Häppchen, die Objekte. Ein Objekt verwaltet alle Informationen, die es braucht, und arbeitet mit anderen Objekten zusammen, um gemeinsam eine Aufgabe zu lösen. Vorlagen für diese Objekte sind Klassen. Und das Klassendiagramm zum Lied sieht so aus:

Das Diagramm liest man so: „Jedes Au-Objekt hat 1 Birnbaum-Objekt, mit dem es in Verbindung steht. Jedes Birnbaum-Objekt hat 1 Ast-Objekt, mit dem es in Verbindung steht.“ Und so weiter.
Wenn das Programm dann mal läuft, arbeitet der Computer nicht mehr mit den Klassen, den Vorlagen, sondern mit konkreten Objekten, die anhand der Klassen-Vorlage erzeugt werden. Dann sieht die Situation so aus:

Das Diagramm liest man so: „Das Objekt o1 (vom Typ Au) hat eine Beziehung zum Objekt o2 (vom Typ Birnbaum). Das Objekt o2 hat eine Beziehung zum Objekt o3 (vom Typ Ast).“ Und so weiter.
(Etwas ungeschickt am Beispiel ist, dass es zu jeder Klasse nur ein Objekt gibt. Eindeutiger ist es, wenn man aus einer Vorlage mehrere gleichartige Objekte erzeugt, denn dazu sind Vorlagen ja da.)
Die Aufgabe: Die Schülerinnen kriegen eine Programmierprojekt, in dem alle Klassen bereits unfertig vorhanden sind, und müssen sie so fertig programmieren, dass man als menschlicher Benutzer nur einmal ein Au-Objekt erzeugen muss, und das erzeugt dann selbstständig sein eigenes Birnbaum-Objekt, das wiederum selbstständig sein Ast-Objekt erzeugt, und so weiter. Dazu muss man nur den Konstruktor in jeder Klasse ergänzen, eine spezielle Methode, die beim Erzeugen eines Objekts verwendet wird.
public class Au
{
Birnbaum baum;
public Au()
{
baum = new Birnbaum();
}
void singen() {
System.out.println("Drunt in der greana Au, steht a Birnbaum sche blau, juche!");
System.out.println("Drunt in der greana Au, steht a Birnbaum sche blau.");
baum.weitersingen();
}
}
Vorgeben ist bereits eine Singen- beziehungsweise Weitersingen-Methode in allen Klassen, anhand derer man am Ende rasch überprüfen kann, ob wirklich überall der Konstruktor richtig programmiert wurde.
(Und später kann man das als Ausgangspunkt für die einfach verkettete Liste nehmen, und für Vererbung: Kann man nicht alle diese Klassen zusammenfassen unter, uh, „Liedelement“, und zumindest die Singen-Methode verallgemeinern?)
Schreibe einen Kommentar