Fachkonzept - OOP
Objektorientierte Programmierung (OOP)
Nachdem wir ein objektorientiertes Modell erstellt haben, können wir die Klassen, die wir darin definiert haben, in Kotlin implementieren. Wir gehen wieder von dem Modell eines Roboters aus, das in folgendem Klassendiagramm dargestellt ist:
Aus dem Klassendiagramm können wir fast vollständig ein Grundgerüst für die
Implementierung der Klasse Roboter ableiten.
Was uns fehlt ist nur die Information, ob die Attribute mit val
oder var deklariert werden sollen, und welche Werte die Attribute
initial haben sollen.
Außerdem ist die genaue Implementierung der Methoden nicht aus dem Klassendiagramm ersichtlich.
Damit die Klasse compiliert werden kann, müssen wir bei
Methoden mit einem Rückgabetyp einen Dummy-Wert zurückgeben.
class Roboter(
val name: String
) {
var ladezustand: Int = 100
fun laufen(entfernung: Float) {
// tu was getan werden muss, damit der Roboter läuft
}
fun drehen(winkel: Int, imUhrzeigersinn: Boolean) {
// tu was getan werden muss, damit der Roboter dreht
}
fun istVorHindernis(): Boolean {
// tu was getan werden muss, um ein Hindernis zu erkennen
// gib hier als Dummy-Wert einfach false zurück
return false
}
fun ausschalten() {
// tu was getan werden muss, damit der Roboter sich ausschaltet
}
}
In allgemeiner Form könnte man die Implementierung einer Klasse also folgendermaßen zusammenfassen:
class Klasse(
var attribut1: Datentyp, // Attribute, die im Konstruktor
var attribut2: Datentyp // angegeben werden müssen
) {
var attribut3: Datentyp = initialerWert // weitere Attribute
fun methode(parameter1: Datentyp, parameter2: Datentyp): Rückgabetyp {
// Implementierung der Methode
return rueckgabeWert // falls die Methode einen Rückgabewert hat
}
}
Wenn der Konstruktor der Klasse keine Parameter besitzt, kann man die runden Klammern weglassen:
class Klasse {
// Attribute und Methoden ...
}
Bei Attributen, die nicht über die Parameter des Konstruktors angegeben werden, müssen wir einen Anfangswert angeben, damit die Klasse compiliert werden kann. Der Compiler erkennt dabei automatisch den Datentyp des Attributs, weshalb wir diesen nicht explizit angeben müssen. Konkret könnte das so aussehen:
class Tier {
var energie = 5
// statt
// var energie: Int = 5
}