Modularisierung
Modularisierung heißt: ein großes Problem in kleinere, benannte Teilprobleme zerlegen, jedes davon einzeln lösen und die Lösungen zusammensetzen. Sie ist eine Problemlösestrategie – kein Programmiertrick.
Überladen
Zwei Methoden dürfen denselben Namen tragen, solange sie sich in ihrer Parameterliste unterscheiden. Das nennt man Überladen.
Java entscheidet anhand der Anzahl und der Typen der Argumente, welche Methode gemeint ist. Der Rückgabetyp zählt dabei nicht – zwei Methoden, die sich nur darin unterscheiden, sind ein Fehler.
Beachte die dritte Methode: Sie ruft die zweite auf. Methoden dürfen und sollen einander benutzen.
Warum ist es sinnvoll, dass begruesse(String, int) die Methode begruesse(String) aufruft, statt die Ausgabe selbst zu schreiben?
Auflösung
Damit die Begrüßungsformel nur an einer Stelle steht. Soll aus „Hallo“ ein „Guten Tag“ werden, ändert man eine Zeile – und alle drei Varianten ziehen mit.
Das ist dasselbe Argument wie beim Baum in der ersten Lektion. Es gilt auf jeder Ebene.
Ein größeres Problem zerlegen
Ein Programm soll eine Notenstatistik ausgeben. Es liest fünf Notenpunkte ein und gibt aus:
- die Einzelnoten mit der zugehörigen Note in Worten
- den Durchschnitt
- die beste und die schlechteste Punktzahl
- ob der Kurs bestanden ist (Durchschnitt mindestens 5 Punkte)
Zerlege dieses Problem auf Papier in Teilaufgaben, bevor du eine Zeile Code schreibst. Notiere für jede Teilaufgabe:
- einen Methodennamen
- die Parameter
- den Rückgabetyp
Auflösung: ein möglicher Entwurf
| Methode | Parameter | Rückgabe | Aufgabe |
|---|---|---|---|
punkteInNote |
int pPunkte |
String |
wandelt Punkte in „sehr gut“, „gut“, … um |
durchschnitt |
fünf int |
double |
berechnet den Mittelwert |
maximum |
fünf int |
int |
größter Wert |
minimum |
fünf int |
int |
kleinster Wert |
istBestanden |
double pSchnitt |
boolean |
Durchschnitt mindestens 5 |
Fünf einzelne Parameter sind unschön – das merkst du selbst. In Kapitel 5 lernst du Felder kennen, und dann wird aus maximum(int, int, int, int, int) ein sauberes maximum(int[]).
Dass ein Entwurf einen solchen Schwachpunkt hat, ist normal. Wichtig ist, ihn zu erkennen und zu benennen.
Tipp 1: punkteInNote
Eine else if-Kette wie bei den Noten in Kapitel 3 – nur dass du diesmal nicht ausgibst, sondern zurückgibst.
Achte auf die Reihenfolge der Grenzen.
Tipp 2: durchschnitt
Aufpassen bei der Division: Die Summe ist ein int, aber der Rückgabetyp ist double. Ohne Typumwandlung schneidest du die Nachkommastellen ab.
Tipp 3: maximum bei drei Werten
Das Muster aus Kapitel 3: Merke dir den bisher größten Wert und vergleiche ihn nacheinander mit den übrigen.
Oder du rufst zweimal eine Zwei-Werte-Version auf – auch das ist Modularisierung.
Aufgabe: Das Programm zusammensetzen
Setze die geprüften Methoden jetzt zu einem vollständigen Programm zusammen: Es liest drei Notenpunkte ein und gibt die vollständige Statistik aus.
Beachte: Du hast die Methoden einzeln getestet. Wenn das Gesamtprogramm trotzdem nicht stimmt, liegt der Fehler im Zusammensetzen – nicht in den Bausteinen. Genau das ist der Vorteil dieses Vorgehens.
Zusatzaufgabe
Nimm dir ein Programm vor, das du in einem früheren Kapitel geschrieben hast – zum Beispiel den Zeitrechner oder das Zahlenraten.
a) Zerlege es nachträglich in Methoden. Welche Teilaufgaben stecken darin?
b) Schreibe zu mindestens zwei deiner Methoden eine Testklasse.
c) Beurteile: Ist das Programm dadurch besser geworden? Begründe – und sei ehrlich, wenn du findest, dass es für ein so kleines Programm übertrieben ist.