aula 04b design patterns i - instituto de computaçãora144681/courses/aswi4... · revistas e...

41
ASWI4 – Arquitetura de Software Joice Mendes [email protected] Samuel Martins (Samuka) [email protected] Aula 04b Design Patterns I 1

Upload: others

Post on 24-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

ASWI4 – Arquitetura de Software

Joice [email protected]

Samuel Martins (Samuka)[email protected]

Aula 04bDesign Patterns I

1

Page 2: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

2

Você está aprendendo pintura.Já sabe misturar as cores,conhece diferentes pincéis, telas, tipos de tinta, etc...

Você sabe tudo o que precisa para pintar um quadro.

Adianta ter este conhecimento,se você não souber comoutilizá-lo?

Oi,

eu sou o

Goku!

Page 3: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

3

O mesmo vale paraOrientação a Objetos

Saber como usarHerança, Polimorfismo, ...,

não é suficiente

Em quais situações elesdevem ser empregados?

Page 4: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Existem muitas aplicações diferentescom características/problemas semelhantes

4

Page 5: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Existem muitas aplicações diferentescom características/problemas semelhantes

Logo, temos soluções semelhantes para eles

5

Page 6: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Existem muitas aplicações diferentescom características/problemas semelhantes

Logo, temos soluções semelhantes para eles

6

Page 7: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

7

Page 8: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

8

A gente define isso depois...Vamos a um exemplo,

porque é bem mais legal =D

Page 9: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Prob01: Duck Hunt Game

99

Page 10: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Prob01: Duck Hunt Game

1010

Page 11: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

11

Page 12: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Prob01: Duck Hunt Game

1212

Page 13: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

13

Page 14: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Princípio de Design

“Identifique os aspectos de sua aplicaçãoque variam e separe-os dos que se

mantém o mesmo”

14

Page 15: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Princípio de DesignEm outras palavras...

“Pegue o que varia e encapsule,então, isto não afetará o resto de seu

código”

Com isso, conseguimos alterar/extender as partes que variam, sem afetar as que não variam...

15

Page 16: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Sabemos que a parte que varia é o método fly().

Que tal representarmos este comportamento em uma interface, deixando suas implementações a cargo de algumas classes separadas?

Duck Hunter Game

16

Page 17: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

17

Duck Hunter Game

Page 18: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Prob01: Duck Hunt Game

18

Step 04E se os Patos pudessem quaquarejar?

O Pato-real faz Quack...O Marreco faz Cocorocó...O Pato de Borracha faz Biurl...

18

Page 19: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

19

Princípio de Design

“Programe para uma interface,não para uma implementação”

Page 20: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Princípio de Design

→ Use uma interface para representar cada comportamento, algoritmo, ação que varia.

→ Implemente os comportamento em classes concretas, cujo único objetivo de “viver” é a implementação de tal comportamento.

→ As classes que contém os comportamentos não precisam conhecer nenhum detalhe de implementação dos mesmos.

20

Page 21: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Princípio de Design

→ As classes que contém os comportamentos não precisam conhecer nenhum detalhe de implementação dos mesmos.

→ Elas estão delegando seu comportamento para a interface

→ Elas também não estão presas a uma implementação específica

→ O comportamento do objeto pode ser alterado em execução do programa

21

Page 22: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

22

"Programar para uma interface,na verdade significa

programar para um supertipo"

Page 23: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Programa para uma Interface/Supertipo

→ Você não precisa, necessariamente, usar uma Java Interface

→ A ideia é explorar o poliformismo programando para um supertipo → Para que o objeto, em tempo de execução, não fique preso a uma implementação específica

→ O supertipo pode ser representado por uma Interface ou Classe Abstrata

23

Page 24: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

// Programar para uma ImplementaçãoProfReservation profRes = new ProfReservation();profRes.makeReservation();

// Programar para uma InterfaceReservation res = new ProfReservation();res.makeReservation();

24

Page 25: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Classe Abstrata ou Interface?

Classe Abstrata:→ Quando a abstração for um conceito (algo que precisa ser refinado ou especializado)

Interface:→ Quando a abstração for um comportamento (algo que uma classe deve saber fazer)

25

Page 26: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Classe Abstrata ou Interface?

Imagine um jogo no qual existem naves que se movem.

Se sua abstração representa uma nave, então você está representando um conceito e deve utilizar uma classe abstrata.

26

Page 27: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Classe Abstrata ou Interface?

Imagine um jogo no qual existem naves que se movem.

Mas, se sua abstração representa algo que se move, então o que está sendo abstraído é um comportamento e a melhor solução é usar uma interface.

27

Page 28: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

28

Princípio de Design

“Prefira Composição em vez de Herança”

Page 29: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Princípio de Design→ Em vez de herdar o comportamento, estamos compondo-o

→ A Composição nos dá maior flexibilidade

→ Conseguimos encapsular uma família de comportamentos, algoritmos, ações, ...

→ O comportamento pode ser mudado em tempo de execução

→ Tudo isso facilita a manutenção futura do código

29

Page 30: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

30

“Muito prazer, eu sou o Strategy!”

Page 31: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Strategy→ Define uma família de algoritmos (comportamentos), encapsula cada um, e os faz intercambiáveis (de fácil mudança).

31

Page 32: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

StrategyDesvantagem:→ Aumento do número de classes

→ Complexidade na criação do Objeto→ Devemos garantir que todos os comportamentos foram atribuídos

32

Page 33: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

33

Page 34: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Design Patterns→ Soluções para determinados problemas em determinados contextos.

→ Descreve soluções bem estabelecidas

→ Não basta ser uma solução recorrente→ Precisa ser uma boa solução

34

Page 35: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Design PatternsA ideia vem do trabalho do arquiteto Christopher Alexander

35

Page 36: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Design PatternsIniciou-se em OO com o livro

36

Page 37: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Design Patterns→ Não se refletem em pedaços de códigos ou componentes que são reutilizáveis de forma igual em diversas aplicações

→ Eles são um conhecimento que deve estar na cabeça dos desenvolvedores/arquitetos de software.

→ Avaliar o contexto e o problema que querem resolver→ Utilizar com parcimônia os padrões mais adequados

37

Page 38: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

38

“Quanto mais padrões eu utilizar, melhor vai ficar o meu código?”

Page 39: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

39

“Quanto mais padrões eu utilizar, melhor vai ficar o meu código?”NÃO

Page 40: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Exercício: Modele e ImplementeA livraria Yoda vende diversos artigos consistindo de Livros, Revistas e Jogos.Há livros e revistas impressos e digitais.A livraria possui Jogos de Tabuleiro e Jogos de Vídeo Game, sendo o último o jogo físico ou digital.

No pagamento a vista, temos a seguinte política de descontos:Livros, Revistas Físicos e Jogos de Tabuleiro: 30% de desconto.Livros e Revistas Digitais: 15% de desconto.Não há desconto para Jogos de Vídeo Game.

40

Page 41: Aula 04b Design Patterns I - Instituto de Computaçãora144681/courses/aswi4... · Revistas e Jogos. Há livros e revistas impressos e digitais. A livraria possui Jogos de Tabuleiro

Referências→ FREEMAN, Eric et al. Head first design patterns. " O'Reilly Media, Inc.", 2004

→ GUERRA, Eduardo. Design Patterns com Java: Projeto orientado a objetos guiado por padrões. Editora Casa do Código, 2014.

→ Apostila de Design Patterns da Caelumhttp://www.caelum.com.br/apostila-java-testes-xml-design-patterns/

41