SOLID son 5 principios de diseño orientado a objetos que ayudan a escribir código mantenible y fácil de extender:
S – Responsabilidad Única: Una clase debe tener una sola responsabilidad, un solo motivo para cambiar. Ejemplo: separa la lógica de guardar una factura en base de datos de la lógica de enviarla por correo; son responsabilidades distintas.
O – Abierto/Cerrado: El código debe estar abierto a extensión, pero cerrado a modificación. Ejemplo: para agregar un nuevo medio de pago, creas una clase nueva que implemente una interfaz PaymentMethod, sin tocar el código que ya funciona.
L – Sustitución de Liskov: Una subclase debe poder reemplazar a su clase padre sin romper el comportamiento del programa. Ejemplo: si Ave tiene el método volar(), no deberías heredar Pinguino de Ave, porque un pingüino no vuela.
I – Segregación de Interfaces: Es mejor tener varias interfaces pequeñas y específicas que una sola interfaz grande. Ejemplo: separa una interfaz Trabajador en Comestible y Programable, para que una clase Robot no tenga que implementar comer().
D – Inversión de Dependencias: Los módulos de alto nivel no deben depender de módulos de bajo nivel, sino de abstracciones. Ejemplo: un servicio de notificaciones debe depender de una interfaz NotificationSender, no directamente de una clase EmailSender.