padrões de design

Post on 05-Jan-2016

42 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Padrões de Design. Toacy Cavalcante de Oliveira. Problema. Análise vs Projeto. Análise Modela o mundo real. Usualmente não é “mapeável”para o Projeto pois tende a ser ineficiente/ineficaz. Projeto Atribuição de Responsabilidades. Boas práticas (+Coesão, -Acoplamento). - PowerPoint PPT Presentation

TRANSCRIPT

Padrões de Design

Toacy Cavalcante de Oliveira

2April 20, 2023

Problema

3April 20, 2023

Análise vs Projeto

AnáliseModela o mundo real.Usualmente não é “mapeável”para o Projeto

pois tende a ser ineficiente/ineficaz. Projeto

Atribuição de Responsabilidades.Boas práticas (+Coesão, -Acoplamento)

4April 20, 2023

Como compatibilizar os dois mundos? Tipicamente, bons projetistas são

formados após um longo período de experiência.

São hábeis praticantes do conceitos básicos de ES.Abstração, Flexibilidade e Modularidade

5April 20, 2023

Problema

Como capturar este conhecimento de modo a transmiti-lo a outros desenvolvedores para que estes também se tornem experts?

Design Patterns

6April 20, 2023

Introdução

7April 20, 2023

Definições

“um padrão descreve um problema que se repete várias vezes em um determinado meio, descrevendo o núcleo de sua solução, de modo que esta solução possa ser usada milhares e milhares de vezes."

[Christopher Alexander]

8April 20, 2023

Definições

Os Padrões de Design formam um conjunto de regras que descrevem como realizar certas tarefas no âmbito do desenvolvimento de software [Pree, 1994].

9April 20, 2023

Definições

Um Padrão de Design visa resolver um problema recorrente de design que surge em determinadas situações [Buschmann et al., 1996].

Os Padrões de Design identificam e definem abstrações que estão acima do nível de uma única classe e de suas instâncias, ou de componentes [Gamma et al., 1994].

10April 20, 2023

Motivação para DP

Novos problemas são geralmente similares a problemas já resolvidos anteriormente.

As soluções para problemas similares seguem padrões recorrentes.

11April 20, 2023

Benefícios

Servem de guia para a solução do problema. Ajudam a gerenciar a complexidade do software Estimulam a aplicação e disseminação de boas

práticas da POO. Definem um vocabulário comum entre os

projetistas, o que ajuda na disseminação de soluções bem sucedidas.

12April 20, 2023

Histórico

13April 20, 2023

De onde vêm?

Christofer Alexander A Pattern Language, Oxford University Press 1977 Timeless way of Building, Oxford University Press

1979

C.A. era arquiteto e identificou uma série de padrões utilizados na construção de edificações.

14April 20, 2023

OOPSLA

Em 1987, Ward Cunningham e Kent Beck usaram algumas das idéias de Alexander no trabalho sobre GUI intitulado “Using Pattern Languages for Object-Oriented Programs” [OOPSLA-87].

15April 20, 2023

Gang-of-Four

Em 1994, Erich Gamma, Richard Helm, John Vlissides e Ralph Johnson publicaram um dos livros mais importantes de Engenharia de Software da década de 90: “Design Patterns: Elements of Reusable Object-Oriented Software” [GoF].

16April 20, 2023

Livros

Design Patterns: Elements of Reusable Object-Oriented Software

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Addison-Wesley, October 1994

17April 20, 2023

DescrevendoPadrões

18April 20, 2023

4 Elementos Essenciais

Nome do padrão

Problema

Solução

Conseqüências

19April 20, 2023

Nome

Serve de referência para o padrão.

Aumenta o vocabulário de projeto.

Deve ser único.

20April 20, 2023

Problema

Quando aplicar um padrão.Contexto.Lista de condições que

justifiquem aplicar o padrão.

21April 20, 2023

Solução

Elementos que compõem o padrão.

“Arranjo” geral dos seus elementos.

Responsabilidades e colaborações destes elementos.

22April 20, 2023

Conseqüência

AnálisesVantagens / desvantagensFlexibilidade, capacidade de

extensão ou portabilidade.

23April 20, 2023

Exemplo

24April 20, 2023

Identificação

Nome: Observer Problema: Notificar a ocorrência de um evento a

uma lista de objetos. Solução: Observers delegam a responsabilidade

de monitoramento para um objeto central o Subject.

Consequencias: Permite variar Subject e Observer de forma independente. Permite comunicação broadcast.

25April 20, 2023

Observer - Elementos

26April 20, 2023

Catálogo

27April 20, 2023

GoF & POSA

GoF (“the gang of four”) catalogue“Design Patterns: Elements of Reusable

