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

Vertiefung - Private Daten

Attribute verstecken

In einigen Programmiersprachen muss man Attribute komplett verstecken, um den ungeschützten Zugriff von außen zu verhindern. "Von außen" bedeutet hier: von außerhalb der Klasse, also von anderen Klassen oder z.B. in einem Hauptprogramm. Man schreibt dann Get- und Set-Methoden, um den Zugriff auf die Attribute kontrolliert zu ermöglichen, aber die Attribute selbst sind von außen nicht mehr sichtbar.

Durch die Art und Weise, wie man in Kotlin Getter und Setter definieren kann, ist es in vielen Fällen nicht nötig, Attribute komplett zu verstecken. Dennoch kann man auch in Kotlin erreichen, dass man auf Attribute - oder auch Methoden - von außerhalb der Klasse gar nicht mehr direkt zugreifen kann. Man erreicht dies - wie in vielen anderen Sprachen - mit Hilfe des Zugriffsmodifikators private.

Dadurch ergeben sich neue Möglichkeiten wie man den Zugriff auf Attribute steuern kann. Das folgende Programm demonstriert solche Möglichkeiten:

class Timer {
    private val maxDiff: Int = 30
    
    var min: Int = 0
    	private set
    
    var max: Int = 0
    	private set
    
    val zeitspanne: Int
    	get() {
            return max - min
        }
    
    fun setLimits(neuesMin: Int, neuesMax: Int) {
        if(neuesMin >= 0 && (neuesMax-neuesMin) <= maxDiff) {
            this.min = neuesMin
            this.max = neuesMax
        }
    }

    fun starten() {
        // Den Inhalt dieser Methode musst du nicht verstehen.
        // Du musst nur wissen, dass die Methode den Timer startet.
        val bis = if (max <= min) max else min + java.util.Random().nextInt(max - min)

        for (i in 0 until bis) {
            try {
                Thread.sleep(1000)
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }

        println("Timer abgelaufen!")
    }
}

fun main() {
    val timer = Timer()
    // Hier solltest du den Timer noch testen

}

Aufgabe

Analysiere den obigen Code und formuliere Vermutungen, auf welche Weise der Timer gesteuert werden kann und welche Zugriffe nicht möglich sind. Teste deine Vermutungen, indem du ein Hauptprogramm schreibst, das den Timer steuert. Nutze dazu das BlueJ-Projekt oder die Online-Version oben.

Beachte bei der Nutzung der Online-Version, dass die Ausführungszeit eines Programms in der Online-Version auf wenige Sekunden begrenzt ist.

Suche

v
100.123.3.1.5 Vertiefung - Private Daten
Kopieren durch Anklicken

Rückmeldung geben