01 | Wiederholung der OOM mit Quarto
„Quarto!“ (im Folgenden: Quarto) ist ein prämiertes Brettspiel. Wir wollen es digital spielbar machen.
🟪 Spielen
👤 Setze dich nacheinander mit zwei Personen zusammen, die du noch nicht gut oder noch gar nicht kennst, und spiele eine Runde Quarto.
🟦 Modellieren
📝 „Ein Computermodell ist die Abbildung eines Teils der Wirklichkeit (ein Modell) in digitaler, von einem Computer verarbeitbarer Form. Das Modell ist regelmäßig in seiner Komplexität gegenüber der Wirklichkeit stark eingeschränkt und bildet daher nur Teilaspekte der Wirklichkeit ab.“ Quelle: Wikipedia, Achtung! Es gibt Strukturmodelle (z. B. Objektdiagramm und die Klassendiagramme Entwurfs- und Implementationsdiagramm), Prozessmodelle (z. B. Sequenzdiagramm) und Algorithmusmodelle (z. B. Struktogramm). Bei der Darstellung dieser Diagramme orientieren wir uns an UML, halten uns aber an die NRW-Abiturvorgaben.
-
👤 Betrachte die zentralen vier Eigenschaften anhand derer sich die Quarto-Figuren voneinander unterscheiden und erstelle mit PlantUML für eine Figur ein Objektdiagramm. Lade das fertige Objektdiagramm im Kollaborationsbereich hoch.
💁 Hilfen: Im Wikipedia-Artikel von Quarto findest du Hilfe.
Vorlage für ein Objektdiagramm:
Objektdiagramm in PlantUML @startuml skinparam roundcorner 20 skinparam shadowing true object " <u>objektbezeichner : Objekttyp </u>" { attributsbezeichner1 = attributswert attributsbezeichner2 = attributwert attributsbezeichner3 = attributwert attributsbezeichner4 = attributwert } @enduml -
👤 Ergänze den folgenden Text zu Objekten.
-
👥 Überführe die verschiedenen Objektdiagramme in ein Entwurfsdiagramm.
☝️ Hinweise: Im Entwurfsdiagramm werden noch keine Get- und Set-Methoden aufgeführt. Es werden auch keine konkreten Datentypen angegeben, sondern programmiersprachenunabhängig „Zahl“, „Text“ und „Wahrheitswert“.
Vorlage für ein Entwurfsdiagramm:
Objektdiagramm in PlantUML @startuml skinparam dpi 200 skinparam classAttributeIconSize 0 skinparam roundcorner 0 class Klassenbezeichner { attributsbezeichner1: Attributstyp attributsbezeichner2: Attributstyp --- methodenbezeichner1(): Rückgabetyp methodenbezeichner2(): Rückgabetyp } @enduml -
👥 Erstelle nun ein geeignetes Implementationsdiagramm. Ändere dazu die obige Vorlage zum Entwurfsdiagramm geeignet ab.
🟩 Implementieren
💁 Hilfen: Java-Notbuch von Michael Kipp
-
👤 Implementiere die Klasse
Figurein Java mit allen Get- und Set-Methoden und instanziiere in der Main-Methode ein Objekt dieser Figur. Lediglich das Attributidkeinen Setter erhalten. Der Methodenkopf des Konstruktors soll wie folgt aussehen. Achtet auf die Reihenfolge der Parameter!public Figure(int id, boolean circular, boolean filled, boolean white, boolean small)oder:
public Figure(int pId, boolean pCircular, boolean pFilled, boolean pWhite, boolean pSmall)Die Get-Methoden sollen folgende Bezeichner haben:
isFilled,isCircular,isWhite,isSmall. Die Instanzvariableidsoll mit dem Schlüsselwortfinaldeklariert werden, alsoprivate final int id, d. h. hier kann der Wert nach der Initialisierung nicht mehr geändert werden. -
👤 Deklariere und instanziiere in der Main-Klasse und darin in der Methode
mainverschiedene Objekte vom Typ Figur. Starte das Programm durch Klick auf die Play-Taste oder mitShift+F10. -
👤 Teste deine Klasse mit Hilfe des vorliegenden Unit-Tests. Fahre dazu mit der Maus auf den Klassenbezeichner im Klassenkopf von
Figure, drücke dann nacheinanderAlt+Enter,Create testundOK. Führe anschließend den Test aus und ergänze den fehlenden Test zur MethodeisSmall. -
👤 Öffne das folgende Programm und ergänze die TODOs. Die offenen TODOs kannst du dir in der Seitenleiste anzeigen lassen.
🟨 Die Struktur eines Programms
👤 Ergänze die Lückentexte.
Assoziation
📝 Man spricht von einer Assoziation zwischen zwei Klassen, wenn ein Objekt einer Klasse A ein oder mehrere Objekte einer anderen Klasse B dauerhaft verwaltet. Die Klasse A nennt man auch assoziierende Klasse, die Klasse B assoziierte Klasse. Typischerweise wird eine Assoziation über ein Attribut oder eine geeignete Datenstruktur (z. B. ein Array) realisiert.
Fachsprachlich korrekte Beschreibung eines Implementationsdiagrammes
👤 🎓 Erläutere die im obigen Implementationsdiagramm gegebene Teilmodellierung des Quarto-Spiels.
🟧 Übungsaufgaben
👤 1. Vorbereitung: Füge den folgenden Codeabschnitt in der Klasse GameController am Ende der Methode keyPressed ein:
if(key == 's') {
quartoGame.printStatus();
}
👤 2. Ergänze die Methode printStatusin der Klasse QuartoGame. Diese soll die folgenden Methoden aufrufen und deren Ergebnisse jeweils auf der Konsole ausgeben.
👤 2a. Implementiere in der Klasse QuartoGame eine Methode, die jeweils zählt, wie viele Spielfelder frei und besetzt sind.
👤 2b. Implementiere in der Klasse QuartoGame eine Methode, die jeweils angibt, wie viele Spielzüge Spieler 1 und Spieler 2 schon gezogen haben.
👤 2c. Implementiere in der Klasse QuartoGame eine Methode, die unter den noch nicht gezogenen Figuren jeweils zählt, wie viele der acht Eigenschaften noch frei verfügbar sind. Zum Beispiel: klein: 3, groß: 4, rund: 1, ....
🟥 Intermezzi
- Informatik-Rot-Gegen-Blau mit „Objektorientierung – Wer weiß noch was?“
- Wer schon fertig ist: Der Bundeswettbewerb Informatik startet zum Ende des Sommers