01 | Wiederholung der OOM mit Quarto
„Quarto!“ (im Folgenden: Quarto) ist ein prämiertes Brettspiel.
🟪 Spielen
👤 Setze dich nacheinander mit zwei Personen zusammen, die du noch nicht gut kennst, und spiele eine klassische Brettspielrunde 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:
@startuml
hide circle
skinparam roundcorner 20
skinparam shadowing true
skinparam classFontStyle bold
object " <u>objektbezeichner : Objekttyp </u>" {
attributsbezeichner1 = attributwert
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:
@startuml
hide circle
skinparam dpi 200
skinparam classAttributeIconSize 0
skinparam roundcorner 0
skinparam classFontStyle bold
class Klassenbezeichner {
attributsbezeichner1: Attributstyp
attributsbezeichner2: Attributstyp
---
methodenbezeichner1(): Rückgabetyp
methodenbezeichner2(parameterbezeichner1: Parametertyp1, ...): 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. der Wert kann 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 die folgenden drei Möglichkeiten, ein Objekt der Klasse Figur zu implementieren. (Nur zwei der drei Möglichkeiten funktionieren!)
public class Main {
static void main() {
Figure figure01 = new Figure(0, false, false, false, false);
}
}
public class Main {
private Figure figure01;
static void main() {
figure01 = new Figure(0, false, false, false, false);
}
}
public class Main {
private Figure figure01;
static void main() {
new Main();
}
public Main() {
figure01 = new Figure(0, false, false, false, false);
}
}
👤 4. 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.
📝 „Ein Modultest (auch von englisch unit test als Unittest oder als Komponententest bezeichnet) ist ein Softwaretest, mit dem einzelne, abgrenzbare Teile von Computerprogrammen (z. B. ausgewählte Codeabschnitte, Module, Unterprogramme, Units oder Klassen) überprüft werden. Testziel dieser häufig durch den Softwareentwickler selbst durchgeführten Softwaretests ist, deren technische Lauffähigkeit und die Korrektheit ihrer fachlichen (Teil-)Ergebnisse nachzuweisen.“ Wikipedia
👤 5. Öffne das folgende Programm und ergänze die TODOs. Die offenen TODOs kannst du dir in der Seitenleiste anzeigen lassen.
🟨 Die Struktur eines Programms
👤 1. 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. Mit Hilfe eine rsolche Assoziation kann ein Objekt Methoden eines anderen Objektes aufrufen. Man kann sich das so vorstellen, als wenn das Objekt der der assoziierenden Klassen dem Objekt der assoziierten Klasse eine Nachricht schickt (Nachrichtenprinzip).
Fachsprachlich korrekte Beschreibung eines Implementationsdiagrammes
👤 🎓 2. Erläutere die im obigen Implementationsdiagramm gegebene Teilmodellierung des Quarto-Spiels.
🟧 Übungsaufgaben zu Arrays (1D und 2D)
👤 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, ....
Präsentation eines Programmes oder eines Programmauschnittes
- Show, don’t tell: Erst das Programm zeigen, dann behutsam den Code präsentieren.
- Präsentationsmodus von IntelliJ über
Strg + Shift + A, dann EingabeEnter Presentation Mode(Verlassen analog). MitStrg + Tabkann dann zwischen den Klassen gewechselt werden.
🟥 Intermezzi
- 🔴👥👥🔵 Informatik-Rot-Gegen-Blau mit „Objektorientierung – Wer weiß noch was?“
- Wer schon fertig ist: Der Bundeswettbewerb Informatik startet zum Ende des Sommers