Komplexe Programme sollten mit Hilfe von Methoden in kleinere, übersichtliche Teile (Unterprogramme, Funktionen, in Java Methoden genannt) strukturiert werden. Diese können mehrmals aufgerufen werden, was die Codeduplikation unnötig macht. Dies entspricht der fundamentalen Programmiertechnik der Wiederverwendung von einmal geschriebenem Code. Eine Methode liefert in der Regel eine Rückgabe zurück. Bei der Deklaration muss der Datentyp des Rückgabewertes angegeben werden. Eine Methode, die keine Rückgabe zurück gibt, wird mit dem Schlüsselwort void eingeleitet.
Beispiel 1: Sternenhimmel
// Sterne.java import ch.aplu.util.*; import java.awt.Color; public class Sterne { private GPanel p = new GPanel(); private double x, y; public Sterne() { p.bgColor(Color.blue); p.color(Color.yellow); for (int i = 0; i < 50; i++) { x = Math.random(); y = Math.random(); stern(x, y); // Methodenaufruf } } private void stern(double x, double y) // Methodendeklaration { double r = 0.05; p.fillTriangle(x - Math.sqrt(3)/2 * r, y - r/2, x + Math.sqrt(3)/2 * r, y - r/2, x, y + r); p.fillTriangle(x - Math.sqrt(3)/2 * r, y + r/2, x + Math.sqrt(3)/2 * r, y + r/2, x, y - r); } public static void main(String[] args) { new Sterne(); } } |
Zugriffsbezeichner (Access-Modifier) sind die Schlüsselwörter public, protected und private , die bei Deklarationen gesetzt werden, um die Sichtbarkeit (Zugriffsrechte) der Instanzvariablen, Methoden oder Klassen festzulegen. Für die Instanzvariablen gilt:
private | sichtbar nur in der eigenen Klasse |
public | überall sichtbar |
protected | sichtbar im gleichen Package und in abgeleiteten Klassen |
Fehlt der Zugriffsbezeichner, so wird standardmässig der protected Zugriff verwendet.
Es gehört zum guten Programmierstil, die Zugriffsbezeichner bewusst einzusetzen, um den Zugriff so weit wie möglich einzuschränken. Insbesondere werden Instanzvariablen in der Regel als private deklariert. Die Applikationsklasse sollte und main() muss immer public deklariert werden.
In unseren Beispielen verzichten wir teilweise auf die Zugriffsbezeichner, damit die Programme für den Anfänger einfacher werden.
Die Methode stern() kann auch im nachfolgenden Beispiel wieder verwendet weden.
Beispiel 2: Europa-Flagge mit Sternen
//EUSterne.java import ch.aplu.util.*; import java.awt.Color; public class EUSterne { private GPanel p = new GPanel(-10, 10, -10, 10); private double x, y; public EUSterne() { p.bgColor(Color.blue); p.color(Color.yellow); for (int i = 0; i < 12; i++) { x = 6 * Math.cos(Math.toRadians(360/12) * i); y = 6 * Math.sin(Math.toRadians(360/12) * i); stern(x, y); } } private void stern(double x, double y) { double r = 1; p.fillTriangle(x - Math.sqrt(3)/2 * r, y - r/2, x + Math.sqrt(3)/2 * r, y - r/2, x, y + r); p.fillTriangle(x - Math.sqrt(3)/2 * r, y + r/2, x + Math.sqrt(3)/2 * r, y + r/2, x, y - r); } public static void main(String[] args) { new EUSterne(); } } |
Beispiel 3: Quadratmuster
// Quadratmuster.java import ch.aplu.util.*; import java.awt.Color; public class Quadratmuster { private GPanel p = new GPanel(-100, 100, -100, 100); public Quadratmuster() { p.color(Color.blue); figure(0, 0, 32); } private void figure(double x, double y, int s) { if (s > 0) { figure(x - s, y + s, s/2); figure(x + s, y + s, s/2); figure(x - s, y - s, s/2); figure(x + s, y - s, s/2); p.pos(x, y); p.fillRectangle(s, s); } } public static void main(String[] args) { new Quadratmuster(); } } |