Los principios SOLID de la programación orientada a objetos

219

En el mundo del software es importante apegarnos a los principios ya definidos y utilizados como estándar a nivel mundial en orden de lograr mejor escalabilidad y mantenimiento de nuestro código. El día de hoy revisaremos el principio de la programación orientada a objetos: SOLID, que con su correcta implementación crearemos código de mucho mejor calidad, estable y reusable.

El acrónimo en inglés SOLID (o SOLIDO si lo tradujéramos en español), se refiere a una colección de principios para la programación orientada a objetos. Fue introducido por Michael Feathers y hace referencia a los principios definidos por Robert C. Martin y Barbara Liskov. A continuación podemos observar a qué principio se refiere cada una de las letras:

  • (SRP).– Single responsibility principle (Principio de responsabilidad única).
  • O (OCP).– Open/closed principle (Principio de abierto/cerrado).
  • L (LSP).– Liskov substitution principle (Principio de substitution de Liskov).
  • I (ISP).– Interface segregation principle (Principio de segregación de la interfaz).
  • D (DIP).– Dependency inversion principle (Principio de inversión de la dependencia).

Principio de responsabilidad única

Este principio se refiere a que cada módulo debe tener solo una razón para ser modificado. Es decir, debe tener solo una responsabilidad dentro de la aplicación. De lo contrario sufrirá a lo largo del tiempo muchas modificaciones para lograr el comportamiento esperado y hará nuestro código poco mantenible y poco reusable. Si identificas más de un propósito en una de tus clases, considera separarla dicha funcionalidad en otra clase. Nota que el principio no propone tener un solo método en cada clase, sino que todos sus métodos sirvan a un solo propósito.

Principio de abierto/cerrado

El principio de abierto/cerrado nos indica que debemos poder heredar el comportamiento de una entidad de software sin modificarlo. Es decir, los módulos deberán estar abiertas para su extensión pero cerradas para su modificación. Este principio es muy importante al definir nuestras clases, paquetes o bibliotecas.

Principio de sustitución de Liskov

Este principio indica que los objetos deben poder ser remplazados con instancias de sus subtipos sin alterar la definición del sistema. En otras palabras, los objetos derivados de una clase, deben poder ser remplazados por un objeto de la clase base sin modificar el comportamiento de la misma. La solución es diseñar por contrato (o interfaz), es decir definir precondiciones y postcondiciones que deban cumplirse en cada método. Nota que si violamos este principio estaremos inmediatamente violando el principio de abierto/cerrado.

Principio de segregación de la interfaz

Este principio indica que debemos hacer interfaces bien granularizadas con un solo rol en vez de una pocas interfaces generales que obligue a los clientes a implementar métodos que no necesitan. De este modo favoreceremos a la creación de software ortogonal, es decir, con alta cohesión y bajo acoplamiento.

Principio de inversión de dependencia

Este principio nos indica que nuestro código debe depender de abstracciones y nos da dos puntos principales:

  • Los módulos de alto nivel no deben depender de los modulos de bajo nivel. Ambos deben depender de abstracciones.
  • Las abstracciones no deben depender de los detalles, sino que los detalles deben depender de las abstracciones.

En otras palabras este principio nos indica que el código de los clientes no tiene que ser cambiado simplemente porque el objeto del que depende necesita ser remplazado por otro. Aplicando el principio de inversión de dependencias los módulos de alto nivel no se verán afectados por los cambios en los módulos de bajo nivel.


Como lo mencionamos al principio de este artículo, seguir principios y buenas prácticas en Software asegurará que nuestro código sea reusable, mantenible y escalable. El adecuado uso de los principios SOLID mejorará la calidad de nuestro código exponencialmente.

Para revisar ejemplos de los principios SOLID, implementados con Java, puedes consultar el repositorio de José Luis de la Cruz al respecto:

https://github.com/josdem/solid-workshop

Para conocer más sobre este tema, puedes consultar los siguientes artículos (en inglés):

https://williamdurand.fr/2013/07/30/from-stupid-to-solid-code/

https://hackernoon.com/solid-principles-made-easy-67b1246bcdf

https://hackernoon.com/solid-principles-simple-and-easy-explanation-f57d86c47a7f

Comments

comments