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
energieundglueckslevelim Kontext unseres Spiels mitvardefiniert werden müssen, während es eigentlich sinnvoll wäre, wenn das Attributnamemitvaldefiniert werden könnte. -
Beschreibe an der Code-Vorlage unten, warum es bei unserem Spiel nicht sinnvoll möglich ist,
das Attribut
namemitvalzu 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() {
}