s n e h m r u

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

s n e h m r u
i

Vertiefung - Alles ist ein Objekt

Dieser Abschnitt ist als Vertiefung gedacht und für das Verständnis der folgenden Kapitel nicht zwingend notwendig. Für ein tieferes Verständnis der Sprache Kotlin ist er aber hilfreich.

Einfache Daten

Wenn man Zahlen wie 5, Wahrheitswerte wie true oder Zeichenketten wie "Hallo" benutzt, hat man nicht unbedingt das Gefühl Objekte zu verwenden. Das liegt unter anderem daran, dass die Zahl 5 intuitiv keine weiteren Eigenschaften hat und "nichts kann". Beim Programmieren mit Kotlin ist das aber tatsächlich anders. In Kotlin sind alle Werte Objekte einer Klasse. Die Zahl 5 ist ein Objekt der Klasse Int. Die Wahrheitswerte true und false sind Objekte der Klasse Boolean. Die Zeichenkette "Hallo" ist ein Objekt der Klasse String.

Erzeugung von Objekten

Ein wesentlicher Unterschied im Vergleich zu Klassen wie Karte oder Stapel beseht darin, wie Objekte erzeugt werden. Objekte der Klasse Int werden nicht mit dem Konstruktor erzeugt, sondern durch Angabe der Zahl selbst. Das gilt auch für die anderen "einfachen Daten". Damit die Zahl 5 nicht jedes mal neu erzeugt werden muss und die mehrfach erzeugte Zahl 5 nicht unnötigen Speicher belegt, werden automatisch Optimierungen vorgenommen.

Die Experimente im folgenden Programm demonstrieren dies. Die Anweisung System.identityHashCode(...) liefert die ID eines Objekts. Wenn zwei Objekte die gleiche ID haben, dann handelt es sich um dasselbe Objekt im Speicher.

fun main() {
    val zahl1: Int = 5
    val zahl2: Int = 5
    println("Zahl 1 ID:        ${System.identityHashCode(zahl1)}")
    println("Zahl 2 ID:        ${System.identityHashCode(zahl2)}") 
    
    val bool1: Boolean = true
    val bool2: Boolean = (10 > 5)
    println("Boolean 1 ID:     ${System.identityHashCode(bool1)}")
    println("Boolean 2 ID:     ${System.identityHashCode(bool2)}")
    
    val text1 = "Informatik"
    val text2 = "Informatik"
    println("Informatik 1 ID:  ${System.identityHashCode(text1)}")
    println("Informatik 2 ID:  ${System.identityHashCode(text2)}")

    val basis = "Info"
    val text3 = basis + "rmatik"
    println("Informatik 3 ID:  ${System.identityHashCode(text3)}") 
}

Aufgabe 1

Lasse das Programm mehrere Male ablaufen. Experimentiere dabei mit unterschiedlichen Zahlen, Wahrheitswerten und Zeichenketten. Beschreibe wie Kotlin bei der Erzeugung von Objekten hier optimiert. (Tipp: Für Zahlen existiert eine harte Grenze, ab der Kotlin optimiert. Findest du diese heraus?)

Die angezeigte Warnung bedeutet, dass man mit den Werten der entprechenden Datentypen nicht anhand der Identität arbeiten sollte, was wir hier aber bewusst tun.

Attribute

Da in Kotlin alles ein Objekt ist, haben diese auch - potentiell - Attribute. Für die Klassen Int und Boolean gibt es keine Attribute, auf die wir zugreifen könnten. Zeichenketten hingegen besitzen Attribute, von denen besonders die Länge length oft genutzt wird.

fun main() {
    val text = "Hallo Welt"
    println(text.length)
}

Aufgabe 2 - Attribute

Führe das Programm mehrere Male mit unterschiedlichen Zeichenketten aus.

Methoden

Auch scheinbar einfache Daten haben in Kotlin Fähigkeiten - also Methoden. Erwähnenswert ist, dass keine dieser Methoden das Objekt selbst verändert, sondern immer ein neues Objekt mit neuen Eigenschaften zurückgibt.

fun main() {
    val zahl = 5
    println(zahl.inc())
    println(zahl.dec())
    println(zahl.plus(10))
    println(zahl.times(10))
    println(zahl)
    
    val wahrheitswert = true
    println(wahrheitswert.not())
    println(wahrheitswert.and(true))
    println(wahrheitswert.or(false))
    println(wahrheitswert)

    val text = "Hallo"
    println(text.uppercase())
    println(text.reversed())
    println(text.first())
    println(text)
}

Aufgabe 3 - Methoden

Lasse das Programm ablaufen und erläutere die Ausgabe.

Suche

v
100.123.4.2 Vertiefung - Alles ist ein Objekt
Kopieren durch Anklicken

Rückmeldung geben