Skip to content

Latest commit

 

History

History

18-SOLID

// concepto

SOLID son cinco principios de diseño orientado a objetos formulados por Robert C. Martin. Su objetivo es crear software mantenible, extensible y con bajo acoplamiento.

Letra Principio En una línea
S Single Responsibility Una clase, una razón para cambiar
O Open/Closed Abierto a extensión, cerrado a modificación
L Liskov Substitution Los subtipos deben sustituir a sus tipos base
I Interface Segregation Interfaces específicas, no "gordas"
D Dependency Inversion Depende de abstracciones, no de implementaciones
// key features

S — Single Responsibility Principle:

// Mal: UserService gestiona usuarios Y envía emails
// Bien: UserService (lógica) + EmailService (notificaciones)

O — Open/Closed Principle:

// Mal: switch gigante que hay que modificar por cada nuevo tipo
// Bien: interfaz + polimorfismo — añades nueva clase, no modificas código existente

L — Liskov Substitution Principle:

// Si Pato extends Ave, y Ave tiene volar()...
// Un PingüinoAve que lanza UnsupportedOperationException en volar() → viola LSP

I — Interface Segregation Principle:

// Mal: interface Trabajador { trabajar(); comer(); dormir(); }  ← los robots no comen
// Bien: interface Trabajable { trabajar(); } + interface Humano extends Trabajable { comer(); dormir(); }

D — Dependency Inversion Principle:

// Mal: UserService depende de MySQLRepository
// Bien: UserService depende de UserRepository (interfaz)
//       MySQLRepository implements UserRepository
// ventajas
  • Código más fácil de mantener: cada clase tiene una razón para cambiar.
  • Extensión sin modificación: nuevas funcionalidades no rompen código existente.
  • Testabilidad: interfaces + DIP permiten mocking.
  • Bajo acoplamiento: cambiar una implementación no afecta a quien la usa.

Ver ExpSingleResponsibility.java, ExpOpenClosed.java, ExpLiskovSubstitution.java, ExpInterfaceSegregation.java y ExpDependencyInversion.java para ejemplos ejecutables de cada principio SOLID.