• Nenhum resultado encontrado

aulaDesignPatter New

N/A
N/A
Protected

Academic year: 2021

Share "aulaDesignPatter New"

Copied!
27
0
0

Texto

(1)

Design Patterns

(2)

Design Patterns

A definição clássica para

Pattern

é a seguinte: "um

Pattern

descreve um problema que se repete várias

vezes em um determinado meio, e em seguida descreve

o núcleo da sua solução, de modo que esta solução

possa ser usada milhares e milhares de vezes”

[

Christopher Alexander

].

Patterns

são soluções genéricas e reutilizáveis, aplicáveis

em classes de problemas bem conhecidos. Soluções que

um dia funcionaram, tornam-se receitas para situações

similares (desde que estas soluções tenham sido

(3)

Patterns - Histórico

A idéia de armazenar informação sobre padrões

observados em um contexto pode ser atribuída ao

arquiteto Christopher Alexander e foi elaborada no

contexto de arquitetura.

 Alexander define um ordem para a aplicação de patterns;  O enfoque do pattern é problema em questão;

 É sustentada a teoria que patterns podem gerar arquiteturas

completas.

No seu livro

The Timeless Way of Building,

mostra como

patterns

podem ser aplicados na construção de casas,

assim como no planejamento de bairros e cidades.

(4)

Patterns - Histórico

Em 1994, 4 autores – Erich Gamma, Richard

Helm, Ralph Johnson e John Vlissides

-publicaram o primeiro catálogo de

Design

Patterns

para programas orientado a objetos:

Design Patterns

– Elements of Reusable

Object-Oriented software (GoF book).

(5)

Classificações de Patterns

Podem ser classificados quanto ao:

Escopo:

Classes;  Objetos.

Quanto ao seu propósito:

 Criacional;  Estrutural;

(6)

Organização de Design Patterns

Quanto ao escopo:

classes:

patterns

tratam do relacionamento entre

classes e subclasses;

objetos:

patterns

tratam relacionamentos entre

objetos e por isso podem ser alterados em tempo de

execução.

Ex: Um padrão estrutural de classe utiliza herança

para compor as classes, enquanto um padrão

estrutural de objeto descreve como estes devem ser

agrupados.

(7)

Organização de Design Patterns

Quanto ao seu propósito:

Criacional;

Estrutural;

(8)

Organização de Design Patterns

Quanto ao seu propósito:

Criacional:

 Diz respeito ao processo de criação de um objeto;

 Ex1: Builder - separa a construção de um objeto complexo

de sua representação, desta maneira um mesmo processo pode ser utilizado para criar diferentes representações.

Estrutural;

(9)

Organização de Design Patterns

Quanto ao seu propósito:

Criacional;

Estrutural:

 Diz respeito a composição de objetos e classes;

 Ex: Composite - Compõe objetos em árvores de agregação

(relacionamento parte-todo). O Composite permite que objetos agregados sejam tratados como um único objeto.

(10)

Organização de Design Patterns

Quanto ao seu propósito:

Criacional;

Estrutural;

Comportamental (funcionamento):

 Caracteriza o modo como classes e objetos interagem e

compartilham responsabilidades.

 Ex: Iterator - Provê um modo de acesso a elementos de um

agregado de objetos, seqüencialmente, sem exposição de estruturas internas.

(11)

Organização dos Design Patterns

Propósito

Criação Estrutural Funcionamento

Escopo Class Factory Method Adapter (classe) Interpreter

Template Method

Object Abstract Factory Adapter (object) Chain of Responsibility Builder Bridge Command

Prototype Composite Iterator Singleton Decorator Mediator

Façade Memento Flyweight Observer Proxy State

Strategy Visitor

(12)

Descrição de Patterns

Nome do Pattern e Classificação: Passa a fazer parte do vocabulário dos

projetistas.

 Propósito: Respostas para as perguntas - O quê o Pattern faz? Que tipo de

problema ou característica particular de Design ele trata?

 Também Conhecido Como: Conjunto de outros nomes (apelidos) conhecidos

para o Pattern, se existir algum.

 Motivação: Um cenário que ilustra o problema de Design e como as estruturas

de classes e objetos no Pattern o resolvem.

 Aplicação: Respostas para as perguntas - Quais são as situações onde este

Pattern pode ser aplicado? Quais são os exemplos de Designs que ele pode tratar? Como você pode reconhecer estas situações?

 Estrutura: Uma representação gráfica das classes no Pattern.

 Participantes: As classes e/ou objetos que participam no Design Pattern, e

(13)

Descrição de Patterns

Colaborações: Como os participantes interagem para cumprir suas

responsabilidades.

 Conseqüências: Respostas para as perguntas - Como o Pattern

alcança seus objetivos? Quais são os resultados do uso do Pattern?

 Implementação: Dicas e técnicas que Designer deve saber, e

possíveis armadilhas para as quais ele deve estar preparado.

 Código Exemplo: Fragmentos de código que ilustrem como o Pattern

deve ser implementado

 Usos Conhecidos: Exemplos de utilização do Pattern em sistemas já

implementados.

 Patterns Relacionados: Lista de todos os Patterns fortemente

(14)

Iterator

Nome do Pattern e Classificação:  Iterator - Funcional de objeto  Propósito:

 Provê um modo de acesso a elementos de um agregado de objetos,

seqüencialmente, sem exposição de estruturas internas.

 Também Conhecido Como:

 Cursor

 Motivação:

 Um objeto que possua agregações deve permitir que seus elementos

sejam acessados sem que sua estrutura interna seja exposta. De uma maneira geral pode se desejar que estes elemento sejam percorridos em várias ordens. De frente para trás, vice-versa, ou mesmo em ordem

aleatória, sem no entanto ter que modificar a interface de lista

(15)

Iterator

 Motivação: Cabe ao pattern o acesso e o percorrimento da lista de

diferentes formas. Estas funções são armazendas em um objeto

Iterator. A classe Iterator define um interface para o acesso aos elemento da lista.

 Os objetos listas são

responsáveis por criar seus

próprios iteradores e o fazem através do “Factory Method”

Iterator First() Next() IsDone() CurrentItem() AbstractList CreateIterator() Count() Append() Remove() <<Interface>> List CreateIterator() ListIterator SkipListIterator SkipList CreateIterator() Cliente

(16)

Iterator

Aplicação: O uso do

pattern

se aplica quando se quer:

 acessar o conteúdo de objeto agregados sem expor sua

representação interna;

 suportar mais de uma maneira de percorrer a lista;

 prover interface única para percorrer estruturas agregadas

(17)

Iterator

 Estrutura: Iterator First() Next() IsDone() CurrentItem() Aggregate CreateIterator() <<Interface>> ConcreteAggregate CreateIterator() ConcreteIterator return new ConcreteIterator (this) Cliente

(18)

Iterator

 Participantes:  Iterator

Define um interface para o acesso e percorrimento;

 ConcreteIterator

 Implementa a interface do Iterator;

 Mantéma informação sobre o elemento percorrido;

 Aggregate

 Define um interface para a criação do objeto Iterator;

 ConcreteAggregate

 Implementa o método da interface que retorna uma instância do

ConcreteIterator.

 Colaborações: ConcreteIterator mantém a referência ao objeto que

(19)

Iterator

 Conseqüências:

 Suporta variações na ordem de percorrimento de maneira fácil;  Simplifica a interface Aggregate;

 Mais de um percorrimento pode acontecer, já que o seu estado é

armazenado em cada Iterator.

 Implementação: …  Código Exemplo: ...  Usos Conhecidos: ...  Patterns Relacionados:

 Composite: Estruturas recursivas;  Factory Method;

(20)

Dicas

Definir o problema, uma possível solução, todavia sem

entrar em detalhes de implementação;

Verificar o propósito de cada

pattern

, segundo os intuitos

de criação, estruturação e comportamento;

Estudar como cada

pattern

pode se relacionar;

(21)

Catálogo de Design Patterns

Abstract Factory: Provê uma interface para criação de famílias de

objetos relacionados ou interdependentes. Remove a dependência entre o cliente, que usa os objetos, e a classe dos objetos

produzidos.

 Adapter: Converte a interface de uma classe em outra, esperada pelo

cliente. O Adapter permite que classes que antes não poderiam

trabalhar juntas, por incompatibilidade de interfaces, possam agora fazê-lo.

 Bridge: Separa uma abstração de sua implementação, de modo que

ambas possam variar independentemente.

 Builder: Provê uma interface genérica para a construção incremental

de agregações. Um Builder esconde os detalhes de como os componentes são criados, representados e compostos.

(22)

Catálogo de Design Patterns

Chain of Responsibility: Encadeia os objetos receptores e transporta a

mensagem através da corrente até que um dos objetos a responda. Assim, separa (provê loose coupling) objetos transmissores dos

receptores, dando a chance de mais de um objeto poder tratar a mensagem.

 Command: Encapsula uma mensagem como um objeto, de modo que se

possa parametrizar clientes com diferentes mensagens. Separa, então, o criador da mensagem do executor da mesma.

 Composite: Compõe objetos em árvores de agregação (relacionamento

parte-todo). O Composite permite que objetos agregados sejam tratados como um único objeto.

 Decorator: Anexa responsabilidades adicionais a um objeto

dinâmicamente. Provê uma alternativa flexível para extensão de funcionalidade, sem ter que usar Herança.

(23)

Catálogo de Design Patterns

Facade: Provê uma interface unificada para um conjunto de interfaces

em um subsistema. O Facade define uma interface alto nível para facilitar o uso deste subsistema.

 Factory Method: Define uma interface para criação de um objeto,

permitindo que as suas subclasses decidam qual classe instanciar. O Factory Method deixa a responsabilidade de instanciação para as subclasses.

 Flyweight: Usa o compartilamento para dar suporte eficiente a um

grande número de objetos com alto nível de granularidade.

 Interpreter: Usado para definição de linguagem. Define

representações para gramáticas e abstrações para análise sintática.

 Iterator: Provê um modo de acesso a elementos de um agregado de

(24)

Catálogo de Design Patterns

Mediator: Desacopla e gerencia as colaborações entre um grupo de

objetos. Define um objeto que encapsula as interações dentre desse grupo.

 Memento: Captura e externaliza o estado interno de um objeto

(captura um "snapshot"). O Memento não viola o encapsulamento.

 Observer: Provê sincronização, coordenação e consistência entre

objetos relacionados.

 Prototype: Especifica os tipos de objetos a serem criados num sistema,

usando uma instância protótipo. Cria novos objetos copiando este protótipo.

 Proxy: Provê Design para um controlador de acesso a um objeto.  Singleton: Assegura que uma classe tenha apenas uma instância e

(25)

Catálogo de Design Patterns

 State: Deixa um objeto mudar seu comportamento quando seu

estado interno muda, mudando, efetivamente, a classe do objeto.

 Strategy: Define uma família de algoritmos, encapsula cada um

deles, e torna a escolha de qual usar flexível. O Strategy desacopla os algoritmos dos clientes que os usa.

 Template Method: Define o esqueleto de um algoritmo em uma

operação. O Template Method permite que subclasses componham o algoritmo e tenham a possibilidade de redefinir certos passos a

serem tomados no processo, sem contudo mudá-lo.

 Visitor: Representa uma operação a ser realizada sobre elementos da

estrutura de um objeto. O Visitor permite que se crie um nova

operação sem que se mude a classe dos elementos sobre as quais ela opera.

(26)

Exercício de Design Patterns

1.Defina seu entendimento sobre design patters  2.Descreva a estrutura de design Pattern

 3.Descreva e identifique quais são as classificações de design

Pattern

 4.Quais são as situações onde um Pattern pode ser aplicado e

como você pode reconhecer estas situações?

 5.Quais as vantagens de adotar Design Pattern  6.Quais as desvantagens de adotar Design Pattern

 7.Suponha que você irá desenvolver um aplicativo WEB responsável

por cadastrar informações de Clientes e Fornecedores, qual Pattern você usaria e Por que ?

(27)

Exercício de Design Patterns

8.Preencha abaixo as informações do Pattern que você escolheu.

8.1.Nome do Pattern e Classificação: 8.2.Propósito:

8.3.Também Conhecido Como: Conjunto de outros nomes (apelidos)

conhecidos para o Pattern, se existir algum.

8.4.Motivação: 8.5.Aplicação:

8.6.Estrutura: Uma representação gráfica das classes no Pattern.8.7.Participantes: 8.8.Colaborações: 8.9. Consequências: 8.10.Implementação: 8.11.Código Exemplo: 8.12.Usos Conhecidos:8.13.Patterns Relacionados:

Referências

Documentos relacionados

E) CRIE NO SEU CADERNO UM TÍTULO PARA ESSA HISTÓRIA EM QUADRINHOS.. 3- QUE TAL JUNTAR AS SÍLABAS ABAIXO PARA FORMAR O NOME DE CINCO SUGESTÕES DE PRESENTE PARA O DIA

