Menu
Coddy logo textTech

Sichtbarkeitsmodifikatoren

Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 8 von 57.

Kapselung bedeutet, dass eine Klasse kontrolliert, wie auf ihre Daten zugegriffen wird. Sichtbarkeitsmodifikatoren legen fest, wer ein Mitglied sehen kann. private verbirgt es vor allem außerhalb der Klasse, sodass die eigenen Methoden der Klasse der einzige Zugangsweg sind:

class Account {
    private var balance = 0

    fun deposit(amount: Int) {
        if (amount > 0) balance += amount
    }

    fun report() = "balance: $balance"
}

Innerhalb von main:

val a = Account()
a.deposit(50)
a.deposit(-999)
println(a.report())
// a.balance = 1_000_000    // Fehler: kein Zugriff auf 'balance': es ist private

Ausgabe:

balance: 50

Kotlin hat vier Modifikatoren. Ohne einen davon ist eine Deklaration public und überall sichtbar:

public      // Standard: überall sichtbar
internal    // sichtbar im selben Modul (App oder Bibliothek)
protected   // sichtbar in der Klasse und ihren Unterklassen
private     // sichtbar innerhalb der Klasse (oder Datei, für Top-Level-Deklarationen)

Private Hilfsfunktionen halten die öffentliche Oberfläche klein. Aufrufer sehen, was die Klasse tut, nicht wie:

class Password(private val text: String) {
    val isStrong: Boolean
        get() = hasDigit() && text.length >= 8

    private fun hasDigit() = text.any { it.isDigit() }
}

Innerhalb von main:

println(Password("secret123").isStrong)
println(Password("short1").isStrong)

Ausgabe:

true
false

Konstruktor-Eigenschaften können ebenfalls Modifizierer haben: private val speichert einen Wert, den Code außerhalb der Klasse nicht lesen kann. Das Verbergen von Daten ermöglicht es einer Klasse, jede Änderung zu überprüfen und ihre Regeln einzuhalten:

class Locker(private val code: String) {
    private val items = mutableListOf<String>()
    fun store(item: String, code: String): Boolean {
        if (code != this.code) return false
        items.add(item)
        return true
    }
}
challenge icon

Aufgabe

Einfach

Vervollständige die Klasse Locker(private val code: String). Ihre Liste items ist privat. store(item, code) fügt das Element nur hinzu, wenn der Code übereinstimmt, und gibt zurück, ob dies der Fall war; open(code) gibt die durch , verbundenen Elemente (oder empty) zurück, wenn der Code übereinstimmt, und andernfalls wrong code.

Der bereitgestellte Code liest den Code des Schließfachs und anschließend Befehle der Form put <code> <item> oder open <code> ein. Für jedes put gibt er stored oder denied und für jedes open das Ergebnis aus.

Dein Code gehört in Locker.kt. Main.kt enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.

Probier es selbst

fun main() {
    // Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
    val input = generateSequence(::readLine).toList()
    val locker = Locker(input[0])
    for (cmd in input.drop(1)) {
        val p = cmd.split(" ")
        if (p[0] == "put") println(if (locker.store(p[2], p[1])) "stored" else "denied")
        else println(locker.open(p[1]))
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Kotlin-Playground