100
1 Padrões de Projeto Padrões de Projeto Disciplina: Engenharia de Software - 2009.1 Disciplina: Engenharia de Software - 2009.1 Professora: Rossana Maria de Castro Andrade Professora: Rossana Maria de Castro Andrade Assistente da disciplina: Ricardo Fernandes de Almeida Assistente da disciplina: Ricardo Fernandes de Almeida

Padrões de Projeto - disciplinas.lia.ufc.brF5es-gof-posa... · • Os padrões utilizam eficientemente polimorfismo, herança, modularidade, ... Exemplo: RMI (e EJB) • O Stub é

  • Upload
    hathien

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

1

Padrões de ProjetoPadrões de ProjetoDisciplina: Engenharia de Software - 2009.1Disciplina: Engenharia de Software - 2009.1Professora: Rossana Maria de Castro AndradeProfessora: Rossana Maria de Castro AndradeAssistente da disciplina: Ricardo Fernandes de AlmeidaAssistente da disciplina: Ricardo Fernandes de Almeida

2

O que é um Padrão?O que é um Padrão? Um padrão descreve uma solução para um problema Um padrão descreve uma solução para um problema

que ocorre com freqüência durante o desenvolvimento que ocorre com freqüência durante o desenvolvimento de software, podendo ser considerado como um par de software, podendo ser considerado como um par problema/solução” [Buschmann 96]. Design Patterns, problema/solução” [Buschmann 96]. Design Patterns, ou Padrões de Design*.ou Padrões de Design*. Padrões para alcançar objetivos na engenharia de software Padrões para alcançar objetivos na engenharia de software

usando classes e métodos em linguagens orientadas a objeto.usando classes e métodos em linguagens orientadas a objeto. Inspirado em "A Pattern Language" de Christopher Inspirado em "A Pattern Language" de Christopher

Alexander, sobre padrões de arquitetura de cidades, casas e Alexander, sobre padrões de arquitetura de cidades, casas e prédios.prédios.

3

PadrõesPadrões Padrões são um repertório de soluções e princípios que ajudam os Padrões são um repertório de soluções e princípios que ajudam os

desenvolvedores a criar software e que são codificados em um desenvolvedores a criar software e que são codificados em um formato estruturado consistindo deformato estruturado consistindo de• • Nome.Nome.• • Problema que soluciona.Problema que soluciona.• • Solução do problema.Solução do problema.

O objetivo dos padrões é codificar conhecimento (knowing) O objetivo dos padrões é codificar conhecimento (knowing) existente de uma forma que possa ser reaplicado em contextos existente de uma forma que possa ser reaplicado em contextos diferentes.diferentes.

4

Padrões clássicos ou padrões Padrões clássicos ou padrões GoFGoF

O livro "Design Patterns“ (1994) de Erich Gamma, John O livro "Design Patterns“ (1994) de Erich Gamma, John Vlissides, Ralph Jonhson e Richard Helm, descreve 23 padrões Vlissides, Ralph Jonhson e Richard Helm, descreve 23 padrões de designde design

• • São soluções genéricas para os problemas mais comuns do São soluções genéricas para os problemas mais comuns do desenvolvimeto de software orientado a objetos.desenvolvimeto de software orientado a objetos.

• • O livro tornou-se um clássico na literatura orientada a objeto e O livro tornou-se um clássico na literatura orientada a objeto e continua atual.continua atual.

• • Não são invenções. São documentação de soluções obtidas Não são invenções. São documentação de soluções obtidas através da experiência. Foram coletados de experiências de através da experiência. Foram coletados de experiências de sucesso na indústria de software, principalmente de projetos em sucesso na indústria de software, principalmente de projetos em C++ e SmallTalk.C++ e SmallTalk.

• • Os quatro autores, são conhecidos como "The Gang of Four", Os quatro autores, são conhecidos como "The Gang of Four", ou GoF.ou GoF.

5

Por que aprender padrões?Por que aprender padrões? Aprender com a experiência dos outros.Aprender com a experiência dos outros. • • Identificar problemas comuns em engenharia de software e Identificar problemas comuns em engenharia de software e

utilizar soluções testadas e bem documentadas.utilizar soluções testadas e bem documentadas. • • Utilizar soluções que têm um nome: facilita a comunicação, Utilizar soluções que têm um nome: facilita a comunicação,

compreensão e documentação.compreensão e documentação. Aprender a programar bem com orientação a objetosAprender a programar bem com orientação a objetos • • Os 23 padrões de projeto "clássicos" utilizam as melhores Os 23 padrões de projeto "clássicos" utilizam as melhores

