Saltar a contenido

Encapsulamiento: Protegiendo la Integridad de los Datos

El Encapsulamiento consiste en agrupar los datos (atributos) y los comportamientos (métodos) en una sola unidad (la clase) y controlar quién puede verlos o modificarlos. Es el equivalente a la "caja negra" en ingeniería: sabes qué hace, pero no necesitas (ni debes) tocar los cables internos para que funcione.


1. Niveles de Acceso en Python

A diferencia de otros lenguajes como Java o C++, Python no tiene palabras clave como private o public. En su lugar, utiliza una convención de nombres basada en guiones bajos:

Público (Sin guiones)

Cualquier atributo o método es accesible desde fuera de la clase.

self.nombre = "Alex"

Protegido (Un guion bajo: _)

Indica a otros programadores que el atributo es de uso interno y no debería tocarse desde fuera, aunque técnicamente Python aún lo permite. Es una "advertencia de caballeros".

self._saldo_interno = 100

Privado (Dos guiones bajos: __)

Python aplica un mecanismo llamado Name Mangling para dificultar el acceso desde fuera. Si intentas acceder a objeto.__atributo, el programa lanzará un error. Es la forma más fuerte de proteger un dato.

self.__clave_secreta = "12345"


2. Getters y Setters: Los Porteros

Para interactuar con atributos privados de forma segura, utilizamos métodos especiales: * Getter (Obtener): Un método que retorna el valor del atributo privado. * Setter (Establecer): Un método que permite cambiar el valor, pero incluyendo validaciones. Por ejemplo, un setter de "edad" podría impedir que se asigne un número negativo.


3. ¿Por qué es importante?

  1. Control Total: Puedes validar los datos antes de guardarlos.
  2. Flexibilidad: Puedes cambiar la implementación interna (el nombre de la variable interna) sin romper el código de las personas que usan tu clase.
  3. Seguridad: Evita que el estado de un objeto se vuelva inconsistente (por ejemplo, que una cuenta bancaria tenga saldo negativo si las reglas del negocio no lo permiten).

Reto: La Caja Fuerte Bancaria

Vas a crear una clase para manejar una cuenta de ahorros. El saldo debe ser estrictamente privado para que nadie pueda modificarlo sin pasar por los métodos oficiales.

Instrucciones: 1. Crea la clase CuentaBancaria. 2. En el __init__, define un atributo privado llamado __saldo e inicialízalo con el valor que reciba la función. 3. Crea un método getter llamado obtener_saldo que retorne el valor de __saldo. 4. Crea un método setter llamado depositar que reciba una cantidad. Si la cantidad es mayor a 0, súmala al saldo; si no, no hagas nada. 5. Crea un objeto mi_cuenta con 1000 de saldo inicial. 6. Llama al método depositar con 500 y guarda el saldo final en la variable saldo_final usando el getter.

# Protege el saldo de la cuenta: