solid a 6 mãos

40
@augustohp @augustohp @Ivonascimento @Ivonascimento @lcobucci @lcobucci @nelson_senna @nelson_senna @netojoaobatista @netojoaobatista @guilhermeblanco @guilhermeblanco S.O.L.I.D. S.O.L.I.D. a 6 mãos a 6 mãos

Upload: joao-batista-neto

Post on 04-Jul-2015

847 views

Category:

Documents


0 download

DESCRIPTION

Apresentação sobre design de software orientado a objetos com foco nos princípios de design SOLID. A apresentação foi feita no formato PUB no InterCon PHP de 2014 e contou com a participação de @augustohp, @guilhermeblanco, @Ivonascimento, @lcobucci, @nelson_senna e @netojoaobatista.

TRANSCRIPT

Page 1: SOLID a 6 mãos

@augustohp@augustohp

@Ivonascimento@Ivonascimento

@lcobucci@lcobucci

@nelson_senna@nelson_senna

@netojoaobatista@netojoaobatista

@guilhermeblanco@guilhermeblanco

S.O.L.I.D.S.O.L.I.D.a 6 mãosa 6 mãos

Page 2: SOLID a 6 mãos

Sólido, mas não engessadoSólido, mas não engessado

Código engessado apodrece e cheira mal.

Page 3: SOLID a 6 mãos

Sólido, mas não engessadoSólido, mas não engessado

Como evitar o apodrecimentodo código?

Page 4: SOLID a 6 mãos

Sólido, mas não engessadoSólido, mas não engessado

Código S.O.L.I.D. facilita a manutenção

mudanças não quebram o código

é reutilizável e reaproveitável

Page 5: SOLID a 6 mãos

Sólido, mas não engessadoSólido, mas não engessado

E como meu código pode

ser S.O.L.I.D.?

Page 6: SOLID a 6 mãos

S.R.P. - Princípio da responsabilidade únicaS.R.P. - Princípio da responsabilidade única

O primeiro passo,

é compreender responsabilidade.

Page 7: SOLID a 6 mãos

S.R.P. - Princípio da responsabilidade únicaS.R.P. - Princípio da responsabilidade única

Responsabilidade única, por quê?

Page 8: SOLID a 6 mãos

S.R.P. - Princípio da responsabilidade únicaS.R.P. - Princípio da responsabilidade única

Okay, tenho apenas uma

responsabilidade.

E agora?

Page 9: SOLID a 6 mãos

S.R.P. - Princípio da responsabilidade únicaS.R.P. - Princípio da responsabilidade única

Seu código ainda fede;

Muito!

Page 10: SOLID a 6 mãos

O.C.P. - Princípio Aberto/FechadoO.C.P. - Princípio Aberto/Fechado

Agora você é proibido de

editar seu código.

Page 11: SOLID a 6 mãos

O.C.P. - Princípio Aberto/FechadoO.C.P. - Princípio Aberto/Fechado

Aberto e fechado?!

Não é antagônico?

Page 12: SOLID a 6 mãos

O.C.P. - Princípio Aberto/FechadoO.C.P. - Princípio Aberto/Fechado

Aberto para extensão;

Fechado para edição.

Page 13: SOLID a 6 mãos

O.C.P. - Princípio Aberto/FechadoO.C.P. - Princípio Aberto/Fechado

A implementação é irrelevante.

Trabalhe com abstrações.

Page 14: SOLID a 6 mãos

O.C.P. - Princípio Aberto/FechadoO.C.P. - Princípio Aberto/Fechado

Herança pode ser uma solução

para variar o comportamento.

Page 15: SOLID a 6 mãos

O.C.P. - Princípio Aberto/FechadoO.C.P. - Princípio Aberto/Fechado

Herança?!

Eu sei trabalhar com herança!

Page 16: SOLID a 6 mãos

O.C.P. - Princípio Aberto/FechadoO.C.P. - Princípio Aberto/Fechado

class User extends Database {}

Page 17: SOLID a 6 mãos

L.S.P. - Princípio da substituição de LiskovL.S.P. - Princípio da substituição de Liskov

Herança é mais complexo do

que você imagina!

Page 18: SOLID a 6 mãos

L.S.P. - Princípio da substituição de LiskovL.S.P. - Princípio da substituição de Liskov

Se q(x) é uma propriedade

demonstrável dos objetos x de

tipo T. Então q(y) deve ser

verdadeiro para objetos y de tipo

S onde S é um subtipo de T.

Page 19: SOLID a 6 mãos

L.S.P. - Princípio da substituição de LiskovL.S.P. - Princípio da substituição de Liskov