práticas em OO para atingir os resultados desejadospráticas em OO para atingir os resultados desejados Desenvolver software de melhor qualidade.Desenvolver software de melhor qualidade. • • Os padrões utilizam eficientemente polimorfismo, herança, Os padrões utilizam eficientemente polimorfismo, herança,

modularidade, composição, abstração para construir código modularidade, composição, abstração para construir código reutilizável, eficiente, de alta coesão e baixo acoplamento.reutilizável, eficiente, de alta coesão e baixo acoplamento.

6

Por que aprender padrões?(cont)Por que aprender padrões?(cont) Vocabulário comum Faz o sistema ficar menos

complexo ao permitir que se fale em um nível mais alto de abstração.

Ajuda na documentação e na aprendizagem • Conhecendo os padrões de projeto torna mais

fácil a compreensão de sistemas existentes.

7

Elementos de um padrãoElementos de um padrão NomeNome ProblemaProblema • • Quando aplicar o padrão, em que condições?Quando aplicar o padrão, em que condições? SoluçãoSolução • • Descrição abstrata de um problema e como usar os Descrição abstrata de um problema e como usar os

elementos disponíveis (classes e objetos) para elementos disponíveis (classes e objetos) para solucioná-lo.solucioná-lo.

ConseqüênciasConseqüências • • Custos e benefícios de se aplicar o padrãoCustos e benefícios de se aplicar o padrão • • Impacto na flexibilidade, extensibilidade, Impacto na flexibilidade, extensibilidade,

portabilidade e eficiência do sistema.portabilidade e eficiência do sistema.

8

Classificação dos 23 padrões Classificação dos 23 padrões segundo GoFsegundo GoF

9

AdapterAdapter "Objetivo: converter a interface de uma classe "Objetivo: converter a interface de uma classe

em outra interface esperada pelos clientes. em outra interface esperada pelos clientes. Adapter permite a comunicação entre classes Adapter permite a comunicação entre classes que não poderiam trabalhar juntas devido à que não poderiam trabalhar juntas devido à incompatibilidade de suas interfaces." [GoF].incompatibilidade de suas interfaces." [GoF].

10

Cenário do ProblemaCenário do Problema

11

Duas Formas de Usar AdapterDuas Formas de Usar Adapter Class Adapter: usa herança múltipla:Class Adapter: usa herança múltipla:

12

Duas Formas de Usar Duas Formas de Usar Adapter(cont..)Adapter(cont..)

Object Adapter: usa composiçãoObject Adapter: usa composição

13

Quando Usar?Quando Usar? Sempre que for necessário adaptar uma interface Sempre que for necessário adaptar uma interface

para um cliente Class Adapter.para um cliente Class Adapter. • • Quando houver uma interface que permita a Quando houver uma interface que permita a

implementação estática.implementação estática. Object AdapterObject Adapter • • Quando menor acoplamento for desejado.Quando menor acoplamento for desejado. • • Quando o cliente não usa uma interface Java Quando o cliente não usa uma interface Java

ou classe abstrata que possa ser estendida.ou classe abstrata que possa ser estendida.

14

FacadeFacade "Oferecer uma interface única para um conjunto "Oferecer uma interface única para um conjunto

de interfaces de um subsistema. Façade define de interfaces de um subsistema. Façade define uma interface de nível mais elevado que torna o uma interface de nível mais elevado que torna o subsistema mais fácil de usar." [GoF].subsistema mais fácil de usar." [GoF].

15

ProblemaProblema Cliente precisa saber muitos detalhes do Cliente precisa saber muitos detalhes do

subsistema para utilizá-lo!subsistema para utilizá-lo!

16

ExemploExemplo

17

Quando Usar?Quando Usar? Sempre que for desejável criar uma interface para um conjunto Sempre que for desejável criar uma interface para um conjunto

de objetos com o objetivo de facilitar o uso da aplicação.de objetos com o objetivo de facilitar o uso da aplicação. • • Permite que objetos individuais cuidem de uma única tarefa, Permite que objetos individuais cuidem de uma única tarefa,

deixando que a fachada se encarregue de divulgar as suas deixando que a fachada se encarregue de divulgar as suas operações.operações.

Fachadas viabilizam a separação em camadas com alto grau de Fachadas viabilizam a separação em camadas com alto grau de desacoplamento.desacoplamento.

Existem em várias partes da aplicaçãoExistem em várias partes da aplicação • • Fachada da aplicação para interface do usuárioFachada da aplicação para interface do usuário • • Fachada para sistema de persistência: Data Access ObjectFachada para sistema de persistência: Data Access Object

18

CompositeComposite "Compor objetos em estruturas de árvore para "Compor objetos em estruturas de árvore para

representar hierarquias todo-parte. Composite representar hierarquias todo-parte. Composite permite que clientes tratem objetos individuais e permite que clientes tratem objetos individuais e composições de objetos de maneira uniforme." composições de objetos de maneira uniforme." [GoF].[GoF].

19

ProblemaProblema Cliente precisa tratar de maneira uniforme Cliente precisa tratar de maneira uniforme

objetos individuais e composições desses objetos individuais e composições desses objetos.objetos.

20

SoluçãoSolução Tratar grupos e indivíduos diferentes através de Tratar grupos e indivíduos diferentes através de

uma única interface.uma única interface.

21

Estrutura do CompositeEstrutura do Composite

22

Quando Usar?Quando Usar? Sempre que houver necessidade de tratar um Sempre que houver necessidade de tratar um

conjunto como um indivíduo.conjunto como um indivíduo. Funciona melhor se relacionamentos entre os Funciona melhor se relacionamentos entre os

objetos for uma árvore.objetos for uma árvore. • • Caso o relacionamento contenha ciclos, é Caso o relacionamento contenha ciclos, é

preciso tomar precauções adicionais para evitar preciso tomar precauções adicionais para evitar loops infinitos, já que Composite depende de loops infinitos, já que Composite depende de implementações recursivas.implementações recursivas.

Há várias estratégias de implementação.Há várias estratégias de implementação.

23

BridgeBridge"Desacoplar uma abstração de sua implementação para que "Desacoplar uma abstração de sua implementação para que

os dois possam variar independentemente." [GoF].os dois possam variar independentemente." [GoF].

24

Problema (I)Problema (I) Necessidade de um driver.Necessidade de um driver. Exemplo: implementações específicas para tratarExemplo: implementações específicas para tratarobjeto em diferentes meios persistentes.objeto em diferentes meios persistentes.

25

Problema(II)Problema(II) Mas herança complica a implementação.Mas herança complica a implementação.

26

Solução: usar BridgeSolução: usar Bridge

27

Estrutura do BridgeEstrutura do Bridge

28

Quando Usar?Quando Usar? Quando for necessário evitar uma ligação Quando for necessário evitar uma ligação

permanente entre a interface e implementação.permanente entre a interface e implementação. Quando alterações na implementação não Quando alterações na implementação não

puderem afetar clientes.puderem afetar clientes. Quando tanto abstrações como implementações Quando tanto abstrações como implementações

precisarem ser capazes de suportar extensão precisarem ser capazes de suportar extensão através de herança.através de herança.

Quando implementações são compartilhadas Quando implementações são compartilhadas entre objetos desconhecidos do cliente.entre objetos desconhecidos do cliente.

29

SingletonSingleton "Garantir que uma classe só tenha uma única "Garantir que uma classe só tenha uma única

instância, e prover um ponto de acesso global a instância, e prover um ponto de acesso global a ela." [GoF].ela." [GoF].

30

ProblemaProblema Garantir que apenas um objeto exista, independente do Garantir que apenas um objeto exista, independente do

número de requisições que receber para criá-lo.número de requisições que receber para criá-lo. AplicaçõesAplicações • • Um único banco de dados.Um único banco de dados. • • Um único acesso ao arquivo de log.Um único acesso ao arquivo de log. • • Um único objeto que representa um vídeo.Um único objeto que representa um vídeo. • • Uma única fachada (Façade pattern).Uma única fachada (Façade pattern). Objetivo: garantir que uma classe só tenha uma Objetivo: garantir que uma classe só tenha uma

instância.instância.

31

Estrutura do SingletonEstrutura do Singleton

32

ObserverObserver "Definir uma dependência um-para-muitos entre "Definir uma dependência um-para-muitos entre

objetos para que quando um objeto mudar de objetos para que quando um objeto mudar de estado, todos os seus dependentes sejam estado, todos os seus dependentes sejam notificados e atualizados automaticamente." notificados e atualizados automaticamente." [GoF].[GoF].

33

ProblemaProblema Como garantir que objetos que dependem de outro Como garantir que objetos que dependem de outro

objeto fiquem em dia com mudanças naquele objeto?objeto fiquem em dia com mudanças naquele objeto? Como fazer com que os observadores tomem Como fazer com que os observadores tomem

conhecimento do objeto de interesse?conhecimento do objeto de interesse? Como fazer com que o objeto de interesse atualize os Como fazer com que o objeto de interesse atualize os observadores quando seu estado mudar?observadores quando seu estado mudar? Possíveis riscosPossíveis riscos • • Relacionamento (bidirecional) implica alto acoplamento. Relacionamento (bidirecional) implica alto acoplamento.

