SOLID são princípios básicos (boas práticas) da Programação Orientada a Objeto
domingo, 9 de setembro de 12
Não é exclusividade de nenhuma linguagem de programação
domingo, 9 de setembro de 12
Por que devo saber SOLID?
domingo, 9 de setembro de 12
Você precisa fazer a coisa certa do jeito certo!
domingo, 9 de setembro de 12
domingo, 9 de setembro de 12
SOLID
ingle responsibility Principle
pen/Closed
iskov Substitution Principle
nterface Segregation
ependency Inversion Principle
domingo, 9 de setembro de 12
Single responsability Principle
1
domingo, 9 de setembro de 12
Uma Classe deve possuir apenas um motivo para ser alterada, ou seja, possuir apenas uma responsabilidade.
Principle
domingo, 9 de setembro de 12
O que faz esta classe?
domingo, 9 de setembro de 12
Gera Frete e Ajusta o Contador e Obtem Nota e...
domingo, 9 de setembro de 12
Devemos separar as funcionalidades em classes distintas.
public class GeradorDeNotaFiscalDeFrete {}
public class AjustadorDeContadorDeNumeracaoDeNotaFiscal {}
public class ConsultaDeNotaFiscalService {}
...
domingo, 9 de setembro de 12
Porque quando você fizer uma alteração, vai procurar a classe responsável.
domingo, 9 de setembro de 12
Open/Closed
2
domingo, 9 de setembro de 12
Uma classe deve estar aberta para extensão, mas fechada para alteração
Principle
domingo, 9 de setembro de 12
Crédo... que diabos é isso?
domingo, 9 de setembro de 12
domingo, 9 de setembro de 12
domingo, 9 de setembro de 12
Tem alguma coisa errada com este código?
domingo, 9 de setembro de 12
Como incluir uma nova Forma sem alterar o método que a desenha?
domingo, 9 de setembro de 12
Lascô...
domingo, 9 de setembro de 12
domingo, 9 de setembro de 12
domingo, 9 de setembro de 12
domingo, 9 de setembro de 12
domingo, 9 de setembro de 12
Liskov Substitution Principle
3
domingo, 9 de setembro de 12
"Se você pode invocar um método q() de uma classe T (base), deve poder também invocar o método q() de uma classe T'(derivada) que é derivada com herança de T (base)."
Principle
domingo, 9 de setembro de 12
Agora Lascô de vez!
domingo, 9 de setembro de 12
Deve ser possível substituir uma classe base por uma classe derivada em qualquer ponto do código
domingo, 9 de setembro de 12
Uffa!Agora entendi...
domingo, 9 de setembro de 12
Exemplo
domingo, 9 de setembro de 12
Correto!
domingo, 9 de setembro de 12
Interface Segregation
4
domingo, 9 de setembro de 12
É melhor ter muitas interfaces específicasdo que ter uma interface genérica.
Principle
domingo, 9 de setembro de 12
Vamos ao exemplo...
domingo, 9 de setembro de 12
Seu gerente
domingo, 9 de setembro de 12
E lasquera a fábrica tá bondando!
domingo, 9 de setembro de 12
Correto!
domingo, 9 de setembro de 12
Correto!
domingo, 9 de setembro de 12
Dependency Inversion Principle
5
domingo, 9 de setembro de 12
Principle
Módulos de alto nível não devem depender de módulos de baixo nível, devem depender de abstrações.
domingo, 9 de setembro de 12
Tá... i dai?
domingo, 9 de setembro de 12
Abstrações não devem depender de detalhes, detalhes devem depender de abstrações.