66

Buenas prácticas en desarrollo de software: POO, SOLID y Patrones de Diseño

212939Puntos

hace 5 años

Las buenas prácticas en programación son costumbres y decisiones que buscan mejorar la agilidad, legibilidad, mantenimiento o escalabilidad de nuestros proyectos. No son reglas absolutas, pero al entender el contexto por el que fueron creadas pueden ayudarnos a trabajar mejor en equipo y no reinventar la rueda.

Existen buenas practicas para CSS, testing, incluso libros muy populares como clean code para software en general.

En esta lectura nos concentraremos en la Programación Orientada a Objetos, los principios SOLID y los Patrones de Diseño.

Paradigmas de Programación: Programación Orientada a Objetos

Los Paradigmas de Programación son teoría con la que obtenemos un modelo para resolver diferentes problemas.

Existen diferentes paradigmas como la Programación Orientada a Objetos (POO), Programación Funcional o Programación Estructurada. Cada uno tiene una forma diferente de encontrar soluciones, incluso resolviendo problemas de otros paradigmas anteriores.

La Programación Orientada a Objetos nos “orienta” a identificar y analizar cada elemento de nuestros sistemas como objetos individuales que tienen atributos y comportamientos. Además, es posible que diferentes objetos compartan algunas propiedades o características, lo que significa que reutilizar código y evitar repetidos será muy importante para que nuestro código sea escalable y fácil de mantener.

Los 4 pilares de la POO son:

  • Abstracción: vamos a analizar todos nuestros objetos para abstraer su composición y generar diferentes clases/moldes/modelos que nos permitan crear todos los objetos de nuestro sistema.
  • Encapsulamiento: debemos definir/limitar el nivel de acceso que tienen las propiedades y métodos de nuestros objetos, ya que no todas las partes de nuestro programa deben poder leer y/o modificar atributos especiales en nuestras clases.
  • Herencia: consiste en crear clases (subclases) a partir de otras clases (superclases) que implementan diferentes comportamientos que podemos reutilizar en diferentes objetos del sistema y evitar código repetido.
  • Polimorfismo: consiste en sobrescribir algunos métodos de la clase de la cual heredan nuestras subclases para asignar comportamientos diferentes y funcionar correctamente a pesar de recibir argumentos diferentes (más flexibles) que los que definimos en sus clases padre.

💡 Recuerda que todo esto lo estudiamos a profundidad en el Curso de Programación Orientada a Objetos: POO.

SOLID

Montaña

Más que reglas que debemos seguir estrictamente, los 5 principios SOLID son una guía de buenas prácticas que nos ayudarán a construir código mucho más legible, mantenible y escalable.

El verdadero valor de SOLID está en entender los patrones y herramientas que nos proporciona para casos muy generales. Estos principios serán muy útiles, lo prometo. Entre más los estudiemos y practiquemos, mejor entenderemos cuánto y cuándo vale la pena seguirlos para resolver problemas sin crear otros 50.

Los 5 principios SOLID son:

  • Single Responsibility: cada una de nuestras clases debe tener una única responsabilidad (easy peasy), ya que podremos reutilizar su código cuando necesitemos implementar la misma funcionalidad en algún otro lugar.
  • Open-Close: nuestras clases deben estar abiertas a extensión, pero cerradas a su modificación (wat). Por ejemplo: el código de nuestras clases para usuarios genéricos no debe tocarse si queremos añadir una nueva funcionalidad a algún usuario especial. En vez de modificar la clase usuario para soportar las nuevas características podemos crear una nueva clase (SuperUser) que herede de User y añada sus nuevas características.
  • Liskov Substitution: al trabajar con herencia debemos asegurarnos de que las subclases (las clases que heredan o extienden de otras clases) sigan implementando los métodos que la superclase definió. Si User tiene el método walk, SuperUser también debe tenerlo, así su comportamiento cambie un poco.
  • Interface Segregation: NO debemos forzar nuestras clases a implementar atributos o comportamientos que no necesitan.
  • Dependency Inversion: vamos a desacoplar nuestras clases, no deben tener dependencias/referencias a otras clases de forma muy estricta. Hablaremos a detalle sobre estos últimos 2 principios un poco más adelante, ya que son cruciales en la inyección de dependencias.

💡 El principio de Dependency Inversion es muy útil para implementar arquitecturas limpias en nuestra aplicación y patrones de diseño como la inyección de dependencias.

Puedes profundizar muchísimo más sobre estos 5 principios en las siguientes clases y lecturas:

Patrones de Diseño

Los Patrones de Diseño nos ayudan a resolver problemas generales que nos encontramos al tratar de seguir las reglas que implementan los lenguajes que siguen algún paradigma de programación.

Podemos entender los patrones de diseño como “paradigmas de programación” que nos ayudan a cumplir con los “verdaderos paradigmas de programación” de la mejor forma posible, incluso cuando parece que se nos está complicando un poco seguirlos.

Por ejemplo: la programación orientada a objetos nos pide seguir las reglas del encapsulamiento y la abstracción al mismo tiempo, existen patrones de diseño que nos ayudan a cumplir con estas reglas, seguir las buenas prácticas de este paradigma y encontrar las mejores soluciones a los problemas que nos encontramos al programar.

💡 Aquí puedes aprender a profundidad sobre los Patrones de Diseño de Software.

Conclusiones

Aprender a trabajar con programación orientada a objetos, los principios SOLID y patrones de diseño es fundamental para escribir código de calidad en equipos de desarrollo de software.

Nuestra recomendación final es que aprendas sobre todas estas buenas prácticas sin importar cuál sea tu lenguaje o tecnología favorita.

¡#NuncaParesDeAprender! 🤓💚

Juan
Juan
juandc

212939Puntos

hace 5 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
7
36044Puntos

Este tema desde hace tiempo me ha parecido interesantísimo, hay un vídeo (un poco viejo pero que ayuda) que me mostraron en la Universidad que me ayudó mucho en entender todo este tópico, se los comparto y espero y les sirva. 👍

https://www.youtube.com/watch?v=_OGGsf1ZXMs

3
212939Puntos
5 años

Uff… ¡Genial!
Gracias por las referencias, en la segunda parte también hay más… 😉 👌🙌

3
8256Puntos

muchas gracias por la referencia

2

Muy buena información. Interesante tema. Cuando ves el video, te emocionas (todo lo que puedes crear, y desarrollar). Realizas una “reflexión”, y te percatas que, te falta estudiar más.