Getters y Setters

Explicación de los métodos get y set.

Hasta ahora tenemos nuestra clase Slime de la siguiente manera:

val BAD_WORDS: Array<String> = arrayOf("Feo", "Tonto", "CuatroOjos")

class Slime (name: String = "slimePorDefecto", hp: Int = 100, ap: Int = 5){
    var name: String
    var hp: Int
    var ap: Int
    var alive: Boolean = true

    init {
        if (name in BAD_WORDS) this.name = "BuenIntento" else this.name = name
        if (hp <= 100) this.hp = hp else this.hp = Random.nextInt(0, 100)
        if (ap <= 5) this.ap = ap else this.ap = Random.nextInt(0, 5)
    }  
    fun die() {
    this.alive = false
    }
}

Hemos diseñado un constructor que evita que el usuario pueda introducir valores superiores a 100 en hp y a 5 en ap.

Sin embargo, el usuario aun puede acceder a dichos valores como miembros que son de la clase y modificarlos a su antojo, evitando dicha comprobación del constructor:

Para evitar eso debemos utilizar los modificadores de visibilidad que permiten restringir el acceso a diferentes partes del código (variables, clases, constructores...):

  • private: Marca una declaración como visible en la clase o archivo actual.

  • protected: Marca una declaración como visible en la clase y subclases de la misma.

  • internal: Marca una declaración como visible en el módulo actual.

  • public: Marca una declaración como visible en todas partes.

De esta manera estaríamos aplicando el principio de ocultación:

Sin embargo, ahora no podemos acceder a la información almacenada en las variables ni modificarla. Para eso se utilizan las funciones get y las funciones set.

APLICACIÓN DE ENCAPSULAMIENTO

Funciones get()

Las funciones get() nos permiten acceder a la información almacenada dentro de las propiedades de un objeto:

Sin embargo, al haber hecho nuestras variables privadas, no va a servir esta forma de ejecutar los getters ya que no tenemos capacidad de visualizarlos.

Tendremos que utilizar la siguiente opción. Crear funciones miembro de la clase que hagan el trabajo de las funciones get():

Funciones set()

Se utilizan para modificar el contenido de un atributo.

Sin embargo, como ha pasado anteriormente, no podemos hacer esto pues hemos hecho privados nuestros atributos.

Para solventarlo vamos a crear unas funciones que actuen como los setter que hemos definido arriba:

Last updated