lunes, 21 de octubre de 2013

Introducción a los principios de diseño

¿Que son los principios de diseño de software?

Este post pertenece a la serie Principios SOLID.

Los principios de diseño de software son una serie de directrices que nos ayudan a crear buenos diseños de software.
Según Robert Martin hay cuatro síntomas que determinan un mal diseño y que debemos evitar:
  1. Rigidez. Rigidez es la tendencia del software a ser cambiado incluso de forma trivial. Cada cambio provoca a su vez una cadena de cambios en módulos relacionados, y lo que en principio es un pequeño cambio se convierte en una maratón de cambios interminable. Cuando el software se comporta de esta manera los gestores del proyecto suelen ser cada vez más reticentes a realizar cambios que no sean críticos, ya que no se tiene certeza de cuando van a terminar. Lo que empieza como un error de diseño, acaba como una política de empresa de "rigidez oficial".
  2. Fragilidad. La fragilidad está relacionada con la rigidez y es la tendencia del software a fallar cuando se realizan cambios. A veces los fallos se producen en módulos que no están relacionados conceptualmente con el módulo donde se han realizado los cambios. Según aumenta la fragilidad aumenta también la probabilidad de rotura al realizar cambios. En un plano más subjetivo tanto en los responsables del proyecto como en los clientes empieza a aparecer la desconfianza y se pierde la credibilidad de los desarrolladores.
  3. Inmovilidad. La inmovilidad es la imposibilidad de reutilizar piezas de software de un proyecto en otro o entre áreas del mismo proyecto. Es frecuente que un desarrollador descubra que necesita un módulo muy parecido a otro que ya ha escrito otro desarrollador. Sin embargo, también es frecuente que descubra que dicho módulo tiene muchas relaciones de las que depende. Después de mucho trabajo el desarrollador descubre que el esfuerzo y el riesgo que conlleva separar ese módulo de sus dependencias es mayor del que está dispuesto a asumir, y entonces simplemente reescribe el módulo en lugar de reutilizarlo.
  4. Viscosidad. Cuando un desarrollador se enfrenta a un cambio, normalmente encontramos varios métodos para afrontarlo. Algunas de esos métodos respetan el diseño y otros no. Cuando los métodos que respetan el diseño son más difíciles de emplear que los que no lo respetan, se dice que la viscosidad del diseño es alta.
Estos cuatro síntomas son signos que revelan un diseño pobre, y cualquier aplicación donde aparecen irá sufriendo una degradación cada vez mayor.

Principios de diseño SOLID 

Los principios SOLID para diseños orientados a objetos es una guía de cinco principios que fueron enunciados por Robert Martin en el año 2000. Estos principios se aplican todos juntos con la finalidad de conseguir que el código de software sea más legible, más facilmente mantenible y extensible en el tiempo.

El acrónimo SOLID responde a las iniciales del nombre en inglés de estos cinco principios.

  • S. Principio de responsabilidad única (Single Responsibility Principle). "Un componente de software sólo debe tener una responsabilidad  o lo que es lo mismo un componente de software solo debería tener un motivo para cambiar."
  • O. Principio de Abierto/Cerrado (Open/Close Principle). "Los componentes de software deben estar abiertos a la extensión pero cerrados a las modificaciones."
  • L. Principio de sustitución de Liskov (Liskov's Substitution Principle). "Las subclases deben ser sustituibles por su clase base."
  • I. Principio de segregación de interfaces (Interface Segregation Principle). "Muchas interfaces específicas del cliente son mejores que una interfaz de uso general."
  • D. Principio de inversión de dependencias (Dependency Inversion Principle). "Depender de abstracciones. No depender de concreciones."

En próximos post veremos en profundidad cada uno de estos principios con ejemplos.

Además también echaremos un vistazo a otros principios de diseño que por algún motivo suelen asociarse a metodologías de eXtreme Programming aunque para mí son principios de diseño de lo más básico que deberíamos tener en consideración en cualquier desarrollo. Estos principios son:

  • DRY. Don`t Repeat Yourself (No te repitas). "Cada pieza de conocimiento debe tener una representación única, inequívoca y autorizada dentro de un sistema."
  • YAGNI. You Aren’t Gonna Need It (No lo vas a necesitar). "Siempre implementa las cosas cuando las necesites, no cuando preveas que las vas a necesitar."
  • KISS. Keep It Simple, Stupid (Mantenlo simple, estúpido). "Los sistemas más eficaces son los que mantienen la simplicidad, evitando la complejidad innecesaria."

5 comentarios:

  1. Hola buen post, me gustaría o una recomendación enlazaras a los otros post asi seria mas fácil ir leyendo, de todas formas muchas gracias por compartir esta informacion

    ResponderEliminar
  2. ¡Crisltree buena idea gracias!.
    Creo que unos links al post siguiente y al anterior podría ayudar.
    ¿Te refieres a eso?

    ResponderEliminar
  3. Sugerencia para todo programador como lo enuncia el propietario del Blog:

    Por favor leer al menos los 10 primeros capitulos:
    Clean Code - Robert C. Martin.

    ResponderEliminar
    Respuestas
    1. Totalmente de acuerdo.
      Los 17 capítulos, los 3 apéndices, el epílogo. Sin ninguna duda ¡Leed Clean Code!

      Eliminar