s n h m r u

Minimallogo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

s n h m r u
i

Konstruktor

Startwerte für Attribute

Du hast vermutlich die Tierklasse so oder ähnlich implementiert:

class Tier {
    var name = ""
    var energie = 5
    var glueckslevel = 10
}

Aufgabe 1

  • Erläutere, warum die Attribute energie und glueckslevel im Kontext unseres Spiels mit var definiert werden müssen, während es eigentlich sinnvoll wäre, wenn das Attribut name mit val definiert werden könnte.
  • Beschreibe an der Code-Vorlage unten, warum es bei unserem Spiel nicht sinnvoll möglich ist, das Attribut name mit val zu definieren.
class Tier {
    val name = ""   // name mit val definiert
    var energie = 5
    var glueckslevel = 10
}

fun main() {
    val tier = Tier()
    tier.name = "Wuffi"
    println(tier.name)
}

Parameter für den Konstruktor

Bisher hatte der Konstruktor unserer Klasse Tier keine Parameter, weshalb alle Tiere, die wir erzeugen, den gleichen Standardnamen, z.B. eine leere Zeichenkette, haben. Wir bräuchten also eine Möglichkeit, um folgenden Wunsch zu erfüllen:

Beim Erzeugen eines Tiers muss man den Namen des Tiers zwingend angeben. Es soll nicht möglich sein, ein Tier zu erzeugen, ohne einen Namen anzugeben. Der Wert des Parameters soll als Attribut gespeichert werden und danach nicht mehr verändert werden können.

Wir schauen uns eine mögliche Implementierung der Klasse Karte aus dem vorherigen Abscnnitt an, um zu sehen, wie man das erreichen könnte:

class Karte(
    val farbe: String,
    val rang: String
) {
    // Rest der Implementierung ...
}

Da Zeilenumbrüche in Kotlin keine Bedeutung haben, könnte man die Parameter auch in einer einzigen Zeile angeben:

class Karte(val farbe: String, val rang: String) {
    // Rest der Implementierung ...
}

Welche Variante man verwendet, ist Geschmackssache und hängt auch von der Zahl der Parameter ab.

Aufgabe 2

Implementiere die Klasse Tier so, dass sie die oben genannten Anforderungen erfüllt. Überlege dir, wie man es erreichen kann, dass der Name des Tiers beim Erzeugen eines Tiers zwingend angegeben werden muss und nicht mehr verändert werden kann, während die anderen Attribute weiterhin mit Standardwerten versehen werden und veränderbar bleiben.

Teste deine Implementierung mit einem Hauptprogramm, in dem du

  • zwei Tiere erzeugst
  • den Namen, die Energie und das Glück der Tiere ausgibst
  • die Werte für Energie und Glück veränderst und erneut ausgibst

Alternativ zur Implementierung in BlueJ kannst du auch hier online arbeiten:

class Tier

fun main() {
    
}

Suche

v
100.123.2.1.4 Konstruktor
Kopieren durch Anklicken

Rückmeldung geben