El encapsulamiento es un concepto clave en la programación orientada a objetos que permite proteger la información interna de una clase mediante el uso de modificadores de visibilidad. Al restringir el acceso directo desde fuentes externas, puedes evitar manipulaciones indeseadas y mantener la integridad de tus datos y operaciones.
¿Qué son los modificadores de visibilidad?
Los modificadores de visibilidad definen el nivel de acceso que tendrán variables y métodos en las clases:
Public: todos los elementos son accesibles desde fuera por defecto si no se especifica lo contrario.
Private: restringe el acceso para que solo sea visible internamente en la clase.
Por ejemplo, al crear una clase Email, podrías tener ciertas variables públicas que se pueden acceder fácilmente y algunas privadas que necesiten protección por razones de seguridad.
¿Cómo usar modificadores de visibilidad en variables y métodos?
Cuando crees un objeto como un Email con un asunto y una contraseña, normalmente no querrías exponer la contraseña directamente fuera del objeto. Para ello, Kotlin permite declarar variables como private, protegiéndolas de accesos externos:
Un método para enviar correos debe estar expuesto al exterior, pero una función para cifrarlos suele ser un detalle interno. De esa forma, también declaras métodos privados:
privatefunencrypt(){// lógica de cifrado}
Así, controlas las operaciones permitidas desde otros lugares.
¿Qué es la herencia en Kotlin y cómo influye en la visibilidad?
La herencia permite crear clases nuevas basadas en clases existentes, reutilizando sus métodos y atributos.
Para poder extender una clase, necesitas usar el modificador open en tu clase base, ya que por defecto Kotlin restringe esta capacidad:
Encapsulamiento y Visibilidad: Por defecto, todo en Kotlin es público (public). Usa private para ocultar datos sensibles —como contraseñas o lógica interna— protegiendo el estado de tus objetos desde el exterior.
Herencia y Clases: Las clases son final por defecto. Para extender una y reutilizar su código, debes declararla como open.
fun main(){println("\n=== EJERCICIO ===")println("Crea clase 'BankAccount' con:")println("1. balance (private)")println("2. deposit() (public)")println("3. validateAmount() (private)") val account =BankAccount(500.0)println("En el momento tienes: ${account.currentBalance}") account.deposit(10.0)println("En el momento tienes: ${account.currentBalance}")}classBankAccount(privatevarbalance:Double){ val currentBalance:Doubleget()= balance
fun deposit(monto:Double){if(validateAmount(monto)){println("Depósito exitoso de: $monto") balance+=monto
}else{println("Error: El monto $monto no es válido para depositar.")}}private fun validateAmount(monto:Double):Boolean{returnif(monto >0)trueelsefalse}}