Encapsulamiento y propiedades

Mapa conceptual
- Estructuras de Datos
- Lineales
- Arrays
- Listas enlazadas
- Pilas y Colas
- No lineales
- Arboles BST
- Heaps
- Grafos
- Hash
- Funcion hash
- Colisiones
- Rehashing
- Algoritmos
- Ordenamiento
- Busqueda binaria
- BFS DFS
- Optimizacion
- Big-O
- Dinamica
- Voracidad
- Lineales
¿Qué es encapsular?
Encapsular es ocultar el estado interno de un objeto y exponer solo una interfaz controlada (métodos). Quien usa el objeto no manipula sus entrañas, sino que pide operaciones. Así el objeto puede cambiar su implementación sin romper a nadie.
El problema de exponer todo
Si un atributo público se escribe desde cualquier parte, la coherencia se pierde: alguien asigna una edad negativa o un saldo imposible. La validación se dispersa por todo el código y siempre hay un sitio que se olvida de comprobar.
Getters y setters
La solución clásica es leer con un getter y escribir con un setter que valide. Python lo ofrece sin ceremonia mediante property: defines un método y lo expones como si fuera un atributo normal, pero por detrás se ejecuta tu código de control.
Propiedades computadas
Una property puede además calcular un valor al vuelo, sin almacenarlo: «edad» derivada de la fecha de nacimiento, «área» derivada del radio. El usuario accede como atributo; tú decides si lee, calcula o valida.
| Mecanismo | Para qué | Ventaja |
|---|---|---|
| Atributo público | datos triviales sin reglas | simpleza |
| property getter | leer con lógica o cálculo | interfaz de atributo |
| property setter | validar al escribir | invariante concentrada |
| atributo _privado | señal de interno | convención de uso |
¿Cuál es el objetivo principal del encapsulamiento?
Privado en Python
Python no tiene privados estrictos: un nombre con guion bajo inicial (_x) avisa «esto es interno» por convención; con doble guion bajo (__x) se renombra para evitar choques. La filosofía es de confianza con señal clara, no de muros impenetrables.
La ley de Demeter y el diseño
Un objeto debe exponer lo que necesita el mundo, no cómo lo resuelve internamente. Cuanto menos dependa el cliente del detalle interno, más libre eres para refactorizar. El encapsulamiento bien entendido es baja coupling.
En Python, convertir un atributo público en una property puede hacerse sin cambiar el código de quien lo usa.
Cuándo NO encapsular en exceso
No todo merece un getter/setter. Un simple punto con coordenadas puede ir público. Encapsular en exceso añade ruido. La regla práctica: encapsula cuando hay una invariante que proteger o un cálculo que ocultar.
Errores frecuentes
- Validar en el setter y olvidar que el atributo pudo inicializarse por otra vía.
- Hacer una property tan lenta que leer el atributo por error costísimo.
- Exponer un objeto mutable interno que el cliente luego modifica a sus anchas.
Clasifica cada decisión de diseño:
Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.
Python DocsPropiedades y descriptores: cómo funcionan por dentro.
Toma una clase Cuenta con un atributo saldo. Diseña una property que impida saldos negativos y explica qué ventaja le da al resto del programa frente a dejar saldo público.
Tu texto se guarda sólo en este dispositivo.
VisuAlgoVisualizaciones animadas de estructuras de datos y algoritmos.
Comentarios
Inicia sesión para comentar.
Todavía no hay comentarios. Sé la primera persona en opinar.