Princípios
Gerais
Não se Repita - Don’t Repeat Yourself (DRY) / Write Every Time (WET): princípio sobre o problema da duplicação de conhecimento.
Cada parte do conhecimento deve ter uma representação única, não ambígua e definitiva dentro do sistema.
Evite código duplicado por abstrair as coisas que são comuns e colocando essas coisas em um único local.
Tenha cada peça de informação e comportamento em seu sistema em um único e sensível local.
Execute Around Method: controle sobre recursos externos, como operações em cleanup e locks.
Princípio de _Hollywood - Hollywood Principle: Não nos chame, nós chamaremos você - Don't call us, we will call you, especifica como componentes de alto e baixo nível interagem sem criar dependências, sendo uma técnica para a construção de frameworks e componentes.
Ordene, não peça! - Tell, don't ask!: peça o produto da informação ao elemento de programação na qual é dono da informação - reduza os acoplamentos, priorizando o encapsulamento.
Técnicas para a refatoração: delegação e redirecionamento.
Princípio do Mínimo Conhecimento - Principle of Least Knowledge: também conhecido por Law of Demeter (1988) ou Don't Talk to Strangers, fale somente com seus amigos imediatos:
- O elemento em si;
- Os elementos passados como parâmetros para o elemento;
- Quaisquer elementos criados e/ou instanciados;
- Quaisquer componentes do elemento; e
- Os elementos globais.
Mantenha Simples, Estúpido - Keep It Simple, Stupid (KISS): em edição.
Você Não Vai Precisar Disso - You Aren't Gonna Need It (YAGNI): resista a urgência da necessidade no futuro, guiando o desenvolvimento através do TDD.
Conceitos
Herança - Inheritance: é o ato de um elemento de programação estender as responsabilidades de outro elemento de programação através da construção de um novo nível na hierarquia durante o tempo de compilação.
Encapsulamento - Encapsulation: é o processo de envolver elementos de programação em entidades maiores e mais abstratas, com o objetivo de proteger a informação (em meios controlados) de ser utilizada incorretamente, assim separando o tipo de sua classe, ou seja, os dados de seu comportamento ou também o que fazer de como fazer - outros nomes utilizados são Ocultamento de Informação (Information Hiding) ou Separação de Interesse (Separation of Concerns). Em projetos, o Encapsulamento refere-se a API, enquando o Ocultamento de Informação a sua implementação.
Separa o que varia do que permanece constante.
Protege os elementos de programação de desnecessárias mudanças.
Polimorfismo- Polymorphism: em edição.
Delegação - Delegation: é o ato de um elemento de programação encaminhar uma necessidade/responsabilidade para outro elemento de programação, para ser executado em função do primeiro.
Blinda seus elementos de programação de alterações nos outros elementos de programação.
É um exemplo extremo de composição.
Redirecionamento - Forwarding: em edição.
Composição - Composition: é o ato de um elemento de programação usar as funcionalidades/comportamentos de uma família de outros elementos de programação e modificar (por seleção) essas funcionalidades/comportamentos em tempo de execução.
Agregação - Aggregation: é o ato de um elemento de programação usar as funcionalidades/comportamentos de outros elementos de programação, mas sem controlar seu tempo de vida.
Associação - Acquaintance: em edição.