Eigene Methoden
IO.println, Math.sqrt, wort.length() – all das sind Methoden, die andere für dich geschrieben haben. Jetzt schreibst du eigene.
Ein schlechtes Beispiel
Lies das folgende Programm.
a) Was zeichnet es?
b) Erkläre, was man an dieser Umsetzung in erster Linie kritisieren sollte.
c) Stell dir vor, alle Bäume sollen braune statt schwarze Stämme bekommen. Wie viele Stellen musst du ändern?
Auflösung
a) Drei Bäume nebeneinander – jeweils ein schwarzer Stamm mit einer grünen Krone.
b) Derselbe Ablauf steht dreimal fast wortgleich da. Unterschied ist nur die x-Koordinate. Das ist:
- lang und unübersichtlich – man muss dreimal dasselbe lesen, um zu erkennen, dass es dasselbe ist;
- fehleranfällig – beim Kopieren vergisst man leicht, eine der drei x-Koordinaten anzupassen;
- schlecht änderbar – siehe c).
c) An drei Stellen. Bei zwanzig Bäumen an zwanzig Stellen. Und wenn man eine vergisst, hat man einen Baum mit dem falschen Stamm – und merkt es vielleicht nicht.
Die Lösung: eine eigene Methode
Eine Methode ist ein benannter Block von Anweisungen. Sie besteht aus:
private void zeichneBaum(int pXKoord) {
^ ^ ^ ^
| | | └── Parameterliste
| | └── Name der Methode
| └── Rückgabetyp (void = gibt nichts zurück)
└── Sichtbarkeit
}
- Der Aufruf
zeichneBaum(-150)springt in die Methode, führt sie aus und kehrt danach zurück. - Der Wert in Klammern beim Aufruf heißt Argument, die Variable in der Methode Parameter.
- Parameter benennen wir mit dem Präfix
p– so sieht man sofort, dass der Wert von außen kommt.
Zurück zur Frage von vorhin: Wie viele Stellen musst du jetzt ändern, damit alle Bäume braune Stämme bekommen?
Ändere stift.setColor(0, 0, 0) in stift.setColor(120, 70, 20) und zähle mit.
Auflösung
Eine. Das ist der ganze Punkt.
Das ist der Kern der Problemlösestrategie Modularisierung: Ein Sachverhalt wird an genau einer Stelle beschrieben. Ändert er sich, ändert man eine Stelle.
Methoden ohne Grafik
Auch außerhalb der Bühne schreibst du Methoden. In einer Datei mit void main() stehen sie einfach daneben:
Woran erkennst du, dass etwas eine eigene Methode werden sollte?
- Du hast Code kopiert – fast immer ein Grund für eine Methode.
- Ein Abschnitt lässt sich mit einem Satz benennen („zeichnet einen Baum“, „prüft die Eingabe“).
- Ein Block ist so lang, dass du beim Lesen den Anfang vergisst.
Und dokumentiere sie: Über jede Methode gehört ein Kommentar, der sagt, was sie tut und was die Parameter bedeuten.
Aufgabe 1: Rahmen
Schreibe eine Methode zeichneRahmen(String pText), die einen Text eingerahmt ausgibt:
+------------+
| Informatik |
+------------+
Die Breite des Rahmens soll sich nach der Länge des Textes richten.
Tipp 1: Die Randzeile
Sie besteht aus einem Pluszeichen, dann so vielen Minuszeichen wie der Text lang ist plus zwei, dann wieder einem Pluszeichen. Für die Minuszeichen brauchst du eine Schleife.
Tipp 2: Zweimal dasselbe
Die obere und die untere Randzeile sind identisch. Das ist schon wieder kopierter Code – lagere ihn in eine zweite Methode aus. Methoden dürfen sich gegenseitig aufrufen.
Aufgabe 2: Eine Häuserzeile
Erinnerst du dich an das Haus aus Kapitel 1? Baue es zu einer Methode zeichneHaus(int pXKoord) um und stelle damit vier Häuser nebeneinander – mit einer Schleife.
Tipp: Von absoluten zu relativen Koordinaten
Im Haus aus Kapitel 1 standen feste Zahlen wie -60 und 60. Jetzt sollen sie sich nach pXKoord richten: aus -60 wird pXKoord - 60, aus 60 wird pXKoord + 60.
Die y-Koordinaten bleiben, wie sie sind – die Häuser stehen ja alle gleich hoch.
Zusatzaufgabe
Erweitere zeichneHaus um einen zweiten Parameter für die Größe, sodass du unterschiedlich große Häuser zeichnen kannst.
Zeichne damit eine Häuserzeile, bei der die Häuser nach hinten hin kleiner werden.