En programación de software , SOLID es un acrónimo mnemotécnico de cinco principios de diseño destinados a hacer que los diseños orientados a objetos sean más comprensibles, flexibles y fáciles de mantener . Aunque los principios SOLID se aplican a cualquier diseño orientado a objetos, también pueden formar una filosofía central para metodologías como el desarrollo ágil o el desarrollo de software adaptativo . [1]
Principios
Principio de responsabilidad única
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] [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]
Principio de segregación de interfaz
El principio de segregación de interfaces ( ISP ) establece que "los clientes no deberían verse obligados a depender de interfaces que no utilizan". [6] [7]
Importancia
- Desacoplamiento: Reduce las dependencias entre clases, haciendo que el código sea más modular y mantenible.
- Flexibilidad: permite implementaciones de interfaces más específicas.
- Evita dependencias innecesarias: los clientes no tienen que depender de métodos que no utilizan.
Principio de inversión de dependencia
El principio de inversión de dependencia ( DIP ) establece que hay que depender de abstracciones, no de cosas concretas. [8] [7]
Importancia
- 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]
Véase también
- Reutilización de código
- GRASP (diseño orientado a objetos)
- Herencia (programación orientada a objetos)
- Lista de filosofías de desarrollo de software
Referencias
- ^ 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 ) - ^ ab Martin, Robert C. (2003). Desarrollo ágil de software: principios, patrones y prácticas. Prentice Hall. pág. 95. ISBN 978-0135974445.
- ^ "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. ISBN 978-0-13-449416-6.