No 8º dia após o último comprimido de DELLAX 20 e DELLAX 30 (ou seja, após os 7 dias da semana de intervalo), inicie a fita seguinte, mesmo que a hemorragia não tenha parado.

A raiva é uma doença viral que acomete os animais domésticos, silvestres e destes para o homem, causando uma doença com sintomatologia?. nervosa, aguda e fatal, levando ao óbito

Diferentemente do prazo fixado para pagamento dos precató- rios, as RPVs são depositadas pelos Tribunais Regionais Federais nos bancos ofi- ciais, mensalmente, obedecido o prazo de

´e aquele pelo qual a filosofia alem˜a traduziu, depois de Kant, o latim existentia, mas Heidegger deu-lhe um sentido muito particu- lar, j´a que designa na sua filosofia

Varr edura TCP Window ( cont inuação) ACK- win manipulado Não Responde ACK- win manipulado ICMP Tipo 3 Firewall Negando Firewall Rejeitando Scanner de Porta... Var r edur a FI N/

Nas Lições de Epicteto há inúmeras passagens onde o tó soma é apresentado como o primeiro item listado entre aquelas coisas “não sobre nós”, ou seja, que não nos

Concentração de determinada substância, acima da qual podem ocorrer alterações prejudiciais à qualidade do solo e da água subterrânea VALOR DE PREVENÇÃO -