padrões de projeto aula 3 – padrão strategy. padrÃo strategy padrões de projeto - strategy 2

28
Padrões de Projeto Aula 3 – Padrão Strategy

Upload: marco-antonio-leao-paixao

Post on 07-Apr-2016

221 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padrões de ProjetoAula 3 – Padrão Strategy

Page 2: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

PADRÃO STRATEGY

Padr

ões d

e Pr

ojet

o - S

trat

egy

2

Page 3: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

3

Page 4: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Modelo• Como vocês implementariam este jogo?• Conjunto de lutadores• Atacar• Defender• Mover

• Especificamente• Atacar

• socar(), chutar()• Defender já é específico• Mover

• andar(direção), pular(direção)

4

Page 5: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Modelo

5

Page 6: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Novas funcionalidades• Ambos os lutadores atiram!• Como devemos modelar esta nova funcionalidade?

6

Page 7: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Novas funcionalidades• Interfaces?

7

Page 8: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Novas Funcionalidades• Lançar magia!• Sub Zero (lança gelo)• Rayden (lança raio)• Shang Tsung (lança bola de fogo)• Jax (lança bola de fogo)• Liu Kang (lança bola de fogo)

8

Page 9: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

9

Page 10: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Qual é a única coisa com a qual podemos contar sempre no desenvolvimento de software?

ALTERAÇÃO10

Page 11: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Separando o que muda do que fica igual• Quais comportamentos são imutáveis?• socar(), chutar(), defender();

• Quais comportamentos são mutáveis?• atirar(), lancarMagia();

• O que devemos fazer?• Separar o que muda do que fica igual!

• Como?• Que tal criar um conjunto de classes (completamente separadas

de Lutador) para cada comportamento?• Cada conjunto de classes irá conter todas as implementações

possíveis para seu comportamento.• Ex.: teríamos uma classe para atirar com arma de fogo, outra classe

para atirar flechas, etc.11

Page 12: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Separando o que muda do que fica igual

12

Page 13: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Desenvolvendo os comportamentos de Lutador• Como vamos desenvolver o conjunto de classes que

implementam os comportamentos de atirar e lançar magia?

13

Page 14: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Desenvolvendo os comportamentos de Lutador• Utilizaremos interfaces!

Padr

ões d

e Pr

ojet

o - S

trat

egy

14

Page 15: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

15

• Pela 903284 vez:• PROGRAME para uma SUPERCLASSE!

Page 16: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Integrando o comportamento de Lutador

16

Page 17: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

17

Page 18: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

TEM-UM pode ser melhor do que É-UM• Pra que serve a herança?• Resp.: um de seus objetivos é o reuso de código.

• Existe outra maneira de reutilizar código senão através da herança?• Resp.: Sim, através de composição!• Ao invés de herdar seus comportamentos, os lutadores obtêm

seu comportamento ao serem compostos com o objeto de comportamento certo.

• Sistemas que utilizam composição possuem muito mais flexibilidade do que os que usam herança.• Conseguimos reuso de código de maneira flexível e com maior poder

de manutenção.• A composição permite que os Lutadores alterem seu

comportamento em tempo de execução. (lembra do Shang Tsung?)18

Quando puder, sempre use composição ao invés de herança...

Lembre-se disto!

Page 19: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Exercício• Considerando o design que nós acabamos de modelar,

implemente (papel) a classe Lutador e uma das seguintes classes, que É-UM Lutador:

19

Page 20: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Solução

20

class NightWolf extends Lutador{

public NightWolf(){comportamentoAtirador = new AtirarComArcoEFlecha();comportamentoBruxo = new LancarNada();

}

}

Page 21: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Ops...• Inicialmente eu achei que NightWolf não lançava magia (de

verdade, eu não sabia...)• Aparentemente, ele (MK3) possui uma conexão muito forte

com o Raiden (MK2), e lança raios em seus oponentes. Vamos considerar isso como uma magia.

• Como deveríamos proceder para consertar NightWolf?

21

Page 22: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Fixing NightWolf

22

class NightWolf extends Lutador{

public NightWolf(){comportamentoAtirador = new AtirarComArcoEFlecha();comportamentoBruxo = new LancarRaio();

}

}

Page 23: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Questionamentos• Aluno: Mas, professor, você não disse pra gente que nós

deveríamos programar para uma superclasse?• Aluno: O construtor está apontando para implementações, ou

seja, para classes concretas... Isso não seria errado?

• Professor: Mais adiante aprenderemos alguns padrões para manter o nosso princípio de apenas programar para Superclasses.

• Professor: Por enquanto, percebam que nós já ganhamos bastante flexibilidade, inclusive, nós podemos mudar o comportamento de cada lutador em tempo de execução através de métodos setters! 23

Page 24: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

E por falar em Padrões de Projetos...• Você acaba de aplicar seu primeiro padrão de projeto: o

padrão STRATEGY.• Com esse padrão, sempre que novos lutadores precisarem ser

implementados e novos comportamentos surgirem, o nosso jogo estará pronto para qualquer alteração.

24

O padrão STRATEGY define uma família de algoritmos, encapsula cada um deles e os

torna polimórficos. Cada família de algoritmos contém diferentes estratégias para execução,

que podem variar dependendo dos clientes que a utilizarem.

Page 25: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Para casa 1• Adicione à classe Lutador uma variável chamada “Vida”;• Pode ser um int com valor máximo 100;

• Considere os seguintes danos para os seguintes ataques:• Tiro com arma de fogo: -5• Tiro com flecha: -4• Bola de fogo (magia): -10• Bola de gelo (magia): -5• Raio (magia): -10• Soco: -3• Chute: -3

• Crie um main onde os lutadores duelam até a morte!25

Page 26: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Para casa 2• Já que o gabarito da atividade anterior foi dado, experimente criar:• Novos lutadores: só estão criados nightwolf e subzero, você poderia

criar mais 2 lutadores e fazer seu próprio duelo;• Minha sugestão seria criar o KungLao e o ShangTsun. • Para o ShangTsung, faça ele mudar de personagem ao longo do jogo.

• Novos tipos de comportamento: que tal criar o ComportamentoLancarObjeto?• KungLao lança seu chapéu;• Nightwolf também lança um machado.

• Perguntas• Reflita o quanto o padrão Strategy lhe ajudou a executar o

“polimorfismo” de Shang Tsung... Foi fácil ou difícil implementar essa funcionalidade com o novo padrão aprendido? Por que?

• Foi fácil ou difícil criar um novo comportamento (laçar objetos) para os lutadores? Por que?

26

Page 27: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Para casa 3• Chega de Mortal Kombat... Quer entender melhor ainda esse

padrão? Pratique um pouco mais... Implemente o seu próprio jogo! Sugiro que implementem o Street Fighter... Era muito legal.. Concordam?

• Não se esqueçam de me mostrar o resultado! 27

“Só se conhece o que se pratica.”- Barão de Montesquieu

Page 28: Padrões de Projeto Aula 3 – Padrão Strategy. PADRÃO STRATEGY Padrões de Projeto - Strategy 2

Padr

ões d

e Pr

ojet

o - S

trat

egy

Referências• O capítulo 1 do livro “Padrões de Projeto – Use a Cabeça!”;• O Mega Drive e a fita cartucho de Mortal Kombat III que tive

quando criança foram grandes referências para essa aula.

28