Programación Orientada a Objetos · Programación

Encapsulamiento y propiedades

Aplicar el encapsulamiento para proteger el estado interno de un objeto y usar propiedades para validar o computar atributos con interfaz limpia.

Encapsulamiento y propiedades

Ilustracion de programacion orientada a objetos: jerarquia de clases con herencia y encapsulamiento.
Principios de la programacion orientada a objetos: clases, herencia y polimorfismo.

Mapa conceptual

Proteger la coherencia, no esconder datos Un objeto sano mantiene sus invariantes: si el saldo no puede ser negativo, debe haber UN solo lugar que lo garantice. El encapsulamiento concentra esa guardia en el propio objeto.

¿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.

Empieza por atributos simples; envuelve en property solo cuando aparezca una regla.
MecanismoPara quéVentaja
Atributo públicodatos triviales sin reglassimpleza
property getterleer con lógica o cálculointerfaz de atributo
property settervalidar al escribirinvariante concentrada
atributo _privadoseñal de internoconvenció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

Clasifica cada decisión de diseño:

Conviene property
Basta atributo publico

Python Docs
Propiedades 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.

VisuAlgo
Visualizaciones animadas de estructuras de datos y algoritmos.