Skip to content
IRC-CodingIRC-Coding
AbstracciónOOPInterfaceClase AbstractaComposiciónOpen Closed PrincipleContratosDesign by Contract

Abstracción OOP Fundamentos explicados

Abstracción reduce sistemas complejos a propiedades esenciales. Interface, clases abstractas, composición, Open Closed Principle y Design by Contract.

S

schutzgeist

3 min read
Abstracción OOP Fundamentos explicados

Abstracción Fundamentos OOP – Interface, Clase Abstracta, Composición, Open Closed Principle

Este artículo es una explicación conceptual sobre la abstracción en OOP, incluyendo preguntas de examen y referencias.

En Pocas Palabras

La abstracción reduce sistemas complejos a sus propiedades y operaciones esenciales, define qué expone una interfaz mientras que el cómo permanece oculto y puede desarrollarse de forma independiente.

Descripción Técnica Concisa

La abstracción es la ocultación deliberada de detalles irrelevantes para obtener un modelo claro y estable. En OOP se implementa mediante interfaces, clases abstractas, modelos de rol y contratos que establecen el comportamiento observable. Las buenas abstracciones son mínimas, completas, consistentes, ortogonales, permiten intercambiabilidad y se prueban bien con procedimientos de caja negra. La abstracción trabaja en conjunto estrecho con la encapsulación y el polimorfismo: la abstracción define qué es visible, la encapsulación protege los detalles de implementación y el polimorfismo permite implementaciones intercambiables.

Puntos Clave Relevantes para Examen

  • Enfoque en propiedades relevantes, reducción de la superficie visible
  • Mecanismos: interface, clase abstracta, composición, genéricos
  • Separación de contrato e implementación, fomenta bajo acoplamiento y alta cohesión
  • Relevante para IHK, distinguir con precisión de encapsulación y herencia
  • Práctica: interfaces pequeños basados en roles, Interface Segregation Principle
  • Aspecto de seguridad: contratos claros limitan superficie de ataque y evitan manipulación de estado sin validar
  • Rentabilidad: contratos estables reducen costos de mantenimiento y cambios
  • Obligación de documentar: precondiciones, postcondiciones, excepciones, efectos secundarios de forma explícita

Componentes Clave

  1. Modelo de dominio, lenguaje ubicuo, términos y relaciones
  2. Interfaz de contrato, firmas, semántica, casos de error
  3. Bases abstractas, lógica compartida sin implementación completa
  4. Roles, múltiples interfaces pequeños en lugar de un God Interface
  5. Composición, relaciones de tiene-un para estructurar comportamiento
  6. Tipos genéricos, abstracción paramétrica sobre tipos
  7. Patrones de diseño: Strategy, Template Method, Adapter, Ports and Adapters
  8. Límites arquitectónicos: Ports, Adapters, Bounded Contexts
  9. Reglas de calidad: alta cohesión, bajo acoplamiento, conforme a LSP
  10. Procedimientos de prueba: Contract Tests, Substitution Tests, Property Based Tests

Ejemplo Práctico

// Objetivo: abstraer la exportación de archivos
interface Exporter {
byte[] export(Report r)
}

class PdfExporter implements Exporter {
public byte[] export(Report r) { /* PDF Rendering, Validierung, Byte Stream */ }
}

class CsvExporter implements Exporter {
public byte[] export(Report r) { /* CSV Serialisierung, Trennung, Encoding */ }
}

class ReportService {
private Exporter exporter
public ReportService(Exporter exporter) { this.exporter = exporter }
public byte[] exportReport(Report r) {
if (r == null) throw new IllegalArgumentException("Report erforderlich")
return exporter.export(r)
}
}

Explicación: La interfaz Exporter define la abstracción de la exportación, los formatos concretos son intercambiables y el ReportService permanece sin cambios.

Ventajas e Inconvenientes

Ventajas

  • Menor acoplamiento, mayor cohesión
  • Mejor capacidad de prueba, responsabilidades claras
  • Fácil extensibilidad, APIs más estables

Inconvenientes

  • Esfuerzo inicial de modelado
  • Riesgo de sobre-abstracción
  • Indirección adicional si el diseño no es adecuado

Preguntas Típicas de Examen (con Respuesta Breve)

  1. ¿Abstracción vs. Encapsulación? La abstracción define qué aspectos relevantes son visibles, la encapsulación oculta la implementación de esos aspectos detrás de la interfaz.

  2. ¿Interface vs. Clase Abstracta? Interface para contratos puros y roles múltiples, clase abstracta cuando se comparte lógica base común o estado.

  3. ¿Apoya el Open Closed Principle? Los contratos permanecen estables, nuevas variantes surgen como nuevas implementaciones, el código existente no necesita modificación.

  4. ¿Criterios de buena abstracción? Mínima pero completa, nombrada consistentemente, ortogonal, estable ante cambios internos, documentada de forma inequívoca.

  5. ¿Cómo comprobar la calidad de una abstracción? Métricas: número de métodos por interface, frecuencia de cambios, reutilización, cobertura de pruebas, número de implementaciones.

  6. ¿Ejemplo de mala abstracción? God Interface con muchos métodos sin relación, viola ISP, dificulta intercambiabilidad y pruebas.

  7. ¿Papel de los Generics en la abstracción? Abstracción paramétrica, un algoritmo para muchos tipos sin necesidad de casts, seguridad de tipos gracias al compilador.

  8. ¿Cómo trabajan juntos Polimorfismo y Abstracción? La abstracción define el contrato, el polimorfismo proporciona implementaciones intercambiables, el dispatch dinámico vincula en tiempo de ejecución.

Fuentes Más Importantes

  1. https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
  2. https://de.wikipedia.org/wiki/Abstraktion_(Informatik)
  3. https://martinfowler.com/bliki/RoleInterface.html
Volver al blog
Share:

Entradas relacionadas