Nos insights de código limpo de hoje trago algumas frases retiradas direto do livro, do capítulo Objetos e Estruturas de dados.
Objetos escondem seus dados por trás de abstrações e expõe funções que operam nesses dados. Estruturas de dados expõe seus dados e não tem funções significativas.
Código procedural (código que utiliza estrutura de dados) facilita a adição de novas funções sem mudar e estrutura de dados existente. Código orientado à objeto, por outro lado, facilita a adição de novas classes sem mudar as funções existentes.
Código procedural dificulta a adição de novas estruturas de dados, pois todas as funções precisam ser modificadas. Código orientação à objeto dificulta a adição de novas funções, pois todas as classes tem que mudar.
Em qualquer sistema complexo haverá momentos em que você quer adicionar novos tipos de dados em vez de novas funções. Para estes casos objetos e orientação à objeto são mais apropriados. Por outro lado, também haverão momentos que você quer adicionar novas funções, ao contrário de tipos de dados. Nestes casos código procedural e estruturas de dados serão mais apropriados.
Programadores maduros sabem que a ideia de que tudo é um objeto é um mito. Algumas vezes você realmente precisa de simples estruturas de dados com procedimentos operando sobre eles.
A Lei de Demétrio
Um módulo não deve saber sobre as entranhas do objeto que ele manipula.
Conclusão
Objetos expões comportamentos e escondem dados. Estruturas de dados expõe dados e não tem funções significativas.
@all from ~ Tio Bob