Skip to content
IRC-CodingIRC-Coding
EncapsulaciónOOPInformation HidingVisibilidadprivateprotectedpublicInvariantes

Encapsulación OOP: Conceptos Fundamentales

Encapsulación oculta estados internos y detalles de implementación. Aprende sobre visibilidad (private, protected, public), information hiding e invariantes.

S

schutzgeist

3 min read
Encapsulación OOP: Conceptos Fundamentales

Encapsulación Fundamentos OOP - Visibilidad, Information Hiding, private, protected, public

Este artículo es una explicación de conceptos sobre encapsulación en OOP, incluyendo preguntas de examen y etiquetas.

En Pocas Palabras

La encapsulación oculta los estados internos y detalles de implementación de un objeto, exponiendo únicamente interfaces bien definidas hacia el exterior. El objetivo es lograr software robusto, mantenible y seguro mediante límites claros de responsabilidad.

Descripción Técnica Compacta

La encapsulación es un principio central de OOP que agrupa datos y comportamiento en una unidad y restringe el acceso directo a las representaciones internas. Técnicamente se implementa mediante modificadores de visibilidad como private, protected, public, package, así como métodos de acceso y propiedades. Information Hiding reduce el acoplamiento, aumenta la cohesión y permite cambiar la implementación sin afectar a los consumidores. Los invariantes se mantienen dentro del objeto, las entradas y salidas se validan. La mutabilidad se gestiona deliberadamente, y los objetos inmutables eliminan categorías enteras de errores.

Puntos Relevantes para Exámenes

  • Information Hiding protege la representación interna, reduce el acoplamiento
  • Los modificadores de visibilidad private, protected, public, package controlan el acceso
  • Los getters y setters no son un fin en sí mismo, solo se proporcionan cuando es necesario desde el punto de vista funcional
  • Relevante para IHK, conceptos de encapsulación, abstracción, cohesión y acoplamiento deben diferenciarse correctamente
  • Los objetos inmutables mejoran la seguridad en hilos y testabilidad en la práctica
  • Validación, invariantes y la Ley de Demeter previenen manipulación insegura del estado
  • Rentabilidad mediante reducción de costos de mantenimiento y refactoring más sencillo
  • Obligación de documentación, interfaces públicas, precondiciones, postcondiciones

Componentes Clave

  1. Elementos del lenguaje para visibilidad, private, protected, public, package
  2. Propiedades y métodos, exposición dirigida en lugar de divulgación completa
  3. Invariantes, reglas funcionales que siempre deben cumplirse
  4. Contratos, precondiciones y postcondiciones en la API pública
  5. Concepto de mutabilidad, mutable, inmutable, Copy on Write
  6. Control de acceso y validación, verificar entradas, cambios de estado atómicos
  7. Paso de proceso, refactoring para ocultar campos de datos y colecciones internas
  8. Elemento arquitectónico, límites de módulo, límites de paquete, Bounded Contexts
  9. Aspecto de seguridad, minimización de superficie de ataque y puntos de inyección
  10. Procedimiento de prueba, tests de caja negra de la API y property-based tests para invariantes

Ejemplo Práctico

// Ejemplo, sintaxis similar a Java
class BankAccount {
private String iban
private int balanceInCents

public BankAccount(String iban) {
if (iban == null) throw new IllegalArgumentException("IBAN erforderlich")
this.iban = iban
this.balanceInCents = 0
}

public int balance() {
return balanceInCents
}

public void deposit(int cents) {
if (cents <= 0) throw new IllegalArgumentException("positiver Betrag")
balanceInCents += cents
}

public void withdraw(int cents) {
if (cents <= 0) throw new IllegalArgumentException("positiver Betrag")
if (cents > balanceInCents) throw new IllegalStateException("Überziehung nicht erlaubt")
balanceInCents -= cents
}
}

Explicación: Los campos son privados, solo las operaciones funcionalmente relevantes son públicas, los invariantes se validan.

Ventajas y Desventajas

Ventajas

  • Menor acoplamiento, mayor cohesión
  • Mejor mantenibilidad, refactoring más fácil
  • Responsabilidades claras, seguridad mejorada mediante controles de entrada

Desventajas

  • Posible sobrecarga de código repetitivo
  • Un aislamiento excesivo puede dificultar la testabilidad
  • Una inflación incorrecta de getters y setters puede socavar la encapsulación

Preguntas Típicas de Examen (con Respuesta Breve)

  1. ¿Diferencia entre encapsulación y abstracción? La encapsulación oculta los detalles de implementación tras una interfaz, la abstracción reduce la complejidad visible a las propiedades relevantes.

  2. ¿Niveles de visibilidad y su uso? private solo dentro de la clase, package solo dentro del paquete, protected clase y subclases, public visible globalmente.

  3. ¿Por qué son problemáticos los campos públicos? Evaden la validación, violan invariantes, aumentan el acoplamiento y hacen el refactoring arriesgado.

  4. ¿Cuándo tienen sentido los getters y setters? Cuando existe necesidad funcional, por ejemplo acceso de lectura o cambio controlado con validación, en caso contrario evitarlos.

  5. ¿Cómo la inmutabilidad respalda la encapsulación? Los objetos inmutables garantizan invariantes estables, simplifican el uso concurrente y previenen efectos secundarios.

  6. ¿Ley de Demeter y cómo ayuda? Habla solo con tus amigos directos, sin accesos encadenados, reduce el conocimiento sobre estructuras internas, fortalece la encapsulación.

  7. ¿Impacto en estrategias de prueba? Enfoque en tests de caja negra de la API pública, los detalles internos se verifican mediante comportamiento observable.

  8. ¿Romper encapsulación con colecciones? Devolver una List interna permite mutación externa, solución: copia defensiva o vista inmutable.

Fuentes Más Importantes

  1. https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
  2. https://de.wikipedia.org/wiki/Kapselung_(Programmierung)
  3. https://dl.acm.org/doi/10.1145/361598.361623

Continúa en la Ruta de Aprendizaje OOP

Todos los artículos de OOP están completos. Vuelve al primer artículo: Programación Orientada a Objetos Fundamentos OOP.

Volver al blog
Share:

Entradas relacionadas