Übungen
Aufgabe 1 - Referenzen und Objektdiagramm
Gegeben ist die Klasse Figur:
class Figur(val farbe: String, var x: Int, var y: Int) {
fun gehe(richtung: Int) {
when (richtung) {
0 -> y = y - 1
1 -> x = x + 1
2 -> y = y + 1
3 -> x = x - 1
}
}
}
(a) Sage voraus, was das folgende Programm ausgibt. Beachte besonders die
Zeile var f3 = f1. Führe das Programm anschließend aus.
class Figur(val farbe: String, var x: Int, var y: Int) {
fun gehe(richtung: Int) {
when (richtung) {
0 -> y = y - 1
1 -> x = x + 1
2 -> y = y + 1
3 -> x = x - 1
}
}
}
fun main() {
val f1 = Figur("blau", 0, 0)
val f2 = Figur("rot", 4, 4)
var f3 = f1
f1.gehe(1)
f2.gehe(0)
f3.gehe(1)
println(f1.x) // ?
println(f2.y) // ?
println(f3.x) // ?
println(f1 === f3) // ?
println(f1 === f2) // ?
}
(b) Zeichne das Objektdiagramm für die Situation am Ende des Programms. Wie viele Figur-Objekte gibt es? Welche Variablen verweisen auf dasselbe Objekt?
(c) Erkläre, warum die folgende Ergänzung vom Compiler abgelehnt wird:
var f4: Figur? = null
f4.gehe(0)
Aufgabe 2 - kennt oder hat?
Entscheide bei jeder Beziehung, ob es sich eher um eine kennt-Beziehung (Assoziation) oder eine hat-Beziehung (Komposition) handelt. Begründe kurz.
- Ein
Spielerzeugt beim Start seine beiden Figuren. - Ein
Spielmerkt sich, welche bereits vorhandene Figur gerade am Zug ist. - Ein
Autound seine vierRad-Objekte. - Eine
Schuelerinund ihreSchule.
Aufgabe 3 - Klassendiagramm
Eine Fernbedienung steuert eine bereits vorhandene
Lampe (an-/ausschalten). Zeichne ein Klassendiagramm mit der
passenden Beziehung zwischen Fernbedienung und Lampe
und begründe, ob es sich um eine kennt- oder hat-Beziehung handelt.
Aufgabe 4 - Fernbedienung und Lampe
Setze das Szenario aus Aufgabe 3 in Kotlin um. Die Lampe hat ein
Attribut an: Boolean und eine Methode umschalten().
Die Fernbedienung bekommt die Lampe, die sie steuern soll, und
besitzt eine Methode druecken(), die die Lampe umschaltet.
Schreibe ein Hauptprogramm, das eine Lampe und eine Fernbedienung erzeugt und
die Lampe über die Fernbedienung mehrfach umschaltet.
Die Fernbedienung speichert die Lampe in einem Referenzattribut, das sie
im Konstruktor übergeben bekommt: class Fernbedienung(val lampe:
Lampe). So entsteht eine kennt-Beziehung – die Lampe existiert
unabhängig von der Fernbedienung.
Aufgabe 5 - Go Home erweitern
Erweitere das Go-Home-Spiel nach einer oder mehreren dieser Ideen:
- Es gibt für jede Figur ein eigenes Home-Feld, statt eines gemeinsamen Zentrums.
- Das Spiel ist nach 10 Zügen pro Spieler zu Ende; dann gewinnt die Figur, die dem Home-Feld am nächsten ist.
- Das Spielfeld ist größer als 5×5.
- Eigene Idee – sei kreativ!