princípios s.o.l.i.d

1

Upload: leandro-nishijima

Post on 15-Apr-2017

295 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Princípios S.O.L.I.D

Princípios S.O.L.I.D.Leandro Nishijima

Page 2: Princípios S.O.L.I.D

Por que sistemas orientados a objetos são tão difíceis de se trabalhar?

Page 3: Princípios S.O.L.I.D

Dificuldades

- Propagação de problemas?

- Dificuldade de criar testes?

- Refactorings sofríveis?

- Instabilidades de classes?

- Dificuldades de modularização do projeto?

- Retrabalho?

- ∞

Page 4: Princípios S.O.L.I.D

Princípios S.O.L.I.D.

Page 5: Princípios S.O.L.I.D

Origem

Page 6: Princípios S.O.L.I.D

Criados por Michael Feathers nos

anos 2000. Através de observações

de arquiteturas de projetos OO

Page 8: Princípios S.O.L.I.D

S.O.L.I.D. ?

Page 9: Princípios S.O.L.I.D

S.O.L.I.D. ?

Page 10: Princípios S.O.L.I.D

Single Responsability Principle“Uma classe deve ter uma, e apenas uma razão para mudar.”

Page 11: Princípios S.O.L.I.D

- SRP == Coesão

- Classes devem ter apenas uma

responsabilidades;

- Implementado de maneira

correta, cada objeto terá

apenas uma razão para mudar.

- Builders são um bom exemplo

de classes que utilizam SRP.

Exemplo clichê “Head First: Object-Oriented Analysis & Design.”

Page 12: Princípios S.O.L.I.D

- SRP == Coesão

- Classes devem ter apenas uma

responsabilidades;

- Implementado de maneira

correta, cada objeto terá

apenas uma razão para mudar;

- Builders são um bom exemplo

de classes que utilizam SRP.

Exemplo clichê “Head First: Object-Oriented Analysis & Design.”

Page 13: Princípios S.O.L.I.D

Open and Closed Principle“Uma classe deve ser aberta para a extensão, mas fechada para a

modificação.”

Page 14: Princípios S.O.L.I.D

- Refere-se a permissão de

mudanças;

- Porém sem necessariamente

modificando um código

existente;

- Crie classes de forma que

você crie ramos de

modificações.

- O Design Pattern Strategy é

um excelente exemplo da

aplicação correta do princípio.

Page 15: Princípios S.O.L.I.D

Liskov Substitution Principle“Classes derivadas devem ser substituíveis pela sua classe base.”

Page 16: Princípios S.O.L.I.D

Liskov?“O princípio foi inspirado através de um artigo escrito por Barbara

Liskov sobre Hoare Logic”

Page 17: Princípios S.O.L.I.D

- Uso adequado da herança

entre as classes;

- Nunca deve-se quebrar o

contrato de uma classe pai!

- Nunca apertar pré condições;

- Nunca afrouxar pós

condições.

Exemplo de quebra de contrato da classe pai.

Page 18: Princípios S.O.L.I.D

Resumindo LSP em uma frase.

Page 19: Princípios S.O.L.I.D

Interface Segregation Principle“Interfaces devem ser simples e com poucos comportamentos.”

Page 20: Princípios S.O.L.I.D

- Referencia diretamente ao

acoplamento entre as classes

- Interfaces ao ser

implementadas não devem

forçar comportamentos que

outras classes não precisem!

Template Method

Page 21: Princípios S.O.L.I.D

Resumindo ISP em uma imagem.

Page 22: Princípios S.O.L.I.D

Dependency Inversion Principle“Dependa de abstrações e não de implementações.”

Page 23: Princípios S.O.L.I.D

- Uma classe sempre deve

depender de classes que sejam

mais estáveis que ela mesma.

- Classes devem depender de

abstrações.

- Desenvolver seguindo o DIP é:

“Pensar primeiro na abstrações de suas

classes, e depois, na implementação.”

Page 24: Princípios S.O.L.I.D

Quais as vantagens da adoção dos

princípios a curto prazo?

Métricas finais do projeto de TCC ( github)

Page 25: Princípios S.O.L.I.D

E a longo prazo?

Page 26: Princípios S.O.L.I.D

E a longo prazo?

Page 27: Princípios S.O.L.I.D

E a longo prazo?Classes flexíveis e genéricas o suficiente para desenvolver OO

utilizando composição.

Page 28: Princípios S.O.L.I.D

Se aprofundeUncle Bob: SOLID Principles of Object Oriented And Agile Design

https://youtu.be/TMuno5RZNeE

Steve Freeman & Nat Pryce: Building on SOLID fundations

https://youtu.be/6Bia81dI-JE

Leia os livros:

Page 29: Princípios S.O.L.I.D

Obrigado!