WTF?!

Page 20: SOLID a 6 mãos

L.S.P. - Princípio da substituição de LiskovL.S.P. - Princípio da substituição de Liskov

Se q(x) é uma propriedade

demonstrável dos objetos x de

tipo T. Então q(y) deve ser

verdadeiro para objetos y de tipo

S onde S é um subtipo de T.

Page 21: SOLID a 6 mãos

L.S.P. - Princípio da substituição de LiskovL.S.P. - Princípio da substituição de Liskov

E como uso isso?

Page 22: SOLID a 6 mãos

L.S.P. - Princípio da substituição de LiskovL.S.P. - Princípio da substituição de Liskov

Validação de input nunca deve

ser mais forte na derivação, do

que é na classe base.

Page 23: SOLID a 6 mãos

L.S.P. - Princípio da substituição de LiskovL.S.P. - Princípio da substituição de Liskov

Validação do output nunca deve

ser mais fraco na derivação, do

que é na classe base.

Page 24: SOLID a 6 mãos

L.S.P. - Princípio da substituição de LiskovL.S.P. - Princípio da substituição de Liskov

Se não posso editar o código,

como utilizo uma classe

derivada?

Page 25: SOLID a 6 mãos

D.I.P. - Princípio da inversão das dependênciasD.I.P. - Princípio da inversão das dependências

Trabalhando com abstrações e

invertendo as dependências.

Page 26: SOLID a 6 mãos

D.I.P. - Princípio da inversão das dependênciasD.I.P. - Princípio da inversão das dependências

Mas o que é dependência?

Page 27: SOLID a 6 mãos

D.I.P. - Princípio da inversão das dependênciasD.I.P. - Princípio da inversão das dependências

Em vez de criar as instâncias

dentro das classes, devemos

passá-las como parâmetros na

forma de abstrações.

Page 28: SOLID a 6 mãos

D.I.P. - Princípio da inversão das dependênciasD.I.P. - Princípio da inversão das dependências

Abstração é um conceito.

Uma ideia.

Page 29: SOLID a 6 mãos

D.I.P. - Princípio da inversão das dependênciasD.I.P. - Princípio da inversão das dependências

Confie na interface das coisas

e não espere conhecer os

detalhes da implementação.

Page 30: SOLID a 6 mãos

D.I.P. - Princípio da inversão das dependênciasD.I.P. - Princípio da inversão das dependências

Então é só eu criar uma interface

com todos os métodos

possíveis?

Page 31: SOLID a 6 mãos

D.I.P. - Princípio da inversão das dependênciasD.I.P. - Princípio da inversão das dependências

Esqueceu das

responsabilidades?

Page 32: SOLID a 6 mãos

D.I.P. - Princípio da inversão das dependênciasD.I.P. - Princípio da inversão das dependências

É esperado que seus objetos se

comportem de todas as formas

possíveis?

Page 33: SOLID a 6 mãos

D.I.P. - Princípio da inversão das dependênciasD.I.P. - Princípio da inversão das dependências

Então qual a responsabilidade do

seu objeto?

Page 34: SOLID a 6 mãos

I.S.P. - Princípio da segregação das interfacesI.S.P. - Princípio da segregação das interfaces

Faça com que sua interface deixe

os outros saberem dessa, e

somente dessa,

responsabilidade.

Page 35: SOLID a 6 mãos

I.S.P. - Princípio da segregação das interfacesI.S.P. - Princípio da segregação das interfaces

Quanto mais coesa for a

interface, mais fácil será sua

reutilização.

Page 36: SOLID a 6 mãos

Problemas de um mau designProblemas de um mau design

Rigidez

Uma única mudança, implica na

mudança de vários outros

componentes.

Page 37: SOLID a 6 mãos

Problemas de um mau designProblemas de um mau design

Fragilidade

Quando mudamos alguma coisa,

partes inesperadas da aplicação

quebram.

Page 38: SOLID a 6 mãos

Problemas de um mau designProblemas de um mau design

Imobilidade

Fica difícil reutilizar o código,

pois fica difícil extrair uma parte

de um todo.

Page 39: SOLID a 6 mãos

Problemas de um mau designProblemas de um mau design

Há mais maus cheiros entre seus

objetos, do que essa vã

apresentação pode lhe mostrar.

Page 40: SOLID a 6 mãos

@augustohp@augustohp

@Ivonascimento@Ivonascimento

@lcobucci@lcobucci

@nelson_senna@nelson_senna

@netojoaobatista@netojoaobatista

@guilhermeblanco@guilhermeblanco

Obrigado!Obrigado!