Fundamentos de programación que te ayudarán a crear mejor código
SOLID es un compendio de principios que se ha extensido como la pólvora en las empresas dedicadas a la construcción de software. Ahora casi todos los proyectos que utilizan metodologías actuales de programación basan su código en estos principios. Los principios de SOLID son aplicables a cualquier tipo de lenguaje de programación para la construcción de proyectos software, pero están más dirigidos a la utilización en el paradigma de programación orientada a objetos. Están ampliamente relacionados con la reutilización de código y el desarrollo de software agil.
El creador de este término es Robert Cecil Martin, coautor del manifiesto de la metodología agil y no es más que una regla mnemotécnica para recordar los siguientes principios, basados en las siglas del acrónimo:
S (Single Responsability Principle): Principio de responsabilidad única. Se refiere a que un proyecto de software, sobre todo aqueyos que se basan en la orientación a objetos, debe primar el que cada clase sea únicamente para lo que realmente define su contexto. Esto significa que la existencia de una clase debe ser únicamente por la funcionalidad que atesora y esta funcionalidad tiene que estar vinculada con su contexto.
O (Open - Closed): Aunque la terminología utilizada no es muy orientativa, este principio va enfocado a la utilización de patrones de diseño y herencia. Se refiere a la utilización de herencia, refactorización y reutilización del código. Nuestro código tiene que ser abierto y a la misma vez cerrado (no tenemos que tocar cada pieza del software para hacer cambios). Por ejemplo, se pueden utilizar clases abstractas que realicen ciertas funcionalidades y sean heredadas por otras clases. Una clase abstracta no se puede instanciar, otras clases tienen que extender su funcionalidad. En lenguajes como PHP no se permite la herencia múltiple por lo que se introdujo la sentencia “trait” para elaborar funcionalidades o anotaciones que utilizar en clases que estar extendiendo las funcionalidades de otra clase abstracta.
L (Liskov Substitution Principle): Está relacionado con el tipado de variables. Se aconseja utilizar tipado de variables en los proyectos en los que trabajes. El tipado de variables es obligatorio en lenguajes como Java o .Net. Otros lenguajes no tipados como PHP introducen en sus últimas versiones también la posibilidad de tipar las variables permitiendo que el intérprete del código realice labores de mejora de rendimiento gracias a la reserva de memoria a la hora de ejecutar el código. Además, tipar las variables es una buena práctica para que en lenguajes no tipados a la hora de ejecutar el código los errores aparezcan a la hora de invocar métodos, no dentro del código de los métodos en sí.
I (Interface Segregation Principle): Va enfocado a la utilización de comportamientos heredados, es decir, la construcción de software basándose en clases abstractas con herencia simple, múltiple e interfaces.
D (Dependency Inversion Perinciple): Define que el código de un programa debe estar vinculado con la herencia y no con las implementaciones.