Inf9 4.3 Die Vererbung

Zu den Aufgaben

In manchen Spielen oder Programmen braucht man Klassen, die viele Attribute gemeinsam haben. Damit man diese Attribute nicht ständig neu definieren muss, kann man das Prinzip der Vererbung verwenden.

Bei der Vererbung übernehmen die Unterklassen alle Attribute und Methoden der Oberklasse.

In der Unterklasse kann man Methoden, deren Aufgabe sich verändert hat überschreiben, indem man die Methode mit der gleichen Syntax nochmal definiert.

Merksatz 4.3.1

Wir schauen uns als Beispiel ein Textspiel an, bei dem man die erscheinenden Texte so schnell wie möglich tippen muss.

Grundsätzlich braucht jeder GEGNER eine Position auf dem Spielfeld und einen Buchstaben, mit dem er besiegt wird. Dementsprechend müssen wir die passenden Attribute und Getter und Setter Methoden vorbereiten. Die treffer(char) Methode sollte true ausgeben, wenn wir den richtigen Buchstaben getippt haben.

Jetzt wollen wir zwei Arten von Gegnern einführen: normale Buchstaben und Zahlen. Dabei sollen Zahlen nicht als 5 dargestellt werden sondern das Wort Fünf geschrieben stehen.

Zuerst wollen wir die Klasse BUCHSTABE einführen. Damit sie alle Methoden der Oberklasse GEGNER erbt, müssen wir die Vererbung nutzen. Im Klassendiagramm zeigt man das mit einem Pfeil, der von der Unterklasse zur Oberklasse zeigt.

Die Vererbung wird im Klassendiagramm durch einen Pfeil von der Unterklasse zur Oberklasse angezeigt.

Merksatz 4.3.2

Im Code muss man die Klasse ergänzen durch das Codewort extends. Der Konstruktor muss als ersten Befehl super() stehen haben:

class BUCHSTABE extends GEGNER
{

   BUCHSTABE()
   {
      super();
      //weitere Befehle
   }
}

Im Code zeigt das Schlüsselwort extends die Vererbung an. Im Konstruktor muss der Konstruktor der Oberklasse mit dem Befehl super() aufgerufen werden.

Merksatz 4.3.3

Um die Zeichnen Methode zu überschreiben definieren wir siein der Klasse BUCHSTABE nochmal genauso wie in der Klasse GEGNER. Da die Methode in GEGNER noch nicht getan hat wird das hier leicht.

Die zweite Klasse ZAHL erbt auch von GEGNER, muss dabei aber die Methode setTarget überschreiben und braucht ein Attribut, das speichert, welchen Text man sehen soll, da dies nicht mehr vom target abgedeckt ist.

Die zeichnen Methoden der Zahl sollte nun die Beschriftung anzeigen, während es beim BUCHSTABEN noch gereicht hat, nur den Buchstaben des Target anzuzeigen. Dabei brauchen wir beim abfragen der x und y Koordinaten die Getter Methoden der Oberklasse, da wir keinen direkten Zugriff auf die Attribute x und y haben.


Aufgabe 1:

Bei den Aufgaben verwenden wir die Entwicklungsumgebung Processing. Wenn du einen Befehl suchst, schaue auf https://processing.org/reference nach!

  • Erstelle ein neues Processing Projekt.
  • Schreibe eine Klasse GEGNER, mit den Attributen, die in der Klassenkarte angegeben sind.
  • Weise den Attributen sinnvolle Startwerte im Konstruktor zu.
  • Ergänze die Klasse um alle Getter und Setter Methoden und eine leere Zeichnen Methode.
  • Die treffer(char) Methode sollte überprüfen, ob der Parameter mit dem target übereinstimmt und passend wahr oder falsch ausgeben.

Aufgabe 2:

  • Erstelle die Klasse BUCHSTABE, die von GEGNER erbt. Überschreibe die Zeichnen Methode, so dass ein BUCHSTABE als Rechteck mit dem target als Text angezeigt wird.
  • Schreibe passen draw und setup Methode und lasse dir den einen Buchstaben 'b' anzeigen.
  • Erweitere so, dass beim drücken der Tasten auf der Tastatur überprüft wird, ob der Buchstabe getroffen wurde.
  • Mit dem Befehl char z = (char) int(random(33, 127)); kannst du einen zufälligen Character heraussuchen.

Aufgabe 3:

  • Erweitere um die Klasse ZAHL, die je nachdem welche ZAHL als target gewählt wird „Eins“ bis „Neun“ anzeigt.
  • Erweitere die draw() Methode, dass je ein BUCHSTABE und eine ZAHL angezeigt werden.
  • Sorge dafür, dass man beim Erledigen der Gegner Punkte bekommt, die gezählt und angezeigt werden.

Aufgabe 4:

  • Baue ein, dass man mehr Punkte bekommt, wenn man ohne Fehler tippt (Multiplier – Streak)
  • Lasse mehr Punkte geben, je nachdem wie schnell man ist (z.B. direkt nach Erscheinen bekommt man 10 Punkte und alle 100ms wird einer abgezogen).
  • Überlege, wie man nun auch ganze Wörter als Gegner einstellen könnte.

Zurück zur Übersicht