Como podemos eliminar o relacionamento bidirecional?Como podemos eliminar o relacionamento bidirecional?

34

Estrutura do ObserverEstrutura do Observer

35

MediatorMediator "Definir um objeto que encapsula como um "Definir um objeto que encapsula como um

conjunto de objetos interagem. Mediator conjunto de objetos interagem. Mediator promove acoplamento fraco ao manter objetos promove acoplamento fraco ao manter objetos que não se referem um ao outro explicitamente, que não se referem um ao outro explicitamente, permitindo variar sua interação permitindo variar sua interação independentemente." [GoF].independentemente." [GoF].

36

ProblemaProblema Como permitir que um grupo de objetos se Como permitir que um grupo de objetos se

comunique entre si sem que haja acoplamento comunique entre si sem que haja acoplamento entre eles?entre eles?

Como remover o forte acoplamento presente Como remover o forte acoplamento presente em relacionamentos muitos para muitos?em relacionamentos muitos para muitos?

Como permitir que novos participantes sejam Como permitir que novos participantes sejam ligados ao grupo facilmente?ligados ao grupo facilmente?

37

SoluçãoSolução Introduzir um mediador.Introduzir um mediador. • • Objetos podem se comunicar sem se conhecer.Objetos podem se comunicar sem se conhecer.

38

Estrutura do MediatorEstrutura do Mediator

39

Descrição da SoluçãoDescrição da Solução Um objeto Mediador deve encapsular toda a comunicação entre Um objeto Mediador deve encapsular toda a comunicação entre

um grupo de objetos.um grupo de objetos. • • Cada objeto participante conhece o mediador mas ignora a Cada objeto participante conhece o mediador mas ignora a

existência dos outros objetos.existência dos outros objetos. • • O mediador conhece cada um dos objetos participantes.O mediador conhece cada um dos objetos participantes. A interface do Mediador é usada pelos colaboradores para iniciar A interface do Mediador é usada pelos colaboradores para iniciar

a comunicação e receber notificações.a comunicação e receber notificações. • • O mediador recebe requisições dos remetentes.O mediador recebe requisições dos remetentes. • • O mediador repassa as requisições aos destinatários.O mediador repassa as requisições aos destinatários. • • Toda a política de comunicação é determinada pelo mediador Toda a política de comunicação é determinada pelo mediador

(geralmente através de uma implementação concreta do (geralmente através de uma implementação concreta do mediador).mediador).

40

ProxyProxy "Prover um substituto ou ponto através do qual "Prover um substituto ou ponto através do qual

um objeto possa controlar o acesso a outro." um objeto possa controlar o acesso a outro." [GoF].[GoF].

41

ProblemaProblema Sistema quer utilizar objeto real...Sistema quer utilizar objeto real...

Mas ele não está disponível (remoto, Mas ele não está disponível (remoto, inaccessível, ...)inaccessível, ...)

42

Problema(cont..)Problema(cont..) Solução: arranjar um intermediário que saiba se Solução: arranjar um intermediário que saiba se

comunicar com ele eficientemente.comunicar com ele eficientemente.

43

Estrutura do ProxyEstrutura do Proxy Cliente usa intermediário em vez de sujeito real.Cliente usa intermediário em vez de sujeito real. Intermediário suporta a mesma interface que Intermediário suporta a mesma interface que

sujeito real.sujeito real. Intermediário contém uma referência para o Intermediário contém uma referência para o

sujeito real e repassa chamadas, possivelmente, sujeito real e repassa chamadas, possivelmente, acrescentando informações ou filtrando dados acrescentando informações ou filtrando dados no processo.no processo.

44

Estrutura do Proxy(cont..)Estrutura do Proxy(cont..)

45

Quando usar??Quando usar?? A aplicação mais comum é em objetos distribuídosA aplicação mais comum é em objetos distribuídos Exemplo: RMI (e EJB)Exemplo: RMI (e EJB) • • O Stub é proxy do cliente para o objeto remoto.O Stub é proxy do cliente para o objeto remoto. • • O Skeleton é parte do proxy: cliente remoto chamado O Skeleton é parte do proxy: cliente remoto chamado

pelo Stub.pelo Stub. Outras aplicações típicas:Outras aplicações típicas: • • Image proxy: guarda o lugar de imagem sendo Image proxy: guarda o lugar de imagem sendo

carregada.carregada.

46

Chain of Chain of ResponsibilityResponsibility

"Evita acoplar o remetente de uma requisição ao "Evita acoplar o remetente de uma requisição ao seu destinatário ao dar a mais de um objeto a seu destinatário ao dar a mais de um objeto a chance de servir a requisição. Compõe os chance de servir a requisição. Compõe os objetos em cascata e passa a requisição pela objetos em cascata e passa a requisição pela corrente até que um objeto a sirva." [GoF].corrente até que um objeto a sirva." [GoF].

