Princípios para programar por ->
http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
S SRP:
Princípio de responsabilidade única
Um objeto deve ter apenas uma única responsabilidade.
O OCP:
Princípio aberto / fechado
“Entidades de software… devem ser abertas para extensão, mas fechadas para modificação”.
L LSP:
Princípio de substituição de Liskov
“Os objetos em um programa devem ser substituídos por instâncias de seus subtipos sem alterar a exatidão desse programa”. Veja também design by contract.
I ISP:
Princípio de segregação de interface
“Muitas interfaces específicas do cliente são melhores do que uma interface de uso geral.”
D DIP:
Princípio de inversão de dependência
Deve-se “depender de abstrações. Não dependa de concreções. ”
A injeção de dependência é um método para seguir este princípio.