Nivel o grado de Interdependencia que tienen 2 unidades de software entre sí.
Unidades de software (clases, subtipos, métodos, módulos, funciones, bibliotecas, etc.).
Nota: Un sistema con bajo acoplamiento tiene alta cohesión y un sistema con baja cohesión tiene alto acoplamiento.
Un sistema con bajo acoplamiento indica un buen diseño de software
5 principios SOLID en ingles para desarrollar software de calidad
5 principios SOLID en español para desarrollar software de calidad
El orden de SOLID no es importante (5 principios igual de importantes)
Grado en que elementos diferentes de un sistema permanecen unidos para alcanzar un mejor resultado
Nota: La cohesión es la fuerza de relación entre las piezas de funcionalidad de una unidad de software dada.
Una clase debe tener una y solo una razón para cambiar.
Otra definición de SRP: Una clase solo debe tener una responsabilidad.
Nota: El principio de Responsabilidad Única es el más importante y fundamental de SOLID.
El código debe poder extender el compartimiento de una clase sin modificarla.
Otra definición de OCP: Las unidades de software (clases, módulos, funciones u otros) deberían ser abiertas para la extensión pero cerradas para la modificación
Las clases utilizadas deben estar abiertas para extenderse y cerradas para modificarse.
Nota: OCP se debe tener en cuenta al momento de desarrollar clases, librerías o frameworks. Así mismo, se aplicarán interfaces y abstracciones para su desarrollo.
Cualquier clase que sea hija de una clase padre debería poder usarse en lugar de su padre sin ningún comportamiento inesperado.
Otra definición de LSP: Si en un programa utilizamos cierta clase, deberíamos poder usar cualquiera de sus subclases sin interferir en la funcionalidad del programa.
Las clases derivadas deben poder sustituirse por sus clases base.
Nota: Se hace uso de la herencia que permite a una clase heredar características, atributos o métodos de una clase padre.
Ninguna clase debe implementar interfaces con métodos que no utilice.
Otra definición de ISP: Crear interfaces específicas según el tipo de cliente.
Se deben crear interfaces de acuerdo a los métodos que se utilicen.
Nota: La creación de interfaces nos permiten desacoplar las unidades del software.
Depende de abstracciones, no de clases concretas.
Nota: Una clase no debe depender de una llamada a la base de datos, ya sea que consulte a una base de datos en MongoDB, SQL u otra forma de guardar los datos.