wiederholung:vererbung
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
wiederholung:vererbung [2022/12/09 07:36] – Martin Pabst | wiederholung:vererbung [2022/12/10 19:01] (aktuell) – [Beispiel 4: Feuerwerk] Martin Pabst | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
====== Beispiel 1: Erweiterung der Buntstift-Klasse ====== | ====== Beispiel 1: Erweiterung der Buntstift-Klasse ====== | ||
- | Erinnert Ihr Euch an die Buntstift-Klasse aus dem [[klassen2:constructors: | + | Erinnert Ihr Euch an die Buntstift-Klasse aus dem [[wiederholung:konstruktoren|Kapitel über Konstruktoren]]? |
{{ youtube> | {{ youtube> | ||
Zeile 127: | Zeile 127: | ||
==== Überschreiben von Methoden ==== | ==== Überschreiben von Methoden ==== | ||
- | {{ :klassen2: | + | {{ :wiederholung:pasted:20221210-195623.png}} |
Die Methode '' | Die Methode '' | ||
Zeile 196: | Zeile 196: | ||
=== UML-Diagramm zu " | === UML-Diagramm zu " | ||
- | {{ :klassen2: | + | {{ :wiederholung:pasted:20221210-195717.png}} |
Auf dem nebenstehenden Diagramm habe ich die (sehr zahlreichen!) Attribute und Methoden der Klassen '' | Auf dem nebenstehenden Diagramm habe ich die (sehr zahlreichen!) Attribute und Methoden der Klassen '' | ||
* '' | * '' | ||
Zeile 202: | Zeile 202: | ||
* '' | * '' | ||
* '' | * '' | ||
- | |||
- | ===== Aufgabe: Starfield ===== | ||
- | {{ youtube> | ||
- | Programmiere ein Sternenfeld, | ||
- | * Jeder Stern ist ein Kreis. | ||
- | * Jeder Stern besitzt eine Geschwindigkeit, | ||
- | * Ist ein Stern außerhab des sichtbaren Bereichs (testbar mit der Methode '' | ||
- | * Sterne werden größer, je länger sie schon fliegen. Dadurch entsteht der Effekt, dass sie " | ||
- | < | ||
- | | ||
< | < | ||
- | < | + | <div style=" |
- | + | ||
- | <script type=" | + | |
- | // Hier programmieren! | + | |
- | </ | + | |
- | + | ||
- | <script type=" | + | |
- | ## Tipp 1: | + | |
- | Ein Stern ist ein Kreis. Die Klasse ``Stern`` sollte also Unterklasse der Klasse ``Kreis`` sein. Zudem hat jeder Stern - wie die fliegenden Rechtecke im Bild oben - eine Geschwindigkeit. | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | <script type=" | + | |
- | ## Tipp 2: | + | |
- | Hier ein " | + | |
- | ``` | + | |
- | new World(800, 800); | + | |
- | new Star(400, 400); | + | |
- | + | ||
- | + | ||
- | class Star extends Circle { | + | |
- | | + | |
- | | + | |
- | + | ||
- | | + | |
- | super(x, y, 1); | + | |
- | } | + | |
- | + | ||
- | | + | |
- | // Alle Anweisungen hier werden 30-mal pro Sekunde ausgeführt | + | |
- | } | + | |
- | + | ||
- | } | + | |
- | ``` | + | |
- | </ | + | |
- | <script type=" | + | |
- | ## Tipp 3: | + | |
- | Die Geschwindigkeit der Sterne in x- und y-Richtung ist zufällig. Eine Zufallszahl zwischen bspw. 2 und 10 erzeugt man folgendermaßen: | + | |
- | ``` | + | |
- | vx = Math.randdouble(2, | + | |
- | vy = Math.randdouble(2, | + | |
- | ``` | + | |
- | + | ||
- | </ | + | |
- | <script type=" | + | |
- | ## Tipp 4: | + | |
- | Die Methode ``act()`` ist sehr ähnlich zur gleicnamigen Methode im Beispiel " | + | |
- | </ | + | |
- | <script type=" | + | |
- | ## Tipp 5: | + | |
- | Die Formel zur zufälligen Bestimmung der Geschwindigkeit in Tipp 3 hat einen Nachteil: Die Geschwindigkeiten haben nicht nur verschiedene Richtungen (gut!) sondern auch sehr unterschiedliche Beträge (schlecht!), | + | |
- | ``` | + | |
- | double v = Random.randdouble(2, | + | |
- | double w = Random.randdouble(0, | + | |
- | vx = v * Math.cos(w); | + | |
- | vy = v * Math.sin(w); | + | |
- | ``` | + | |
- | + | ||
- | </script> | + | |
- | + | ||
- | </ | + | |
</ | </ | ||
- | [[.starfieldloesung: | ||
====== Beispiel 3: Klasse " | ====== Beispiel 3: Klasse " | ||
Zeile 284: | Zeile 212: | ||
==== Skizze: ==== | ==== Skizze: ==== | ||
- | {{ :klassen2: | + | {{ :wiederholung:pasted:20221210-195858.png?500 }} |
< | < | ||
Zeile 321: | Zeile 249: | ||
==== Mathematische Grundlagen ==== | ==== Mathematische Grundlagen ==== | ||
- | {{ :klassen2:inheritance:stern-erklaerung.png?600}} | + | {{ :wiederholung:pasted:20221210-195939.png?600}} |
Wir wollen einen Stern mit $n$ Außenzacken zeichnen. Dazu brauchen wir die Koordinaten $(mitte_{x}, | Wir wollen einen Stern mit $n$ Außenzacken zeichnen. Dazu brauchen wir die Koordinaten $(mitte_{x}, | ||
Zeile 372: | Zeile 300: | ||
=== UML-Diagramm zu " | === UML-Diagramm zu " | ||
- | {{ :klassen2: | + | {{ :wiederholung:pasted:20221210-200031.png}} |
Auf dem nebenstehenden Diagramm habe ich die (sehr zahlreichen!) Attribute und Methoden der Klassen '' | Auf dem nebenstehenden Diagramm habe ich die (sehr zahlreichen!) Attribute und Methoden der Klassen '' | ||
* '' | * '' | ||
Zeile 432: | Zeile 360: | ||
</ | </ | ||
- | ===== Feuerwerk ===== | + | ====== Beispiel 5: Feuerwerk |
- | Das Beispiel "Feuerwerk" | + | Dieses |
+ | {{ youtube> | ||
+ | < | ||
+ | <div class="java-online" | ||
+ | <script type=" | ||
+ | new Feuerwerk(); | ||
+ | class Feuerwerk extends Actor { | ||
+ | |||
+ | | ||
+ | if(Math.random() < 0.03) { | ||
+ | |||
+ | int funkenzahl = Math.floor(Math.random() * 50 + 30); | ||
+ | int farbe = Color.randomColor(128); | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | new Funke(x, y, farbe, lebensdauer); | ||
+ | } | ||
+ | | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | class Funke extends Circle { | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(x, y, 4); | ||
+ | double winkel = Math.random() * 2 * Math.PI; | ||
+ | double v = Math.random() * 15 + 5; | ||
+ | vx = v * Math.cos(winkel); | ||
+ | vy = v * Math.sin(winkel); | ||
+ | setFillColor(farbe); | ||
+ | this.lebensdauer = lebensdauer; | ||
+ | } | ||
+ | |||
+ | | ||
+ | lebensdauer--; | ||
+ | move(vx, vy); | ||
+ | vy = vy + 0.2; | ||
+ | if(lebensdauer < 30) { | ||
+ | | ||
+ | } | ||
+ | if(isOutsideView() || lebensdauer < 0) { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | </ |
wiederholung/vererbung.1670571370.txt.gz · Zuletzt geändert: 2022/12/09 07:36 von Martin Pabst