r1 - 01 Jun 2006 - 20:09:37 - MeLgaYou are here: TWiki > Doo Web > TiraDuvidas > PrincipiosDeProjetoSegundoBruceEckel
Princípios de Projeto
Princípio do Menor Espanto - não cause espanto.
Faça com que as coisas comuns sejam fáceis, e as coisas raras possíveis.
Não fale com estranhos (Lei de Demétrio) : um objeto deveria referenciar somente a si mesmo, seus atributos, e os argumentos de seus métodos.
Princípio da Subtração: um projeto está terminado quando você não conseguir remover mais nada dele.
Simplicidade antes da generalidade (Uma variação da lei de OCCAM ("a solução mais simples é a melhor"). Um problema comum que encontramos em frameworks é que eles são projetados para um propósito geral sem referencia a sistemas reais. Isso leva a um conjunto estonteante de opções que muitas vezes não são utilizadas, ou são mal utilizadas ou são mesmo sem utilidade. Mas os desenvolvedores trabalham em sistemas específicos, e a busca por generalidade nem sempre lhes cai bem. O melhor caminho para a generalidade é através do entendimento de exemplos específicos. Assim, este princípio age como desempatador entre alternativas de projeto que seriam, de outra forma, igualmente viáveis. Claro, é inteiramente possível que a solução mais simples seja também a mais geral.
Reflexividade. Uma abstração por classe, uma classe por abstração. Poderia ser tambem chamada de Isomorfismo.
Independencia ou Ortogonalidade. Expresse idéias independentes de forma independente. Isso complementa a Separação o Encapsulamento e a Variação, e é parte da mensagem Baixo_Acoplamento-Alta_Coesão
Uma vez, e somente uma: evite duplicação de lógica e estrutura onde a duplicação não for acidental, i.é.: quando ambos os trechos de código expressam o mesmo intento pelo mesmo motivo
Separação de Preocupações (Responsabilidades) - Decomponha sistemas em subsistemas, classes e hierarquias de classes.
Encapsulamento&Proteção - Guardando os dados de forma privada, a classe isola seus clientes da variação de seus detalhes de implementação.
Variação de comportamento Deixe o sistema de execução determinar o tipo dinâmico do objeto. O comportamento pode mudar em tempo de execução. Use Polimorfismo (acoplamento dinamico, tardio)