New website design, same trusted platform.
Image from "Practical Object-Oriented Design" Book Review - Emptor
👨‍💼 By Emptor

"Reseña del libro 'Diseño Práctico Orientado a Objetos' - Emptor"

Esta es una reseña de la segunda edición de “Diseño Práctico Orientado a Objetos: Un Iniciador Ágil Usando Ruby”, de Sandi Metz.

El diseño de software orientado a objetos (OO), que significa la idea de modelar el software como “objetos” encapsulados con propiedades y código, ha sido el enfoque más popular durante las últimas décadas. Sin embargo, ha recibido una mala reputación en los últimos años; “¡el futuro es funcional!” afirman sus detractores.

Después de todo, cuando una base de código OO crece, a menudo lleva demasiado tiempo hacer las cosas. “Donde una vez nos sentimos productivos, rápidos y felices; ahora nos sentimos frustrados, lentos y frustrados”, escribe Sandi. Pero tal vez la fuente del problema no es el paradigma (procedural, orientado a objetos, funcional, etc.) sino cómo se (mal)aplica. Este libro te ayudará a evitar caer en ese caos.

Como programador de Python, confieso que descarté este libro durante demasiado tiempo porque pensé que era “un libro de Ruby” (¡en mi defensa, está justo ahí en el título!), pero eso fue un gran error. Aunque usa Ruby para los ejemplos de código, puedes leerlo como pseudocódigo, y es sencillo traducir los conceptos al idioma de tu elección.

Este es un libro sobre cómo aplicar el diseño orientado a objetos para organizar el software de manera que sea productivo hoy y lo siga siendo el próximo mes y el próximo año. Muestra cómo escribir código que te traiga alegría. Es práctico en lugar de académico, pero también sorprendentemente atemporal, ya que son tan pocos los libros técnicos que lo son. Honestamente, mi mayor queja es que no se vende como tapa dura.

El libro se escribió para ser accesible a principiantes con algo de experiencia en programación orientada a objetos, pero para los programadores más experimentados, como mínimo ofrecerá nuevas cosas en las que pensar y nuevos puntos de vista que considerar, incluso si al final no están de acuerdo con algunas de sus sugerencias.

Resumen de los Capítulos

  • Capítulo 1 es el único con solo teoría. Explica los porqués, cuándos y paraqués del diseño orientado a objetos, estableciendo el tema del libro: Las aplicaciones que son fáciles de cambiar son “un placer de escribir y una alegría de extender”. Las aplicaciones que se resisten al cambio son lo opuesto.

  • El resto de los capítulos explican progresivamente el diseño orientado a objetos utilizando los principios de diseño SOLID y los patrones de diseño, cada uno construyendo sobre los conceptos y el código del anterior.

  • Capítulo 2 comienza con el diseño de clases con una sola responsabilidad. Las clases que hacen una sola cosa aíslan esa cosa del resto de tu aplicación y le permiten cambiar.

  • Capítulo 3 trata sobre las dependencias en términos de cuánto necesita saber un objeto sobre otro para enviarle un mensaje (es decir, llamar a uno de sus métodos), y cómo reconocer, eliminar o invertir esas dependencias.

  • A continuación, consideramos el papel de las interfaces y cómo deberían exponer “qué” hace un método en lugar de “cómo” lo hace. Le sigue un capítulo completo dedicado al “duck typing” — si camina como un pato y grazna como un pato, simplemente llámalo pato.

  • Capítulos 6 a 8 analizan cómo compartir comportamiento con herencia clásica, “módulos” (a menudo llamados “mixins” en el mundo de Python) o composición; y proporcionan pautas para reconocer antipatrones y elegir una técnica sobre otra.

  • Finalmente, cierra con un capítulo concentrado en el diseño de pruebas, ilustrado usando código de los capítulos anteriores del libro.

La autora es la primera en admitir que las ideas del libro no son suyas, sino que pertenecen a toda la comunidad de diseño orientado a objetos; ella “es simplemente una traductora”. Si es así, hace un trabajo fantástico. Con su estilo de escritura claro y sus excelentes explicaciones, el libro fue un placer leer. Terminé el libro amando el diseño orientado a objetos como nunca antes.