Coffee bytes

Blog de desarrollo web con Python y Javascript

Patrones de diseño en Python, reseña de Practical Python Design Patterns

El domingo, 31 de mayo de 2020

por Eduardo Zepeda

Tiempo de lectura: 3 minutos

Hola, hoy te traigo una reseña del libro de Practical Python Design Patterns de Wessel Badenhorst. Este es un libro de patrones de diseño para Python, bastante sencillo de entender y con ejemplos hechos en sencillo y legible código Python. Para hablar un poco del contenido del libro voy a explicar levemente lo que es un patrón de diseño.

¿Qué son patrones de diseño?

Cuando queremos desplazarnos de un lugar a otro por cortas distancias utilizamos un vehículo terrestre, estos generalmente tienen 3 elementos: ruedas, una superficie donde colocaremos el objeto o persona a transportar y un medio que genere o transfiera la energía necesaria para el movimiento. Las ruedas generalmente van en contacto con el piso y el método de propulsión está unido a las ruedas para hacerlas girar y permitir el movimiento. Esta unión de objetos es un patrón de diseño. Cuando una persona quiere crear un vehículo que cumpla la función de transportar un objeto por tierra generalmente pensará en estos elementos y trabajará sobre esos elementos para modificarlos y crear algo diferente o más sofisticado.

Patrones de diseño en Software

En el software los patrones de diseño son iguales, son el acomodo y las relaciones específicas de objetos, métodos y atributos que nos permiten solucionar un problema. ¿Cómo que problemas? Prácticamente cualquier problema que se presente con demasiada frecuencia para que se llegue a una solución estandarizada, por ejemplo: la creación de enemigos con diferentes características en un videojuego MMORPG, asegurarse de que solo haya una instancia de una clase ejecutándose, adaptar una API complicada e imposible de modificar a una más sencilla y fácil de entender o separar la parte que maneja la base de datos, la que decide la lógica y la que muestra el contenido HTML de una página web. ¿Te suena este último a algo? Sí, el MVC que usan muchos frameworks web es un patrón de diseño.

En el caso del software los patrones de diseño vendrían a ser un conjunto de objetos que se relacionan entre ellos por medio de métodos y atributos de cierta manera. Los patrones de diseño facilitan que el desacoplamiento del código, lo que vuelve más sencillo agregar o remover funciones y también nos dan la seguridad de que son soluciones que ya han sido probadas una y otra vez a lo largo de los años.

Hay numerosos patrones en existencia como problemas a resolver, así mismo los patrones pueden combinarse entre sí en sistemas complejos. Sin embargo hay ciertos patrones bastante populares que son los que han sido recopilados para ponerse en la mayoría de los libros que tratan este tema.

Ahora sí, la reseña

Practical Python Design Patterns nos describe varios patrones de diseño en código Python. El libro no lleva una introducción al lenguaje, el autor da por hecho que sabes Python, sobre todo el manejo de clases, herencia y métodos especiales (sí los que tienen los dos guiones al principio y al final. Por ejem: __getattr__, __init__, __setattr__, etc).

Cada capítulo nos presenta un problema a resolver y nos va mostrando, paso por paso, el desarrollo que nos lleva al patrón requerido para solucionarlo. Los ejemplos son simples y prácticos, aplicados a situaciones bastante cotidianas como videojuegos MMORPG, refrigeradores inteligentes, sistemas de puntos de ventas, entre otros. Al final de cada capítulo el autor propone unos cuantos ejercicios para poner en práctica cada patrón.

El libro cubre los siguientes patrones de diseño:

  • Singleton
  • Prototype
  • Factory
  • Builder
  • Adapter
  • Decorador
  • Facade
  • Proxy
  • Chain of responsability
  • Command
  • Interpreter
  • Iterator
  • Observer
  • State
  • Strategy
  • Template method
  • Visitor
  • MVC
  • Publish-suscribe

Creo que los patrones de diseño son un tema imperdible que marca mucho la diferencia a la hora de programar, sin embargo los ejemplos de patrones que aquí encontrarás, son exactamente los mismos que puedes encontrar en cualquier otro libro que trate el tema. Por otro lado, el plus que ofrece este libro es que los ejemplos están en Python, haciéndolos muy sencillos de comprender en lugar de otros libros de patrones de diseño escritos para C++ o Java.

Conocimientos previos recomendados: Python
Recomendado para leerlo: 9/10
Idiomas: Inglés

Entra en este enlace para ver todas las reseñas de libros que tengo disponibles.

¿Te sirvió el contenido?

Recibe más contenido gratuito y en español como este en tu correo electrónico. Suscríbete, te toma unos segundos y puedes cancelar cuando quieras

* Campo obligatorio