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

Methoden

Modellierung der Methoden

Wir wollen nun die Methoden der Klasse Tier ergänzen.

  • Ein Tier kann sich langweilen, dann verliert es Energie und Glück. Es kann spielen, dann verliert es Energie, aber gewinnt Glück. Wie viel es genau verliert oder gewinnt, kannst du selbst festlegen.
  • Ein Tier kann man fuettern und übergibt als Parameter die Menge an Futter in Form einer ganzen Zahl. Dabei erhöht sich die Energie des Tiers um die übergebene Menge, allerdings kann die Energie nicht über 10 steigen. Überschüssiges Futter bleibt dann ungenutzt.
  • Schließlich kann man ein Tier über die Methoden istGluecklich, istTraurig und istVerhungert befragen, um herauszufinden, ob das Tier glücklich, traurig oder verhungert ist. Ein Tier ist glücklich, wenn sein Glückslevel mindestens 20 beträgt, es ist traurig, wenn sein Glückslevel kleiner oder gleich 0 ist, und es ist verhungert, wenn sein Energielevel kleiner oder gleich 0 ist.

Aufgabe 1

Überprüfe dein Klassendiagramm und passe es bei Bedarf an, um die oben beschriebenen Methoden zu berücksichtigen. Benutze exakt die oben genannten Methodennamen, damit die Implementierung später zur schon existierenden Spiel-Klasse passt. Achte darauf, dass die Methoden die richtigen Parameter und Rückgabewerte haben.

Methoden der Klasse Person

Im vorherigen Teilkapitel haben wir bei den Übungen die Klasse Person verwendet. Hier siehst du einen Teil einer möglichen Implementierung der Klasse. Da es hier nicht um die genaue Implementierung der Methoden geht, sondern primär um den schematischen Aufbau, sind einige Methoden stark vereinfacht.

class Person(
	var name: String,
	val geburtstagTag: Int,
	val geburtstagMonat: Int,
	val geburtsjahr: Int
) {
	fun berechneAlter(): Int {
        // Hier müsste das exakte Alter berechnet werden. Zur Vereinfachung immer 18.
        return 18
	}

	fun istVolljaehrig(): Boolean {
        if(berechneAlter() >= 18) {
            return true
        } else {
            return false
        }
	}

	fun druckeInfo() {
        println(name)
        println(berechneAlter())
        // weitere Informationen wurden hier zur Vereinfachung ausgelassen.
	}

	fun berechneAlterAm(tag: Int, monat: Int, jahr: Int): Int {
        // Die exakte Berechnung ist hier nur angedeutet
        return jahr - geburtsjahr
	}
}

Aufgabe 2

Analysiere den obigen Code und beschreibe wie
  • Methoden ohne/mit Parameter und ohne/mit Rückgabewert implementiert werden
  • Fallunterscheidungen in Kotlin implementiert werden

Aufgabe 3

Implementiere die Methoden der Klasse Tier entsprechend. Teste die Methoden, indem du ...
  • ein Tier interaktiv erstellst, den Objektinspektor öffnest und die Methoden aufrufst. Hinweis: Aktuell (in der BlueJ-Version 6.0.0) siehst du dort einige Methoden mit dem Suffix [auto-generated]. Diese kannst du ignorieren, sie werden von BlueJ automatisch generiert und sind für uns nicht relevant.
  • ein Hauptprogamm schreibst, das ein Tier erstellt, die Methoden aufruft und die Werte der Attribute ausgibt.
Hilfe zu langweilen und spielen

Die Methoden haben keine Parameter und keinen Rückgabewert. Sie verändern nur die Werte der Attribute energie und glueckslevel. Dazu musst du einen neuen Wert für die Attribute berechnen und diesen dann zuweisen. Dazu folgst du dem Muster attribut = attribut + wert, um attribut um wert zu erhöhen.

Mehr Hilfe zu langweilen und spielen

Sortiere die Zeilen für eine mögliche Implementierung. Eine Zeile ist überflüssig und demonstriert einen häufig gemachten Fehler. Erkläre warum diese Zeile nicht benötigt wird.

fun langweilen() {                           §§fest
    energie = energie - 1                    §§gruppe=langweilen
    glueckslevel = glueckslevel - 2          §§gruppe=langweilen
}
fun spielen() {
    energie = energie - 1                    §§gruppe=spielen
    glueckslevel = glueckslevel + 2          §§gruppe=spielen
    glueckslevel + 2                         §§extra
}                                            §§fest
Hilfe zu fuettern

Die Methode fuettern hat einen Parameter, der die Menge an Futter angibt. Du kannst diesen Parameter verwenden, um die Energie des Tiers zu erhöhen. Allerdings darf die Energie nicht über 10 steigen. Dies erreichst du mit Hilfe einer Fallunterscheidung, die überprüft, ob die neue Energie größer als 10 wäre, und in diesem Fall die Energie auf 10 setzt. Ansonsten wird die Energie einfach um die übergebene Menge erhöht.

Mehr Hilfe zu fuettern

Ergänze die Bedingung und bringe die Zeilen der Fallunterscheidung in die richtige Reihenfolge.

fun fuettern(menge: Int) {                    §§fest
    if (energie + menge §§>§§ §§10§§) {
        energie = 10
    } else {
        energie = energie + menge
    }
}                                             §§fest
Hilfe zu istGluecklich, istTraurig und istVerhungert

Du kannst dich sehr nah an der Methode der Klasse Person orientieren, die überprüft, ob eine Person volljährig ist.

Mehr Hilfe zu den Abfragemethoden

Bringe die Zeilen für istGluecklich in die richtige Reihenfolge. Übertrage das Muster anschließend selbst auf istTraurig und istVerhungert.

fun istGluecklich(): Boolean {                 §§fest
    if (glueckslevel >= 20) {
        return true
    } else {
        return false
    }
}                                              §§fest

Suche

v
100.123.2.1.5 Methoden
Kopieren durch Anklicken

Rückmeldung geben