Object Oriented Software,” Gamma, Helm, Johnson,Vlissides, Addison-Wesley, 1995

POSA cataloguePattern-Oriented Software

Architecture,Buschmann, et al.; Wiley, 1996

28April 20, 2023

Estrutura do Catálogo

Classifica padrões de acordo com seu propósito,De CriaçãoEstruturalComportamental

e escopo.Objeto Classe

29April 20, 2023

Quanto ao escopo

ClassesPadrões tratam do relacionamento entre

classes e subclasses;

ObjetosPadrões tratam relacionamentos entre

objetos e por isso podem ser alterados em tempo de execução.

30April 20, 2023

De Criação

Diz respeito ao processo ou ciclo de criação de um objeto. Escopo classe: delega a criação de um objeto

para alguma de suas subclasses.

Escopo objeto: delega a criação de um objeto para outro objeto

31April 20, 2023

Estrutural

Diz respeito a composição de objetos e classes;Escopo classe: Utilizam herança para compor

objetos

Escopo Objeto: Descreve formas de compor objetos.

32April 20, 2023

Comportamental

Caracteriza o modo como classes e objetos interagem e compartilham responsabilidades.Escopo Classe: Utiliza herança para

descrever algoritmos e controle de fluxo.Escopo Objeto: Descreve como um grupo de

objetos cooperam de modo a executar uma tarefa.

33April 20, 2023

Visão Geral

PropósitoCriação Estrutural Comportamental

Escopo Class Factory Method Adapter (classe) InterpreterTemplate Method

Object Abstract Factory Adapter (object) Chain of ResponsibilityBuilder Bridge CommandPrototype Composite Iterator Singleton Decorator Mediator

Façade MementoFlyweight ObserverProxy State

StrategyVisitor

34April 20, 2023

Estrutura Interna

Além das 4 características essenciais, o Catálogo do GoF define outras características para descrever padrões.

35April 20, 2023

Estrutura Interna 1/3

Nome do Padrão e Classificação Passa a fazer parte do vocabulário dos projetistas.

Propósito O quê o Padrão faz? Que tipo de problema ou característica particular de projeto ele trata?

Também Conhecido Como: Conjunto de outros nomes (apelidos) conhecidos para o Padrão, se existir

algum.

Motivação Um cenário que ilustra o problema de projeto e como as estruturas de classes e

objetos no Padrão o resolvem.

36April 20, 2023

Estrutura Interna 2/3

Aplicação Quais são as situações onde este padrão pode ser aplicado? Quais são os exemplos de projetos que ele pode tratar? Como você pode reconhecer estas situações?

Estrutura Uma representação gráfica das classes no padrão

Participantes As classes e/ou objetos que participam no padrão de projeto, e suas

responsabilidades

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

37April 20, 2023

Estrutura Interna 3/3 Conseqüências

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

Implementação Dicas e técnicas que o projetista deve saber, e possíveis armadilhas para as quais ele deve

estar preparado.

Exemplo de Código Fragmentos de código que ilustram como o padrão deve ser implementado

Usos Conhecidos Exemplos de utilização do padrão em sistemas já implementados.

Padrões Relacionados Lista de alguns padrões fortemente relacionados ao padrão em questão e as suas

principais diferenças.

38April 20, 2023

Observer

39April 20, 2023

O padrão Observer

Classificação Comportamental de Objetos

Propósito Provê sincronização, coordenação e consistência

entre objetos relacionados.

Também Conhecido Como: Dependents, Publish-Subscribe

40April 20, 2023

Motivação

Necessidade de manter consistência entre objetos relacionados.

Não existe interesse em tornar as classes fortemente acopladas.

Ex. Planilha e gráfico de barras. Não tem conhecimento um do outro Trabalham em conjunto apresentando uma mesma informação

O padrão observer oferece um mecanismo para resolver esse problema

Subject Possui um conjunto de observers.

Notifica seus observers quando sofre uma mudança de estado

41April 20, 2023

Aplicabilidade

Quando uma mudança em um objeto exige mudanças em outros, e não são conhecidos quantos devem ser mudados.

Quando um objeto deve ser capaz de notificar outros objetos sem que estes sejam fortemente acoplados.

42April 20, 2023

Estrutura

43April 20, 2023

Participantes Subject

conhece seu Observer. Qualquer número de objetos Observer podem observar um Subject provê uma interface para acoplar e desacoplar objetos Observer.

ConcreteSubject guarda o estado de interesse para ConcreteObserver envia uma notificação para seu Observer quando seu estado muda.

Observer define uma interface de atualização para objetos que devem ser notificados sobre mudanças em um

