- Single Responsibility Principle
- Open/Closed Principle
- Liskov Substitution Principle
- Interface Segregation Principle
- Dependency Inversion Principle
Uma classe deve ter um, e somente um, motivo para mudar1.
Deixe junto as coisas que mudam pela mesma razão. Separe aquelas que mudam por razões diferentes1.
O princípio da responsabilidade única fala sobre como diminuir o acoplamento baseado na frequência e na origem das mudanças/alterações no código.
Alguns exemplos:
Entidades de software (classes, módulos, funções, etc.) devem ser abertas para extensão, mas fechadas para modificação2.
Módulos que atendem o princípio aberto/fechado possuem dois principais atributos:
- Eles estão "abertos para extensão"
- Eles estão "fechados para modificação"
Conseguimos atingir estes dois atributos utilizando abstração.
Alguns exemplos:
Os serviços da classe derivada não devem exigir mais e prometer nada menos do que os serviços correspondentes da classe base3.
A função que usa uma classe base deve conseguir usar suas subclasses sem distinguir3.
Muitas interfaces específicas são melhores do que uma interface única geral4.
Este princípio traz o foco em diminuir o acoplamento em interfaces. Com interfaces mais coesas, conseguimos criar códigos coesos e com baixo acoplamento.
Alguns exemplos:
Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações5.
Footnotes
-
https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html ↩ ↩2
-
https://en.wikipedia.org/wiki/Open%E2%80%93closed_principle ↩
-
https://en.wikipedia.org/wiki/Liskov_substitution_principle ↩ ↩2
-
https://en.wikipedia.org/wiki/Interface_segregation_principle ↩
-
https://en.wikipedia.org/wiki/Dependency_inversion_principle ↩