fiebig.schule

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.

  1. 👤 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
  2. 👤 Ergänze den folgenden Text zu Objekten.

  3. 👥 Ü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
  4. 👥 Erstelle nun ein geeignetes Implementationsdiagramm. Ändere dazu die obige Vorlage zum Entwurfsdiagramm geeignet ab.

🟩 Implementieren

💁 Hilfen: Java-Notbuch von Michael Kipp

  1. 👤 Implementiere die Klasse Figure in Java mit allen Get- und Set-Methoden und instanziiere in der Main-Methode ein Objekt dieser Figur. Lediglich das Attribut id keinen 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 Instanzvariable idsoll mit dem Schlüsselwort final deklariert werden, also private final int id, d. h. hier kann der Wert nach der Initialisierung nicht mehr geändert werden.

  2. 👤 Deklariere und instanziiere in der Main-Klasse und darin in der Methode main verschiedene Objekte vom Typ Figur. Starte das Programm durch Klick auf die Play-Taste oder mit Shift+F10.

  3. 👤 Teste deine Klasse mit Hilfe des vorliegenden Unit-Tests. Fahre dazu mit der Maus auf den Klassenbezeichner im Klassenkopf von Figure, drücke dann nacheinander Alt+Enter, Create test und OK. Führe anschließend den Test aus und ergänze den fehlenden Test zur Methode isSmall.

    🩺 Unit-Test (JUnit Jupiter)

  4. 👤 Ö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

Teilbare URL erstellen

Abschnitte auswählen