10.2 Eine bessere zeichneQuadrat-Methode - Polymorphie
 
  Schnell ist man mit der selbstgeschriebenen Methode zeichneQuadrat() unzufrieden. Mit ihr kann man nur eine Sorte Quadrat zeichnen, nämlich Quadrate, die eine Seitenlänge von 100 Pixel haben. Das ist so, als hätten wir nur eine Methode forward(), die eine Turtle immer nur um 100 Pixel weiter sich bewegen lässt. Tatsächlich heißt die Methode auch:

forward(double schrittlaenge)

Statt zeichneQuadrat() hätten wir lieber

zeichneQuadrat(double seite)
 

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  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. Beide Methoden 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 diese 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 zeichne()-Methode von Quadrate2.java 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  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)


   
zu 10.3 Übungen
zur Startseite www.pohlig.de  (C) MPohlig 2003