padrões de design

72
Padrões de Design Toacy Cavalcante de Oliveira

Upload: gerek

Post on 05-Jan-2016

42 views

Category:

Documents


0 download

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

Page 1: Padrões de Design

Padrões de Design

Toacy Cavalcante de Oliveira

Page 2: Padrões de Design

2April 20, 2023

Problema

Page 3: Padrões de Design

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)

Page 4: Padrões de Design

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

Page 5: Padrões de Design

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

Page 6: Padrões de Design

6April 20, 2023

Introdução

Page 7: Padrões de Design

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]

Page 8: Padrões de Design

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].

Page 9: Padrões de Design

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].

Page 10: Padrões de Design

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.

Page 11: Padrões de Design

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.

Page 12: Padrões de Design

12April 20, 2023

Histórico

Page 13: Padrões de Design

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.

Page 14: Padrões de Design

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].

Page 15: Padrões de Design

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].

Page 16: Padrões de Design

16April 20, 2023

Livros

Design Patterns: Elements of Reusable Object-Oriented Software

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Addison-Wesley, October 1994

Page 17: Padrões de Design

17April 20, 2023

DescrevendoPadrões

Page 18: Padrões de Design

18April 20, 2023

4 Elementos Essenciais

Nome do padrão

Problema

Solução

Conseqüências

Page 19: Padrões de Design

19April 20, 2023

Nome

Serve de referência para o padrão.

Aumenta o vocabulário de projeto.

Deve ser único.

Page 20: Padrões de Design

20April 20, 2023

Problema

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

justifiquem aplicar o padrão.

Page 21: Padrões de Design

21April 20, 2023

Solução

Elementos que compõem o padrão.

“Arranjo” geral dos seus elementos.

Responsabilidades e colaborações destes elementos.

Page 22: Padrões de Design

22April 20, 2023

Conseqüência

AnálisesVantagens / desvantagensFlexibilidade, capacidade de

extensão ou portabilidade.

Page 23: Padrões de Design

23April 20, 2023

Exemplo

Page 24: Padrões de Design

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.

Page 25: Padrões de Design

25April 20, 2023

Observer - Elementos

Page 26: Padrões de Design

26April 20, 2023

Catálogo

Page 27: Padrões de Design

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

Page 28: Padrões de Design

28April 20, 2023

Estrutura do Catálogo

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

e escopo.Objeto Classe

Page 29: Padrões de Design

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.

Page 30: Padrões de Design

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

Page 31: Padrões de Design

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.

Page 32: Padrões de Design

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.

Page 33: Padrões de Design

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

Page 34: Padrões de Design

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.

Page 35: Padrões de Design

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.

Page 36: Padrões de Design

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

Page 37: Padrões de Design

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.

Page 38: Padrões de Design

38April 20, 2023

Observer

Page 39: Padrões de Design

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

Page 40: Padrões de Design

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

Page 41: Padrões de Design

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.

Page 42: Padrões de Design

42April 20, 2023

Estrutura

Page 43: Padrões de Design

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.

Page 44: Padrões de Design

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.

Page 45: Padrões de Design

45April 20, 2023

Conseqüências

Acoplamento fraco entre o Subject e o Observer

Suporte para comunicações em broadcast

Atualizações inesperadas

Page 46: Padrões de Design

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

Page 47: Padrões de Design

47April 20, 2023

Exemplo de código

Page 48: Padrões de Design

48April 20, 2023

Exemplo de código

Page 49: Padrões de Design

49April 20, 2023

Exemplo de código

Page 50: Padrões de Design

50April 20, 2023

Usos conhecidos

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

Page 51: Padrões de Design

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.

Page 52: Padrões de Design

52April 20, 2023

Catálogo

Page 53: Padrões de Design

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.

Page 54: Padrões de Design

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.

Page 55: Padrões de Design

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.

Page 56: Padrões de Design

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.

Page 57: Padrões de Design

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.

Page 58: Padrões de Design

58April 20, 2023

Utilização

Page 59: Padrões de Design

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!

Page 60: Padrões de Design

60April 20, 2023

Variação

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

Page 61: Padrões de Design

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.

Page 62: Padrões de Design

62April 20, 2023

Interfaces

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

Page 63: Padrões de Design

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.

Page 64: Padrões de Design

64April 20, 2023

Desacoplamanto

Existe a necessidade de desacoplar ?

ObserverChain of Responsibility IteratorMediatorState

Page 65: Padrões de Design

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.

Page 66: Padrões de Design

66April 20, 2023

Criação

Existe a necessidade de criar coisas?Abstract FactoryBuilderFactory Method

Page 67: Padrões de Design

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.

Page 68: Padrões de Design

68April 20, 2023

Mais sobre Padrões

Page 69: Padrões de Design

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

Page 70: Padrões de Design

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

Page 71: Padrões de Design

71April 20, 2023

Anti-Patterns

Fro

m h

ttp

://w

ww

.an

tipa

tte

rns.

com

/brie

fing

/sld

00

6.h

tm

Page 72: Padrões de Design

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