47

ProblemaProblema Permitir que vários objetos possam servir a uma Permitir que vários objetos possam servir a uma

requisição ou repassá-la.requisição ou repassá-la. Permitir divisão de responsabilidades de forma Permitir divisão de responsabilidades de forma

transparente.transparente.

48

Estratégias de Chain Of Estratégias de Chain Of ResponsibilityResponsibility

Pode-se implementar um padrão de várias formas Pode-se implementar um padrão de várias formas diferentes. Cada forma é chamada de estratégia (ou diferentes. Cada forma é chamada de estratégia (ou idiom*)idiom*)

Chain of Responsibility pode ser implementada com Chain of Responsibility pode ser implementada com estratégias que permitem maior ou menor acoplamento estratégias que permitem maior ou menor acoplamento entre os participantes.entre os participantes.

Usando um mediador: só o mediador sabe quem é o Usando um mediador: só o mediador sabe quem é o próximo participante da cadeiapróximo participante da cadeia

Usando delegação: cada participante conhece o seu Usando delegação: cada participante conhece o seu Sucessor.Sucessor.

49

Factory MethodFactory Method "Definir uma interface para criar um objeto, mas "Definir uma interface para criar um objeto, mas

deixar que subclasses decidam que classe deixar que subclasses decidam que classe instanciar. Factory Method permite que uma instanciar. Factory Method permite que uma classe delegue a responsabilidade de classe delegue a responsabilidade de instanciamento às subclasses." [GoF].instanciamento às subclasses." [GoF].

50

ProblemaProblema O acesso a um objeto concreto será através da O acesso a um objeto concreto será através da

interface conhecida através de sua superclasse, interface conhecida através de sua superclasse, mas o cliente também não quer (ou não pode) mas o cliente também não quer (ou não pode) saber qual implementação concreta está usando.saber qual implementação concreta está usando.

51

Como Implementar?Como Implementar? É possível criar um objeto sem ter conhecimento algum É possível criar um objeto sem ter conhecimento algum

de sua classe concreta?de sua classe concreta? • • Esse conhecimento deve estar em alguma parte do Esse conhecimento deve estar em alguma parte do

sistema, mas não precisa estar no cliente.sistema, mas não precisa estar no cliente. • • FactoryMethod define uma interface comum para FactoryMethod define uma interface comum para

criar objetos.criar objetos. • • O objeto específico é determinado nas diferentes O objeto específico é determinado nas diferentes

implementações dessa interface.implementações dessa interface. • • O cliente do FactoryMethod precisa saber sobre O cliente do FactoryMethod precisa saber sobre

implementações concretas do objeto criador do implementações concretas do objeto criador do produto desejado.produto desejado.

52

Estrutura de Estrutura de Factory MethodFactory Method

53

Abstract FactoryAbstract Factory "Prover uma interface para criar famílias de "Prover uma interface para criar famílias de

objetos relacionados ou dependentes sem objetos relacionados ou dependentes sem especificar suas classes concretas." [GoF].especificar suas classes concretas." [GoF].

54

ProblemaProblema Criar uma família de objetos relacionados sem Criar uma família de objetos relacionados sem

conhecer suas classes concretas.conhecer suas classes concretas.

55

Estrutura do Abstract FactoryEstrutura do Abstract Factory

56

PrototypePrototype "Especificar os tipos de objetos a serem criados "Especificar os tipos de objetos a serem criados

usando uma instância como protótipo e criar usando uma instância como protótipo e criar novos objetos ao copiar este protótipo." [GoF]novos objetos ao copiar este protótipo." [GoF]

57

ProblemaProblema Criar um objeto novo, mas aproveitar o estado Criar um objeto novo, mas aproveitar o estado

previamente existente em outro objeto.previamente existente em outro objeto.

58

Estrutura PrototypeEstrutura Prototype

59

ResumoResumo O padrão Prototype permite que um cliente crie O padrão Prototype permite que um cliente crie

novos objetos ao copiar objetos existentes.novos objetos ao copiar objetos existentes. Uma vantagem de criar objetos deste modo éUma vantagem de criar objetos deste modo époder aproveitar o estado existente de um objeto.poder aproveitar o estado existente de um objeto.

60

Template MethodTemplate Method "Definir o esqueleto de um algoritmo dentro de "Definir o esqueleto de um algoritmo dentro de

