El principio de responsabilidad única ( PRU ) establece que "nunca debería haber más de una razón para que una clase cambie". [2] En otras palabras, cada clase debería tener una sola responsabilidad. [3]
Importancia
Mantenibilidad: cuando las clases tienen una responsabilidad única y bien definida, son más fáciles de entender y modificar.
Capacidad de prueba: es más fácil escribir pruebas unitarias para clases con un solo enfoque.
Flexibilidad: Los cambios en una responsabilidad no afectan a partes no relacionadas del sistema. [3]
Principio abierto-cerrado
El principio abierto-cerrado ( OCP ) establece que "las entidades de software... deben estar abiertas a la extensión, pero cerradas a la modificación". [4]
Importancia
Extensibilidad: Se pueden agregar nuevas funciones sin modificar el código existente.
Estabilidad: Reduce el riesgo de introducir errores al realizar cambios.
Flexibilidad: Se adapta más fácilmente a los requisitos cambiantes.
Principio de sustitución de Liskov
El principio de sustitución de Liskov ( LSP ) establece que "las funciones que utilizan punteros o referencias a clases base deben poder utilizar objetos de clases derivadas sin saberlo". [5] Véase también diseño por contrato . [5]
Importancia
Polimorfismo: permite el uso de comportamiento polimórfico, haciendo que el código sea más flexible y reutilizable.
Confiabilidad: garantiza que las subclases se adhieran al contrato definido por la superclase.
Predictibilidad: garantiza que reemplazar un objeto de superclase con un objeto de subclase no romperá el programa. [5]
Acoplamiento flexible: reduce las dependencias entre módulos, lo que hace que el código sea más flexible y más fácil de probar.
Flexibilidad: Permite realizar cambios en las implementaciones sin afectar a los clientes.
Mantenibilidad: hace que el código sea más fácil de entender y modificar. [8] [7]
Origen
El ingeniero de software e instructor, Robert C. Martin , [9] [10] [1] presentó la colección de principios en su artículo de 2000 Design Principles and Design Patterns sobre la corrupción del software . [10] [7] : 2–3 El acrónimo SOLID fue acuñado alrededor de 2004 por Michael Feathers. [11]
^ ab Metz, Sandi (mayo de 2009). "Diseño orientado a objetos SOLID". YouTube . Archivado desde el original el 2021-12-21 . Consultado el 2019-08-13 .Charla dada en la Conferencia Gotham Ruby de 2009 .
^ "Principio de responsabilidad única" (PDF) . objectmentor.com . Archivado desde el original el 2 de febrero de 2015.{{cite web}}: CS1 maint: URL no apta ( enlace )
^ "Principio abierto/cerrado" (PDF) . objectmentor.com . Archivado desde el original el 5 de septiembre de 2015.{{cite web}}: CS1 maint: URL no apta ( enlace )
^ abc "Principio de sustitución de Liskov" (PDF) . objectmentor.com . Archivado desde el original el 5 de septiembre de 2015.{{cite web}}: CS1 maint: URL no apta ( enlace )
^ "Principio de segregación de interfaz" (PDF) . objectmentor.com . 1996. Archivado desde el original el 5 de septiembre de 2015.{{cite web}}: CS1 maint: URL no apta ( enlace )
^ abcd Martin, Robert C. (2000). "Principios de diseño y patrones de diseño" (PDF) . objectmentor.com . Archivado desde el original el 6 de septiembre de 2015.{{cite web}}: CS1 maint: URL no apta ( enlace )
^ ab "Principio de inversión de dependencia" (PDF) . objectmentor.com . Archivado desde el original el 5 de septiembre de 2015.{{cite web}}: CS1 maint: URL no apta ( enlace )
^ Martin, Robert C. "Principios de OOD". ButUncleBob.com . Archivado desde el original el 10 de septiembre de 2014. Consultado el 17 de julio de 2014 .. (Nótese la referencia a "los primeros cinco principios", aunque el acrónimo no se utiliza en este artículo). Se remonta al menos a 2003.
^ ab Martin, Robert C. (13 de febrero de 2009). "Getting a SOLID start". Uncle Bob Consulting LLC (Google Sites) . Archivado desde el original el 17 de septiembre de 2013. Consultado el 19 de agosto de 2013 .
^ Martin, Robert (2018). Arquitectura limpia: guía para el artesano sobre la estructura y el diseño de software. Pearson. pág. 58. ISBN978-0-13-449416-6.