Koordinaten-Grafik mit Java

Entwicklungsprojekt PHBern
HomeAufgabenDruckenJava-Online
Online-Editor starten

Methoden verwenden

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

Beispiel zeigen (Sterne.java)

Beispiel im Online-Editor bearbeiten

// 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(- Math.sqrt(3)/2 * r, y - r/2, x + 
                   Math.sqrt(3)/2 * r, y - r/2, x, y + r);
    p.fillTriangle(- 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();
  }
}
 

Erklärungen zum Programmcode

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

Beispiel zeigen (EUSterne.java)

Beispiel im Online-Editor bearbeiten

//EUSterne.java

import ch.aplu.util.*;
import java.awt.Color;

public class EUSterne
{
  private GPanel p = new GPanel(-1010-1010);
  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(- Math.sqrt(3)/2 * r, y - r/2, x + 
                   Math.sqrt(3)/2 * r, y - r/2, x, y + r);
    p.fillTriangle(- 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();
  }
}
 

 

Rekursive Methodenaufrufe

Methoden mit Parametern werden auch bei Rekusionen verwendet. Die Methode figur(double x, double y , double s) ruft sich mehrmals auf, jeweils mit angepassten Parametern.

Beispiel 3: Quadratmuster

Beispiel zeigen (Quadratmuster.java)

Beispiel im Online-Editor bearbeiten

// Quadratmuster.java

import ch.aplu.util.*;
import java.awt.Color;

public class Quadratmuster
{
  private GPanel p = new GPanel(-100100-100100);

  public Quadratmuster()
  {
    p.color(Color.blue);
    figure(0032);
  }

  private void figure(double x, double y, int s)
  {
    if (> 0)
    {
      figure(- s, y + s, s/2);
      figure(+ s, y + s, s/2);
      figure(- s, y - s, s/2);
      figure(+ s, y - s, s/2);
      p.pos(x, y);
      p.fillRectangle(s, s);
    }
  }

  public static void main(String[] args)
  {
    new Quadratmuster();
  }
}