3 ago 2014

SOLID: El desarrollo de Software no es juego de Jenga

Dentro de nuestro afán, tesonero y, ¿por que no?, ambicioso de mejorar lo que hacemos, lo que nos gusta hacer, debemos buscar constantemente herramientas, formas, maneras, guías que nos muestren caminos nuevos; incluso, que nos muestren la formas correctas de denominar los caminos que ya transitamos pero que, quizás, no sabemos precisar adecuadamente. Fue de esta manera que de pronto me hallé frente a los principios SOLID.

SOLID, es un acrónimo introducido por Robert Cecil Martin (conocido como “uncle Bob” firmante del Agile Manifiesto) refiriéndose a cinco principios básicos del Diseño Orientado a Objetos (OOD por sus siglas en inglés). Su objetivo es que, al aplicarse combinada y adecuadamente, estos cinco principios permitan la creación de sistemas robustos, de fácil mantenimiento y extensibles. Proveen una guía para que los desarrolladores eviten problemas en su código, refactorizando el mismo, y permitiendo una mejor integración dentro desarrollos ágiles de software.

De una manera muy básica paso a definir el significado de cada letra dentro del acrónimo.

Principios SOLID:

SRP -Single Resposability Principle-:
Una clase debe ser responsable de una única funcionalidad. “Divide y vencerás” de manera que la funcionalidad debe estar divida en las más pequeñas responsabilidades que podamos implementar.

Open/Close Principle:
Las entidades del software deben ser abiertas a la extensibilidad pero cerradas a las modificaciones.

LSP -Liskov Substitution Principle-:
Objetos deben poder ser reemplazables con instancias de su SubTipo sin afectar la exactitud del programa. Cada clase que hereda de otra puede usarse como su padre sin necesidad de conocer las diferencias entre ellas.

ISP -Interface Segregation Principle-:
Muchas interfaces específicas son mejores que una grande de propósito general. Esto por cuando necesitemos clases que implemente interfaces, lo deseable es que el  propósito de los mismos sea claro, definido y acotado, lo cual no es posible con mega interfaces, si no, con pequeñas interfaces.

DIP -Dependecy Inversion Principle-:
Se debe depender de abstracciones no de concreciones. Es el principio básico tras la inyección de dependencias en los desarrollados "modernos".

Un muy buen ejemplo del uso de los principios SOLID  se encuentra en el post en inclés S.O.L.I.D: The First 5 Principles of Object Oriented Design

La idea es que la utilización de estos principios se interioricen dentro de nuestra cultura de desarrollo de software, formando parte de nuestra filosofía al enfrentar nuevas implementaciones. Muy especialmente puede ir acompañado de una estrategia de desarrollo dirigido por pruebas (TDD Test Driven Development).