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

Post on 15-Apr-2017

295 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

Dificuldades

- Propagação de problemas?

- Dificuldade de criar testes?

- Refactorings sofríveis?

- Instabilidades de classes?

- Dificuldades de modularização do projeto?

- Retrabalho?

- ∞

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

Origem

Criados por Michael Feathers nos

anos 2000. Através de observações

de arquiteturas de projetos OO

S.O.L.I.D. ?

S.O.L.I.D. ?

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

- 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.”

- 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.”

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

modificação.”

- 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.

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

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

Liskov sobre Hoare Logic”

- 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.

Resumindo LSP em uma frase.

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

- 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

Resumindo ISP em uma imagem.

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

- 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.”

Quais as vantagens da adoção dos

princípios a curto prazo?

Métricas finais do projeto de TCC ( github)

E a longo prazo?

E a longo prazo?

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

utilizando composição.

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:

Obrigado!

top related