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

"Practical Object-Oriented Design" Resenha do Livro - Emptor

Esta é uma revisão da segunda edição de “Practical Object-Oriented Design: An Agile Primer Using Ruby”, de Sandi Metz.

O design de software orientado a objetos (OO), ou seja, a ideia de modelar o software como “objetos” encapsulados com propriedades e código, tem sido a abordagem mais popular nas últimas décadas. No entanto, ela tem sido criticada nos últimos anos; “o futuro é funcional!”, afirmam seus críticos.

Afinal, quando uma base de código OO cresce, frequentemente leva muito tempo para realizar as tarefas. “Onde antes nos sentíamos produtivos, rápidos e felizes; agora nos sentimos frustrados, lentos e frustrados”, escreve Sandi. Mas talvez a fonte do problema não seja o paradigma (procedural, orientado a objetos, funcional, etc.), mas como ele é (mal) aplicado. Este livro o ajudará a evitar cair nesse caos.

Como programador Python, confesso que descartei este livro por muito tempo porque pensei que era “um livro sobre Ruby” (em minha defesa, está lá no título!), mas isso foi um grande erro. Embora use Ruby para os exemplos de código, você pode lê-lo como pseudocódigo, e é fácil traduzir os conceitos para o idioma de sua escolha.

Este é um livro sobre como aplicar o design orientado a objetos para organizar o software de forma produtiva hoje e permanecer assim no próximo mês e no próximo ano. Ele mostra como escrever código que lhe traga alegria. É prático em vez de acadêmico, mas também surpreendentemente atemporal, já que tão poucos livros técnicos o são. Honestamente, minha maior reclamação é que não é vendido em capa dura.

O livro foi escrito para ser acessível a iniciantes com alguma experiência em orientação a objetos, mas para programadores mais experientes, no mínimo, oferecerá novas coisas para pensar e novos pontos de vista a considerar, mesmo que você discorde no final de algumas de suas sugestões.

Visão Geral dos Capítulos

  • Capítulo 1 é o único com apenas teoria. Ele explica os porquês, quandos e porquês do design orientado a objetos, estabelecendo o tema do livro: Aplicativos fáceis de mudar são “um prazer de escrever e uma alegria de estender”. Aplicativos que resistem à mudança são o oposto.

  • Os demais capítulos explicam progressivamente o design orientado a objetos usando os princípios de design SOLID e padrões de design, cada um construindo sobre os conceitos e o código do anterior.

  • Capítulo 2 começa com o design de classes com uma única responsabilidade. Classes que fazem uma coisa isolam essa coisa do restante do seu aplicativo e permitem que ela mude.

  • Capítulo 3 lida com dependências em termos de quanto um objeto precisa saber sobre outro para enviar-lhe uma mensagem (ou seja, chamar um de seus métodos) e como reconhecer, remover ou reverter essas dependências.

  • Em seguida, consideramos o papel das interfaces e como elas devem expor “o que” um método faz em vez de “como” ele o faz. Um capítulo inteiro dedicado ao “duck typing” — se anda como um pato e grasna como um pato, apenas chame-o de pato — segue-o.

  • Capítulos 6 a 8 discutem como compartilhar comportamento com herança clássica, “módulos” (frequentemente chamados de “mixins” no mundo Python) ou composição; e fornecem diretrizes para reconhecer antipadrões e escolher uma técnica em vez de outra.

  • Finalmente, ele se encerra com um capítulo concentrado no design de testes, ilustrado usando código dos capítulos anteriores do livro.

A autora é a primeira a admitir que as ideias do livro não são suas, mas pertencem a toda a comunidade de design orientado a objetos; ela “é apenas uma tradutora”. Se for assim, ela faz um trabalho fantástico nisso. Com seu estilo de escrita claro e ótimas explicações, o livro foi um prazer de ler. Terminei o livro amando o design orientado a objetos como nunca antes.