Download - SOLID Principles

Transcript

S.O.L.I..D PrinciplesPor Ismael Soares@ismaelsoaresz

Agile Brazil 2012

domingo, 9 de setembro de 12

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.

domingo, 9 de setembro de 12

Exemplo

domingo, 9 de setembro de 12

domingo, 9 de setembro de 12

Quebrando o princípio

domingo, 9 de setembro de 12

Correto

domingo, 9 de setembro de 12

domingo, 9 de setembro de 12

Obrigado

domingo, 9 de setembro de 12