5. Vererbung - Turtle 2te Generation
5.1 Was heißt vererben?
 
  In den letzten Stunden haben wir die Kontrollstrukturen einer Programmiersprache kennen gelernt. Dabei benutzen wir die fertige Klasse Turtle und ihre Methoden. Nebenbei haben wir einen guten Überblick über die Funktionalität dieser Klasse (die Summe dessen was ein Objekt dieser Klasse kann) kennen gelernt. Uns ist schon zur Gewohnheit geworden, dass man, will man mit einer Turtle zeichnen, ein Objekt dieser Klasse benötigt.

Turtle t1;   
Deklaration des Turtle-Objekts vor dem Konstruktor unserer Klasse, die wir gerade schreiben  und schließlich die eigentliche Erzeugung des Objektes


t1 = new Turtle(tWin);

Steht ein solches Objekt zur Verfügung, können wir auch Methoden für dieses Objekt aufrufen.

t1.forward(100.0);
 

  Die Funktionalität einer Turtle ist natürlich beschränkt. So gibt es keine Methode, die ein Turtle-Objekt veranlassen könnte, ein Quadrat mit der Kantenlänge 100 zu zeichnen.

t1.zeichneQuadrat(100);

würde vom Compiler abgelehnt. Wir müssen uns mit

t1.forward(100);
t1.right(90);
t1.forward(100);
t1.right(90);
t1.forward(100);
t1.right(90);
t1.forward(100);
t1.right(90);

oder einer Schleife wie etwa

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

behelfen. Eleganter wäre jedoch die einzeilige Alternative t1.quadrat(100); . Wir müssten also dafür sorgen, dass die Klasse Turtle zusätzlich über die Methode quadrat(double kantenLaenge) verfügt. Nun besitzen wir den Quellkode der Turtle nicht, denn der Programmierer der Klasse Turtle hat uns lediglich das Kompilat zur Verfügung gestellt, weil er gerade nicht will, dass jemand in in dem von ihm erstellten Quellkode 'reinpfuscht'. Wir müssen also eine neue Turtle, wir nennen sie MeineTurtle, programmieren und das können wir tun, ohne dass wir die ursprüngliche Turtle nachprogrammieren. Uns hilft dabei das Konzept der Vererbung. Unsere Klasse MeineTurlte soll alle Eigenschaften der Turtle erben und nur die neuen, zusätzlichen Methoden beinhalten. Wie das geht, wollen wir jetzt lernen. Die UML-Notation von Klassen, wie wir sie in Kapitel '3.2 die Turtle in UML' kennen gelernt haben wird uns dabei beim Verstehen helfen. Abbildung 5.1.1 zeigt noch einmal den allgemeinen Aufbau einer Klasse .

 

 

 

Abb. 5.1.1 UML-Notation einer Klasse 
 

Vererbung Abbildung 5.1.2 veranschaulicht eine Vererbung. Der Pfeil, der von der Klasse B zur Klasse A zeigt, soll uns sagen, dass die Klasse B von der Klasse A erbt.
 

 

 

 

 

 

 

 


Abb. 5.1.2 UML-Notation einer Klasse B, die von der Klasse A erbt.

 

Einem Objekt der Klasse B stehen alle Methoden (Einschränkungen lernen wir später kennen) der Klasse A zur Verfügung. Konkret heißt das: Wir deklarieren und erzeugen ein Objekt der Klasse B.

B b = new B();

dann können wir z.B. die Methode methodeB1(double x, double y) aufrufen mit:

b.methodeB1(10, 12.5);

Wir können für das Objekt b aber auch die geerbte Methode methodeA1(double x, double y) mit

b.methodeA1(15, 10);

aufrufen, obwohl sie, wie die Abbildung 5.1.2 zeigt nicht in B implementiert ist. So wie die Methoden von A den Objekten von B zur Verfügung stehen, als wären sie in der Klasse B implementiert, so sind auch die Attribute von A auch Attribute von B, ohne dass wir sie in B implementieren müssten.
 

zu 5.2 MeineTurtle erbt von Turtle
zur Startseite www.pohlig.de  (C) MPohlig 2004