uma operação, deixando alguns passos a serem uma operação, deixando alguns passos a serem preenchidos pelas subclasses. Template Method preenchidos pelas subclasses. Template Method permite que suas subclasses redefinam certos permite que suas subclasses redefinam certos passos de um algoritmo sem mudar sua passos de um algoritmo sem mudar sua estrutura." [GoF]estrutura." [GoF]

61

ProblemaProblema

62

Solução:Template MethodSolução:Template Method • • O que é um Template MethodO que é um Template Method • • Um Template Method define um algoritmo em Um Template Method define um algoritmo em

termos de operações abstratas que subclasses termos de operações abstratas que subclasses sobrepõem para oferecer comportamento concretosobrepõem para oferecer comportamento concreto

Quando usar?Quando usar? • • Quando a estrutura fixa de um algoritmo puder ser Quando a estrutura fixa de um algoritmo puder ser

definida pela superclasse deixando certas partes para definida pela superclasse deixando certas partes para serem preenchidos por implementações que podem serem preenchidos por implementações que podem variar.variar.

63

Template Method em JavaTemplate Method em Java

64

StateState "Permitir a um objeto alterar o seu "Permitir a um objeto alterar o seu

comportamento quanto o seu estado interno comportamento quanto o seu estado interno mudar. O objeto irá aparentar mudar de classe." mudar. O objeto irá aparentar mudar de classe." [GoF][GoF]

65

ProblemaProblema Objetivo: usar objetos para representar estados e Objetivo: usar objetos para representar estados e polimorfismo para tornar a execução de tarefas polimorfismo para tornar a execução de tarefas dependentes de estado transparentes.dependentes de estado transparentes.

66

ExemploExemplo

67

Estrutura do StateEstrutura do State Contexto: define a interface de interesse aos clientesContexto: define a interface de interesse aos clientesmantém uma instância de um EstadoConcreto que define mantém uma instância de um EstadoConcreto que define

o estado atual.o estado atual. Estado:define uma interface para encapsular o Estado:define uma interface para encapsular o

comportamento associado com um estado particular do comportamento associado com um estado particular do contexto.contexto.

EstadoConcreto: Implementa um comportamento EstadoConcreto: Implementa um comportamento associado ao estado do contexto.associado ao estado do contexto.

68

Estrutura State(Cont..)Estrutura State(Cont..)

69

StrategyStrategy "Definir uma família de algoritmos, encapsular "Definir uma família de algoritmos, encapsular

cada um, e fazê-los intercambiáveis. Strategy cada um, e fazê-los intercambiáveis. Strategy permite que algoritmos mudem permite que algoritmos mudem independentemente entre clientes que os independentemente entre clientes que os utilizam." [GoF]utilizam." [GoF]

70

ProblemaProblema Várias estratégias, escolhidas de acordo com Várias estratégias, escolhidas de acordo com

opções ou condições.opções ou condições.

71

Problema(cont..)Problema(cont..) Idêntico a state na implementação. Diferente na Idêntico a state na implementação. Diferente na

intenção!intenção!

72

Estrutura do StrategyEstrutura do Strategy Um contexto repassa requisições de seus clientes Um contexto repassa requisições de seus clientes

para sua estratégia. Clientes geralmente criam e para sua estratégia. Clientes geralmente criam e passam uma EstrategiaConcreta para o contexto. passam uma EstrategiaConcreta para o contexto. Depois, clientes interagem apenas com o Depois, clientes interagem apenas com o contexto.contexto.

Estrategia e Contexto interagem para Estrategia e Contexto interagem para implementar o algoritmo escolhido. Um implementar o algoritmo escolhido. Um contexto pode passar todos os dados necessários contexto pode passar todos os dados necessários ou uma cópia de si próprio.ou uma cópia de si próprio.

73

Estrutura Strategy(cont..)Estrutura Strategy(cont..)

74

Quando Usar?Quando Usar? Quando classes relacionadas forem diferentes apenas Quando classes relacionadas forem diferentes apenas

no seu comportamento.no seu comportamento. • • Strategy oferece um meio para configurar a classe Strategy oferece um meio para configurar a classe

com um entre vários comportamentos.com um entre vários comportamentos. Quando você precisar de diferentes variações de um Quando você precisar de diferentes variações de um mesmo algoritmo.mesmo algoritmo. Quando um algoritmo usa dados que o cliente não deve Quando um algoritmo usa dados que o cliente não deve

conhecer.conhecer. Quando uma classe define muitos comportamentos, Quando uma classe define muitos comportamentos, e estes aparecem como múltiplas declarações condicionais e estes aparecem como múltiplas declarações condicionais

em suas operações.em suas operações.

75

CommandCommand "Encapsular uma requisição como um objeto, "Encapsular uma requisição como um objeto,

