s n h m r u
i

Mehrere Figuren und Referenzen

Zwei Figuren erzeugen

Für ein Spiel brauchen wir zwei Figuren. Wir erzeugen sie und merken sie uns in zwei Variablen f1 und f2:

val f1 = Figur("blau", 0, 0)
val f2 = Figur("rot", 4, 4)

Solche Situationen kann man mit einem Objektdiagramm darstellen. Jedes Objekt wird als Kasten gezeichnet: oben steht unterstrichen die Klasse (:Figur), darunter die aktuellen Werte der Attribute. Ein Pfeil von einer Variablen zum Kasten bedeutet: „Diese Variable verweist auf dieses Objekt."

Objektdiagramm: f1 und f2 verweisen auf zwei Figuren

Objekte haben keine Namen

Wichtig ist die Sprechweise: f1 und f2 sind nicht die Namen der Objekte. Es sind die Namen von Variablen, die auf die Objekte verweisen. Ein solcher Verweis heißt Referenz. Das Objekt selbst trägt keinen Namen – man erreicht es nur über eine Referenz.

Das wird deutlich, wenn man einer zweiten Variablen dasselbe Objekt zuweist. Im Spiel müssen wir uns z.B. merken, welche Figuren gerade „an der Reihe" sind. Wenn der Münzwurf die rote Figur bestimmt, schreiben wir:

val aktuelleFigur1 = f2

Dabei wird kein neues Objekt erzeugt. Die Zuweisung führt nur einen weiteren Namen für dasselbe Objekt ein: aktuelleFigur1 und f2 verweisen jetzt auf dieselbe Figur.

Objektdiagramm: f2 und aktuelleFigur1 verweisen auf dasselbe Objekt

Objekte haben keine Namen, sondern nur die Referenzen auf sie. Eine Zuweisung wie aktuelleFigur1 = f2 kopiert kein Objekt, sondern lässt eine weitere Variable auf dasselbe Objekt verweisen.

Aufgabe 1 - Dasselbe Objekt

Sage voraus, was das folgende Programm ausgibt. Beachte, dass aktuelleFigur1 auf dasselbe Objekt wie f2 verweist. Mit dem Operator === kannst du prüfen, ob zwei Variablen auf dasselbe Objekt verweisen. Führe das Programm danach 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
        }
        if (x < 0) x = 4
        if (x > 4) x = 0
        if (y < 0) y = 4
        if (y > 4) y = 0
    }
}

fun main() {
    val f1 = Figur("blau", 0, 0)
    val f2 = Figur("rot", 4, 4)

    val aktuelleFigur1 = f2          // dasselbe Objekt wie f2
    aktuelleFigur1.gehe(3)           // eine Bewegung nach links

    println(f2.x)                    // ?
    println(aktuelleFigur1.x)        // ?
    println(f2 === aktuelleFigur1)   // ?
    println(f1 === f2)               // ?
}

Aufgabe 2 - Objektdiagramm zeichnen

Zeichne das Objektdiagramm, das sich am Ende des Programms aus Aufgabe 1 ergibt. Achte darauf, wie viele Objekte es gibt und welche Variablen auf welches Objekt verweisen.

Suche

v
100.123.5.1.3 Mehrere Figuren und Referenzen
Kopieren durch Anklicken

Rückmeldung geben