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, für das Attribut name einfach var durch val zu ersetzen.
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)
}
Tipps zur Ausgabe mit println()

Wenn du die Ausgabe des Tiernamens etwas verschönern möchtest, so dass z.B. "Der Name des Tiers ist: Wuffi" ausgegeben wird, kannst du die Ausgabe von Zeichenketten mit Variablen oder anderen Ausdrücken kombinieren. Bei einfachen Variablen kannst du diese direkt mit einem Dollarzeichen davor in die Ausgabe einfügen, z.B.

println("Der Name des Tiers ist: $name")

Details und Beispiele findest du in den Tipps zu Kotlin.

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.

Dass der Konstruktor der Klasse Parameter besitzt, stellt man üblicherweise auch im Klassendiagram dar. Im Klassendiagramm gibt es keinen speziellen Bereich für Konstruktoren, weshalb man diese bei den Methoden mit auflistet. Eigentlich handelt es sich beim Konstruktor aber nicht um eine Methode, da man diesen zur Erzeugung eines Objekts benötigt, während Methoden erst auf einem bereits existierenden Objekt aufgerufen werden können.

Klassendiagramm mit Konstruktor

Aufgabe 2

Zeichne das Klassendiagramm für die Klasse Tier mit einem Konstruktor, der einen Parameter für den Namen des Tiers besitzt. Die anderen Attribute sollen weiterhin mit Standardwerten versehen werden und nicht über den Konstruktor gesetzt werden.

Aufgabe 3

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ückslevel der Tiere ausgibst
  • die Werte für Energie und Glückslevel 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