Español

Principios SOLID en programación orientada a objetos


En este post hablaremos sobre los primeros 5 principios de diseño de la programación orientada a objetos S.O.L.I.D que significa:

  • S : Single-responsibility principle
  • O : Open-closed principle
  • L : Liskov substitution principle
  • I : Interface segregation principle
  • D : Dependency inversion principle

Single-responsibility principle

Este principio se puede resumir en que Una clase debe tener una sola responsabilidad al hacer esto tendremos que:

  • Crear siempre clases pequeñas
  • Si una clase es muy grande dividirla en clases más pequeñas
  • No debe existir más de una razón para modificar una clase

Como vemos este principio es violado constantemente por código legado ya que muchas veces tienen clases con un sólo método y cientos de líneas de código, lo cual las hace difíciles de mantener, escalar y probar.

Open-closed principle

Este principio se puede resumir en que “Una clase debe estar abierta a extensiones, pero cerrada a modificaciones” al hacer esto tendremos que:

  • Estar abiertos a agregar funcionalidad a nuestras clases
  • Evitar modificaciones en ellas
  • Utilizar atributos privados y crear getters y setters pero solo cuando se necesiten
  • Utilizar clases abstractas con la funcionalidad común que no va a cambiar y crear múltiples implementaciones con la funcionalidad específica

Con esto nos aseguramos de tener métodos estables, confiables, con posibilidad de crecer y que al no ser modificados constantemente no van a impactar a otros componentes.

Liskov substitution principle

Este principio dice que “Las funciones que usan referencias a las clases base (padres) deben ser capaces de utilizar los objetos de sus clases hijas sin necesidad de saber que existen” al hacer esto tendremos que:

  • Al utilizar herencia, asegurarnos que se cubre la condición IS A (Es un)
  • Perro es un Animal, entonces perro puede heredar de animal
  • Libro no es un Cuaderno entonces aunque sean similares Libro no hereda de Cuaderno
  • En caso de que no se cumpla la condición IS A validar si se puede usar HAS A para evitar usar herencia en lugar de composición

Al respetar el principio de IS A podremos utilizar referencias de clases base apuntando a objetos de sus clases hijas sin necesidad de conocer quienes son.

Interface segregation principle

Este principio dice que “Un cliente nunca debe ser forzado a implementar una interfaz que no utiliza o no debe ser forzado a depender de métodos que el no utiliza” al hacer esto tendremos que:

  • Crear interfaces específicas
  • Preferir muchas interfaces específicas pequeñas a una interfaz general
  • Minimizar la dependencia entre los componentes

Al crear interfaces específicas evitamos interfaces generales que obligan a los clientes a implementar métodos que ellos no necesitan.

Dependency inversion principle

Este principio dice que “Las entidades deben depender de abstracciones y no de implementaciones, un módulo de alto nivel no debe depender de uno de bajo nivel” al hacer esto tenemos que:

  • Las abstracciones no deben depender de detalles específicos
  • Detalles específicos no deben depender en abstracciones
  • Objetos de alto nivel y de bajo nivel deben depender de la misma abstracción

Siguiendo este principio nos aseguraremos que nuestros componentes son fácilmente escalables sin necesidad de impactar a componentes que no deberían.

Conclusión

Al seguir los principios anteriores nos aseguraremos que nuestro código sigue estándares de calidad que permitirán que sea fácil de probar, mantener, escalable y re utilizable.

Para estar al pendiente sobre nuestro contenido nuevo síguenos en nuestras redes sociales  https://www.facebook.com/devs4j/ y https://twitter.com/devs4j

Autor: Alejandro Agapito Bautista
Twitter: @raidentrance
Contacto:raidentrance@gmail.com

Anuncios

Categorías:Español

Tagged as: , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s