5.3 Eigene Methoden in der Klasse MeineTurtle
 
  In Kap. 5.1 haben wir daran erinnert, dass wir bisher ein Quadrat mit

for (int i=0;i<4;i++){
   t1.forward(100);
   t1.right(90);
}

zeichnen lassen können. Wir implementieren jetzt eine Methode quadrat() in unserer neuen Klasse MeineTurtle, die genau diesen Kode ausführt. Der Quelltext sieht dann so aus:


 

Download:
MeineTurtle.java
(Vers.1)
import turtle.*;
public class MeineTurtle extends Turtle{
   public MeineTurtle(TurtleWindow tWin){
      super(tWin);
   }
   public void zeichneQuadrat(){
      for(int i=0; i<4;i++){
         forward(100);
         right(90);
      }
   }
}
 
  Der Quelltext MeineTurtle.java lässt sich compilieren, starten lässt sich das Programm dagegen nicht, das sollte uns aber nicht verwundern. Denn unsere Klasse beschreibt ja nur, was die neue Turtle jetzt zusätzlich kann, aber was sie konkret tut, wenn wir wir den 'Zeichne!'-Schalter drücken, ist ja noch nicht programmiert. Das schauen wir uns jetzt noch an.
 
Quadrate1.java
import turtle.*;

import java.awt.*;



public class Quadrate1 extends TurtleFrame {

  MeineTurtle t1, t2;

  public Quadrate1(String title) {

    super(title);

    t1 = new MeineTurtle(tWin);

    t1.setColor(Color.RED);

    t2 = new MeineTurtle(tWin);

    t2.setColor(Color.BLUE);

  }



  public void zeichne() {

    t1.jumpTo(-150,50);

    t1.zeichneQuadrat();

    t2.jumpTo(50,-150);

    t2.zeichneQuadrat();

  }



  public static void main (String[] args) {

    new Quadrate1("Quadrate - Vers. 1");

  }

}
Modifizierer
public

kein Rückgabe: void

Das Programm erzeugt beim Klicken auf den 'Zeichne!'-Schalter ein rotes Quadrat im linken oberen Bereich und ein blaues im rechten unteren.  Zur Erstellung des Quelltextes benutzen wir wieder unsere Vorlage, müssen aber einige kleine Korrekturen vornehmen. So sind  t1 und t2 jetzt keine Objekte mehr von Turtle sondern von MeinTurtle (wichtig: die Klasse MeineTurtle liegt im gleichen Verzeichnis wie Quadrate1.java). Die Änderungen sind im oben dargestellten Quelltext gelb unterlegt. In der Methode zeichne() können wir nun die Methode zeichneQuadrat() aufrufen (grün unterlegt).

Eine Bemerkung zum Aufbau der Methode. Zuerst kommt das Wort public; damit legen wir fest, dass die Methode von anderen Programmen uneingeschränkt benutzt werden darf. Eine Methode kann dem Aufrufer einen Wert zurückgeben, das muss aber nicht sein. Wird keine Wert zurückgegeben, steht vor dem Methodennamen das reservierte Wörtchen void (= leer). Letzte Bemerkung: Jede Methode besitzt eine Parameterliste; sie ist in runden Klammern untergebracht. Ist die Parameterliste leer, so muss man dennoch das runde Klammenpaar setzten. Das hat den Vorteil, dass man auf den ersten Blick Methoden von Attributen unterscheiden kann. Die letzteren besitzen nie runde Klammern. Schließlich müssen Quadrate1 und MeineTurtle  im gleichen Verzeichnis liegen (für Kenner: MeineTurtle.class kann auch in einem anderen Verzeichnis liegen, dann muss für Java dieses Verzeichnis in einem classpath gesetzt sein)

Wenn wir wollen, dass die beiden Turtle-Objekte unterschiedlich große Quadrate zeichnen sollen, können wir unsere Methode zeichneQuadrat() nicht benutzen, mit ihr zeichnet die turtle nur Quadrate mit der Seitenlänge 100. Wir müssen also eine Methode implementieren, die flexibler ist: Die Lösung ist eine Methode mit einem Parameter, d.h. die Parameterliste ist nicht mehr leer.

Die neue Methode:

zeichneQuadrat(double seite)
 

  mit dem Parameter seite vom Typ double teilen wir der Methode die Seitenlänge des zu zeichnenden Quadrates mit.
 
eine neue Methode zeichneQuadrat(...)
public void zeichneQuadrat(double seite){

  for(int i=0; i<4;i++){

    forward(seite);

    right(90);

  }

}
Download:
MeineTurtle.java
Die gelb unterlegten Stellen markieren die Veränderungen gegenüber der 'alten' Methode. Wir erkennen, dass die Seitenlänge des gezeichneten Quadrats erst  beim Aufruf der Methode festliegt. Dazu wird die Variable seite in der Parameterliste deklariert und durch den Aufruf initialisiert. Wir fügen unserer Klasse MeineTurtle die neue Methode zeichneQuadrat(double seite) hinzu.

Interessant ist, dass beide Methoden zeichneQuadrat() und zeichneQuadrat(double seite) nebeneinander existieren können. Sie haben zwar den gleichen Namen, unterscheiden sich aber in der Parameterliste; wir sagen auch: sie unterscheiden sich in ihrer Signatur. Diese unterschiedliche Signatur erlaubt es auch dem Compiler gleichnamige Methoden zu unterscheiden. Dass Methoden gleichen Namens unterschiedliches tun, nennt man in der Fachsprache auch Polymorphie (Vielgestaltigkeit). Im Laufe des Kurses werden wir weitere Formen der Polymorphie kennen lernen
 

Download:

Quadrate2.java

Wie man die neue Methode benutzt, zeigt die das nachstehende Beispiel.
public void zeichne() {

  t1.jumpTo(-150,50);

  t1.zeichneQuadrat(80);

  t2.jumpTo(50,-150);

  t2.zeichneQuadrat(110);

}

t1 und t2 müssen natürlich wieder MeineTurtle-Objekte sein. Auch müssen Quadrate2 und MeineTurtle wieder im gleichen Verzeichnis liegen.


   
zu 5.4 Übungen
zur Startseite www.pohlig.de  (C) MPohlig 2004