Lógica e Dados em Harmonia

Outro princípio corolário ao das consequências locais é manter em harmonia lógica e dados.

Devem-se colocar a lógica e os dados sobre os quais ela opera próximos um do outro, se possível no mesmo método, ou no mesmo objeto, ou ao menos no mesmo pacote.

Para fazer uma mudança, é provável que se tenha de alterar a lógica e os dados ao mesmo tempo.

Se eles estão em harmonia, as consequências dessa mudança serão locais.

No início, nem sempre é óbvio onde devem ficar a lógica e os dados para se satisfazer esse princípio.

Pode-se estar escrevendo código em A e perceber que são necessários dados que estão em B.

Só depois de o código estar funcionando é que se nota que ele está muito distante dos dados.

Assim, é preciso optar: mover o código para próximo dos dados, mover os dados para próximo do código, colocá-los juntos em um objeto auxiliar, ou entender que, naquele momento, não possível pensar em como juntá-los de forma que se comuniquem eficazmente.

Simetria

Simetria é mais código que teoria. Basicamente seria algo como: ao invés de colocar o código count++ entre os métodos init() e output(), coloque um novo método que terá o conunt++ como conteúdo, esse novo método deve ter um nome que auxilie um fácil entendimento do código, processCount(), por exemplo. Então teremos: init(); processCount(); output().

Outro princípio que se usa o tempo todo é a simetria. Programas são cheios de simetria.

Um método add() é acompanhado de um método remove(). Em um grupo de métodos, todos têm os mesmos parâmetros.

Todos os campos de um objeto têm o mesmo tempo de vida. Identificar e expressar claramente a simetria torna o código mais fácil de ler.

Se os leitores puderem entender uma metade da simetria, eles poderão entender rapidamente a outra.

Costuma-se discutir simetria em termos espaciais: bilateral, rotacional e assim por diante.

A simetria em programas raramente é gráfica, ela é conceitual. No código, ela está onde a mesma ideia é expressada da mesma forma em todos os lugares em que aparece no código.

Eis um exemplo de código em que falta simetria:

void process(){

            input();

            count++;

            output();

}

A segunda declaração é mais concreta que as duas mensagens. Eu reescreveria isso com base na simetria, resultando em:

void process(){

            input();

            incrementCount();

            output();

}

Mas esse método ainda viola a simetria. As operações input() e output() são nomeadas de acordo com as intenções, e incrementCount(), de acordo com uma implementação.

Buscando simetrias, penso no motivo para se incrementar o contador, talvez resultando em:

void process(){

            input();

            tally();

            output();

}

Muitas vezes, encontrar e expressar simetrias é um passo preliminar para se remover uma duplicação.

Se uma ideia está presente em diversos pontos do código, torná-la simétrica em todos é um bom primeiro passo visando unificá-las.

Fonte: Implementation Patterns (Addison-Wesley Signature Series (Beck)) (English Edition)

Fonte: https://www.thiengo.com.br/padroes-de-implementacao-um-catalogo-de-padroes-indispensavel-para-o-dia-a-dia-do-programador

Para enviar seu comentário, preencha os campos abaixo:

Deixe um comentário

*

Seja o primeiro a comentar!