Subject.

ConcreteObserver Mantém uma referência para um objeto ConcreteSubject Guarda o estado que deve ficar consistente com o de Subject Implementa o Observer atualizando a interface para manter seu estado consistente com o de

Subject.

44April 20, 2023

Colaborações

O ConcreteSubject notifica seus observadores sempre que ocorrer uma mudança.

Após ter sido notificado, um ConcreteObserver pode consultar o subject.

45April 20, 2023

Conseqüências

Acoplamento fraco entre o Subject e o Observer

Suporte para comunicações em broadcast

Atualizações inesperadas

46April 20, 2023

Implementação

Observando mais de um subjectSubject ativador é passado como parâmetro

no método update()

Quem dispara a atualização?SubjectCliente

47April 20, 2023

Exemplo de código

48April 20, 2023

Exemplo de código

49April 20, 2023

Exemplo de código

50April 20, 2023

Usos conhecidos

Serviço de Eventos e Serviço de Notificação (CORBA)

51April 20, 2023

Padrões relacionados

Mediator Encapsula a semântica de atualizações complexas, o

ChangeManager atua como um mediador entre subjects e observers

Singleton o ChangeManager pode usar o padrão singleton para

torná-lo único e globalmente acessível.

52April 20, 2023

Catálogo

53April 20, 2023

Catálogo 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.

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.

54April 20, 2023

Catálogo de Padrões de Projeto 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.

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.

55April 20, 2023

Catálogo 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 objetos, sequencialmente,

sem exposição de estruturas internas.

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.

56April 20, 2023

Catálogo 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 provê um ponto

global de acesso a ela.

State: Deixa um objeto mudar seu comportamento quando seu estado interno muda,

mudando, efetivamente, a classe do objeto.

57April 20, 2023

Catálogo

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 alterar sua inetrface.

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.

58April 20, 2023

Utilização

59April 20, 2023

Como utilizar Padrões?

Existem algumas perguntas que auxiliam o emprego de Design Patterns.

A resposta não é exata mas da uma boa direção!

60April 20, 2023

Variação

Existe variação de uma regra de negócio ou implementação?StrategyBridgeProxyDecoratorVisitor

61April 20, 2023

Ex. Strategy

Existe alguma variação na regra?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.

Ex. Feature Alternativas são candidatas para o Strategy.

62April 20, 2023

Interfaces

Existe uma preocupação com interfaces e/ou tratamento de “objetos” incompatíveis?AdapterCompositeFacade

63April 20, 2023

Ex. Facade

Existe a necessidade de simplificar, “OO-ificar” uma classe ou um subsistema?

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.

64April 20, 2023

Desacoplamanto

Existe a necessidade de desacoplar ?

ObserverChain of Responsibility IteratorMediatorState

65April 20, 2023

Ex. State

Existem objetos om muitos estados, implicando e um difícil gerenciamento destes (muito código) ?

Deixa um objeto mudar seu comportamento quando seu estado interno muda, mudando, efetivamente, a classe do objeto.

66April 20, 2023

Criação

Existe a necessidade de criar coisas?Abstract FactoryBuilderFactory Method

67April 20, 2023

Ex. Factory Method

As subclasses necessitam saber/descobrir o que instanciar?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.

68April 20, 2023

Mais sobre Padrões

69April 20, 2023

+Padrões

Analysis patterns – Soluções típicas para problemas de análise recorrente. Analysis Patterns, Fowler; Addison-Wesley, 1996 Applying UML and Patterns, Larman, Prentice-Hall, 1998

Architectural patterns Veja POSA

Idioms Smalltalk Best Practice Patterns, Beck; Prentice Hall, 1997 Concurrent Programming in Java, Lea; Addison-Wesley, 1997 Advanced C++, Coplien, Addison-Wesley, 1992 Effective C++: 50 Specific Ways to Improve Your Programs and Design

(2nd Edition), Scott Meyers, Addison-Wesley, (September 1997) More Effective C++: 35 New Ways to Improve

70April 20, 2023

Anti-Patterns

Soluções de projeto que não respeitam as regras de bons procedimentos em ES.Abstração, Flexibilidade e Modularidade

http://www.antipatterns.com

71April 20, 2023

Anti-Patterns

Fro

m h

ttp

://w

ww

.an

tipa

tte

rns.

com

/brie

fing

/sld

00

6.h

tm

72April 20, 2023

Referências Adicionais

Apostila do Prof. Ivan (no site) Design Patterns Explained: A New

Perspective on Object-Oriented Design, Alan Shalloway, James R. Trott,

http://www.netobjectives.com/dpexplained/download/dpmatrix.pdf

top related