Prévia do material em texto
1
Padrões de ProjetoPadrões de Projeto
Disciplina: Engenharia de Software - 2009.1Disciplina: Engenharia de Software - 2009.1
Professora: Rossana Maria de Castro AndradeProfessora: Rossana Maria de Castro Andrade
Assistente 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 objetoscom 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 tratar
objeto 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 receberequisiçõ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 TemplateMethod 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 clientes
manté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: ricferal@gmail.comE-mail: ricferal@gmail.com
Slide 1
Slide 2
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 10
Slide 11
Slide 12
Slide 13
Slide 14
Slide 15
Slide 16
Slide 17
Slide 18
Slide 19
Slide 20
Slide 21
Slide 22
Slide 23
Slide 24
Slide 25
Slide 26
Slide 27
Slide 28
Slide 29
Slide 30
Slide 31
Slide 32
Slide 33
Slide 34
Slide 35
Slide 36
Slide 37
Slide 38
Slide 39
Slide 40
Slide 41
Slide 42
Slide 43
Slide 44
Slide 45
Slide 46
Slide 47
Slide 48
Slide 49
Slide 50
Slide 51
Slide 52
Slide 53
Slide 54
Slide 55
Slide 56
Slide 57
Slide 58
Slide 59
Slide 60
Slide 61
Slide 62
Slide 63
Slide 64
Slide 65
Slide 66
Slide 67
Slide 68
Slide 69
Slide 70
Slide 71
Slide 72
Slide 73
Slide 74
Slide 75
Slide 76
Slide 77
Slide 78
Slide 79
Slide 80
Slide 81
Slide 82
Slide 83
Slide 84
Slide 85
Slide 86
Slide 87
Slide 88
Slide 89
Slide 90
Slide 91
Slide 92
Slide 93
Slide 94
Slide 95
Slide 96
Slide 97
Slide 98
Slide 99
Slide 100