permitindo que clientes parametrizem diferentes permitindo que clientes parametrizem diferentes requisições, filas ou requisições de log, e requisições, filas ou requisições de log, e suportar operações reversíveis." [GoF]suportar operações reversíveis." [GoF]

76

ProblemaProblema

77

Estrutura do CommandEstrutura do Command

78

IteratorIterator "Prover uma maneira de acessar os elementos de "Prover uma maneira de acessar os elementos de

um objeto agregado seqüencialmente sem expor um objeto agregado seqüencialmente sem expor sua representação interna." [GoF]sua representação interna." [GoF]

79

ProblemaProblema

80

Para que serve?Para que serve? Iterators servem para acessar o conteúdo de um agregado sem expor sua Iterators servem para acessar o conteúdo de um agregado sem expor sua

representação interna.representação interna. Oferece uma interface uniforme para atravessar diferentesestruturas Oferece uma interface uniforme para atravessar diferentesestruturas

agregadasagregadas Iterators são implementados nas coleções do Java. É obtido através do Iterators são implementados nas coleções do Java. É obtido através do

método iterator() de Collection, que devolve uma instância de método iterator() de Collection, que devolve uma instância de java.util.Iterator.java.util.Iterator.

Interface java.util.Iterator: Interface java.util.Iterator: package java.util;package java.util;public interface Iterator<E> {public interface Iterator<E> {boolean hasNext();boolean hasNext();Object next();Object next();void remove();void remove();}} iterator() é um exemplo de Factory Methoditerator() é um exemplo de Factory Method

81

DecoratorDecorator "Anexar responsabilidades adicionais a um "Anexar responsabilidades adicionais a um

objeto dinamicamente. Decorators oferecem objeto dinamicamente. Decorators oferecem uma alternativa flexível ao uso de herança para uma alternativa flexível ao uso de herança para estender uma funcionalidade." [GoF]estender uma funcionalidade." [GoF]

82

Problema(1)Problema(1) A primeira idéia é criar subclasses que A primeira idéia é criar subclasses que

implementem as funcionalidades desejadasimplementem as funcionalidades desejadas ListaSincronizadaListaSincronizada ListaComEventosListaComEventos ListaNaoModificavelListaNaoModificavel

83

Problema(2)Problema(2) Mas e se desejarmos mais de uma funcionalidade Mas e se desejarmos mais de uma funcionalidade

ao mesmo tempo?ao mesmo tempo? Nesse caso teremos uma explosão de classes. As Nesse caso teremos uma explosão de classes. As

novas classes (além das 3 anteriores) poderiam novas classes (além das 3 anteriores) poderiam ser chamadas:ser chamadas: ListaNaoModificavelSincronizadaListaNaoModificavelSincronizada ListaComEventosNaoModificavelListaComEventosNaoModificavel ListaComEventosSincronizadaListaComEventosSincronizada ListaComEventosNaoModificavelSincronizadaListaComEventosNaoModificavelSincronizada

84

Problema(3)Problema(3) Necessidade de adicionar responsabilidades aos Necessidade de adicionar responsabilidades aos

objetos, com a impossibilidade de criar extensões das objetos, com a impossibilidade de criar extensões das subclasses;subclasses;

Às vezes é até possível realizar um grande número Às vezes é até possível realizar um grande número de extensões independentes, mas podem causar uma de extensões independentes, mas podem causar uma explosão de subclasses para suportar todas as explosão de subclasses para suportar todas as combinações;combinações;

85

EstruturaEstrutura

86

ExemploExemplo

87

Exemplo c/código FonteExemplo c/código Fonte

88

Quando usar???Quando usar??? Utilizado para adicionar responsabilidades a Utilizado para adicionar responsabilidades a

objetos individuais de forma dinâmica e objetos individuais de forma dinâmica e transparente, isto é, sem afetar outros objetos, transparente, isto é, sem afetar outros objetos, da mesma forma, quando se quer retirar da mesma forma, quando se quer retirar responsabilidades;responsabilidades;

Quando a utilização de heranças para a Quando a utilização de heranças para a implementação do mesmo afetará a implementação do mesmo afetará a flexibilidade do sistema;flexibilidade do sistema;

89

Padrão Arquitetural: MVCPadrão Arquitetural: MVC Padrões Arquiteturais: expressam o esquema ou Padrões Arquiteturais: expressam o esquema ou

organização estrutural fundamental de sistemas organização estrutural fundamental de sistemas de software ou hardwarede software ou hardware

Padrões de Projeto: Define soluções de Padrões de Projeto: Define soluções de problemas de projetos de software orientado a problemas de projetos de software orientado a objetos.objetos.

90

MVCMVC Dividir um componente ou uma aplicação Dividir um componente ou uma aplicação

interativa (subsistema) em três partes lógicas:o interativa (subsistema) em três partes lógicas:o modelo (model) que contém funcionalidades e modelo (model) que contém funcionalidades e dados; visões(views) mostram informações para dados; visões(views) mostram informações para o usuário;controladores (controllers) manipulam o usuário;controladores (controllers) manipulam os eventos das entradas. Um mecanismo de os eventos das entradas. Um mecanismo de propagação de mudanças garante a consistência propagação de mudanças garante a consistência entre a interface do usuário e o modelo.entre a interface do usuário e o modelo.

91

ProblemaProblema Estender a funcionalidade de uma aplicação Estender a funcionalidade de uma aplicação

através apenas da modificação dos menus, da através apenas da modificação dos menus, da visão do usuário.visão do usuário.

92

SoluçãoSolução O padrão MVC divide a aplicação em três O padrão MVC divide a aplicação em três

camadas: Entrada (View), Processamento camadas: Entrada (View), Processamento (Controller) e Saída (Model).(Controller) e Saída (Model).

Utilizar o padrão Observer e estendê-lo para Utilizar o padrão Observer e estendê-lo para permitir o controle das janelas baseado-em-permitir o controle das janelas baseado-em-eventos. O Padrão MVC estende o Observer eventos. O Padrão MVC estende o Observer incorporando um elemento controlador incorporando um elemento controlador (Controller). (Controller).

93

Componentes do MVC(1)Componentes do MVC(1) O O ModeloModelo diz respeito ao gerenciamento da diz respeito ao gerenciamento da

informação e ao comportamento da aplicação. O informação e ao comportamento da aplicação. O ModeloModelo seria uma mera representação do seria uma mera representação do conteúdo do banco de dados ou entidades de conteúdo do banco de dados ou entidades de domínio e pelas regras de negócio intrínsecas a domínio e pelas regras de negócio intrínsecas a essas entidades. essas entidades.

A A VisãoVisão é responsável por apresentar as é responsável por apresentar as entidades de domínio ao usuário, constituindo a entidades de domínio ao usuário, constituindo a parte visível do sistema.parte visível do sistema.

94

Componentes do MVC(2)Componentes do MVC(2) O O ControleControle garante o total desacoplamento garante o total desacoplamento

entre essas duas partes principais da aplicação. O entre essas duas partes principais da aplicação. O Controle interpreta as ações do usuário Controle interpreta as ações do usuário provenientes da Visão e comanda a execução provenientes da Visão e comanda a execução das regras de negócio contidas no Modelo, além das regras de negócio contidas no Modelo, além disso, comanda a Visão para que ela apresente disso, comanda a Visão para que ela apresente adequadamente a informação ao usuário. adequadamente a informação ao usuário.

95

Componentes do MVC(3)Componentes do MVC(3)

View - Não esta preocupada em como a View - Não esta preocupada em como a informação foi obtida ou onde ela foi informação foi obtida ou onde ela foi obtida apenas exibe a informaçãoobtida apenas exibe a informação Inclui os elementos de exibição no cliente : Inclui os elementos de exibição no cliente :

HTML , XML , ASP , Applets .HTML , XML , ASP , Applets . É a camada de interface com o usuário.É a camada de interface com o usuário. É usada para receber a entrada de dados e É usada para receber a entrada de dados e

apresentar o resultado.apresentar o resultado.

96

Componentes do MVC(4)Componentes do MVC(4) Model - É o coração da aplicação . Responsável Model - É o coração da aplicação . Responsável

por tudo que a aplicação vai fazer.por tudo que a aplicação vai fazer. modela os dados e o comportamento por atrás do modela os dados e o comportamento por atrás do

processo de negócios.processo de negócios. se preocupa apenas com o armazenamento , se preocupa apenas com o armazenamento ,

manipulação e geração de dados.manipulação e geração de dados. É um encapsulamento de dados e de É um encapsulamento de dados e de

comportamento independente da apresentação.comportamento independente da apresentação.

97

Componentes do MVC(5)Componentes do MVC(5) Camada de Controle - determina o fluxo da Camada de Controle - determina o fluxo da

apresentação servindo como uma camada apresentação servindo como uma camada intermediária entre a camada de apresentação e a intermediária entre a camada de apresentação e a lógica.lógica. controla e mapeia as ações.controla e mapeia as ações.

98

Estrutura MVC(1)Estrutura MVC(1)

99

Estrutura MVC(2)Estrutura MVC(2)

100

Obrigado!!!!Obrigado!!!!E-mail: [email protected]: [email protected]