Benutzer-Werkzeuge

Webseiten-Werkzeuge


g9:uebungen:vererbung:start

Vererbung

Beispiel 1: Advanced Robot

Die Klasse Robot hat alle Methoden, die Du von Robot Karol her kennst. Erweitere sie um weitere Methoden:

  • Die Methode umdrehen() soll bewirken, dass der Roboter sich um 180° dreht.
  • Die Methode gehe(int schrittzahl) soll bewirken, dass der Roboter mehrere Schritte geht.
  • Die Methode legeBahn(int länge) soll bewirken, dass der Roboter eine Bahn von Ziegeln der angegebenen Länge legt.
  • Die Methode legeQuadrat(int seitenlänge) soll bewirken, dass der Roboter ein nicht-ausgefülltes Quadrat der angegebenen Seitenlänge mit der Höhe 1 baut.
  • Die Methode baueTreppe(int höhe) soll bewirken, dass der Roboter eine Treppe der angegebenen Höhe baut.

Lass Dir noch weitere Methoden einfallen und schreibe ein Hauptprogramm, das die Methoden nutzt, um eine große Burg zu bauen!

Beispiel 2: Fliegende Rechtecke

Starte das Programm und regle die Geschwindigkeit langsam hoch!

Damit die Seite nicht zu lange wird, findest Du die ausführliche Erklärung dieses Programms auf einer extra Seite.

UML-Diagramm zu "Fliegende Rechtecke"

Auf dem nebenstehenden Diagramm habe ich die (sehr zahlreichen!) Attribute und Methoden der Klassen Rectangle, FilledShape, Shape und Actor ausgeblendet, damit es übersichtlich bleibt. Die Vererbungshierarchie ist schön zu sehen:

  • FlyingRectangle ist Unterklasse von Rectangle
  • Rectangle ist Unterklasse von FilledShape (wie bspw. auch Circle und Polygon)
  • FilledShape ist Unterklasse von Shape
  • Shape ist Unterklasse von Actor

Aufgabe: Starfield

Programmiere ein Sternenfeld, so wie es rechts im Video zu sehen ist:

  • Jeder Stern ist ein Kreis.
  • Jeder Stern besitzt eine Geschwindigkeit, mit der er von der Mitte der Welt nach außen fliegt.
  • Ist ein Stern außerhab des sichtbaren Bereichs (testbar mit der Methode isOutsideView() der Klasse Circle), dann wird er vernichtet (Methode destroy() der Klasse Circle)
  • Sterne werden größer, je länger sie schon fliegen. Dadurch entsteht der Effekt, dass sie "näher" kommen.


Lösung zur Aufgabe "Starfield"

Beispiel 3: Klasse "Raute"

Die Programmiersprache stellt bisher nur Objekte zum Zeichnen von Rechtecken, Kreisen, Polygonen und Sprites zur Verfügung. Ich zeige Dir, wie man durch Erweiterung der Klasse Polygon leicht weitere Objektklassen erstellen kann. Im Folgenden entwickeln wir eine Klasse "Raute".

Skizze:

Beispiel 4: Klasse "Stern"

Die Programmiersprache stellt bisher nur Objekte zum Zeichnen von Rechtecken, Kreisen, Polygonen und Sprites zur Verfügung. Ich zeige Dir, wie man durch Erweiterung der Klasse Polygon leicht weitere Objektklassen erstellen kann. Im Folgenden entwickeln wir eine Klasse "Stern".

Mathematische Grundlagen

Wir wollen einen Stern mit $n$ Außenzacken zeichnen. Dazu brauchen wir die Koordinaten $(mitte_{x}, mitte_{y})$ seines Mittelpunkts, den Außenradius $r_{außen}$ (d.h. den Abstand der äußeren Zacken vom Mittelpunkt) und den Innenradius $r_{innen}$ (d.h. den Abstand der inneren Zacken des Sterns vom Mittelpunkt).
Im Beispiel oben hat der Stern 5 Außenzacken (d.h. $n = 5$). Denke Dir eine Halbgerade, die im Mittelpunkt des Sterns beginnt und nach rechts zeigt. Sie geht durch den ersten Außenzacken des Sterns. Drehen wir sie um den Mittelpunkt des Sterns nach links, so überstreicht sie nach $360°/10 = 36°$ den ersten Innenzacken, nach $2 \cdot 36° = 72°$ den zweiten Außenzacken usw. .
Der i-te Zacken erscheint also beim Winkel $i*36°$. Zur Berechnung seiner Koordinaten sieh' Dir oben das rechtwinklige Dreieck mit der roten und grünen Kathete an. Um die Koordinaten des zweiten Zackens zu berechnen muss die grüne Kathete zur x-Koordinate des Mittelpunkts addiert werden, die rote Kathete zur y-Koordinate: $$ x = mitte_{x} + cos(i*36°)*radius $$ $$ y = mitte_{y} + sin(i*36°)*radius $$ Im Fall einer Außenzacke (gerades i, also i % 2 == 0) setzen wir für $radius$ den Außenradius, im Fall einer Innenzacke den Innenradius. Die Zacken fügen wir dem Polygon mit der Methode addPoint hinzu.

UML-Diagramm zu "Stern"

Auf dem nebenstehenden Diagramm habe ich die (sehr zahlreichen!) Attribute und Methoden der Klassen Polygon, FilledShape, Shape und Actor ausgeblendet, damit es übersichtlich bleibt. Die Vererbungshierarchie ist schön zu sehen:

  • Stern ist Unterklasse von Polygon
  • Rectangle ist Unterklasse von FilledShape (wie bspw. auch Circle und Polygon)
  • FilledShape ist Unterklasse von Shape
  • Shape ist Unterklasse von Actor

Viele Sterne

Jetzt wollen wir unsere neue Klasse natürlich "richtig" anwenden und viele Sterne zeichnen:

Beispiel 5: Feuerwerk

Das Beispiel "Feuerwerk" findest Du hier.

Beispiel 6: Kochkurve

Beispiel 7: Fraktaler Baum

g9/uebungen/vererbung/start.txt · Zuletzt geändert: 2022/07/01 07:46 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki