design patterns orientado a objetos padrões de...

25
Padrões de Design Orientado a Objetos Design Patterns Jorge H. C. Fernandes DI-UFPE, Junho de 1999

Upload: hoangnhi

Post on 17-Dec-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Padrões de DesignOrientado a ObjetosDesign Patterns

Jorge H. C. FernandesDI-UFPE, Junho de 1999

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Padrões de DesignBibliografia

�Design Patterns: Elements of Reusable Object-Oriented Software. Gamma, Helm, Johnson eVlissides, a “Gang dos Quatro”. 1994.

�El Modo Intemporal de Construir. Christopher Alexander, 1977.

�A Pattern Language, Christopher Alexander, 1977.

�Lista de Livros�http://jerry.cs.uiuc.edu/~manolesc/SAG-

Seminar.html

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Padrões de DesignSites na Web

� Padrões de Design OO�http://hillside.net/patterns/patterns.html�http://gee.cs.oswego.edu/dl/cpj/ifc.html�http://st-www.cs.uiuc.edu/cgi-bin/wikic/wikic?JavaAWT�http://mordor.cs.hut.fi/tik-76.278/group6/awtpat.html

� Transactions and Accounts�http://c2.com/cgi/wiki?TransactionsAndAccounts�http://st-www.cs.uiuc.edu/users/johnson/Accounts.html

� Padrões para Processo de Desenvolvimento de Estrutura de Organizações�http://www.bell-labs.com/~cope/Patterns/Process/

� Padrões de Reengenharia�http://www.iam.unibe.ch/~famoos/patterns/

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Christopher Alexander(Arquiteto e Urbanista)

“Cada padrão descreve um problema que ocorre freqüentemente em seu ambiente, e então descreve o cerne da solução para aquele problema, de um modo tal que você pode usar esta solução milhões de vezes, sem nunca fazer a mesma coisa repetida”

O Origem dos Padrões

Padrões compondo uma linguagem capaz de suportar a construção coletiva, dinâmica, integral, etc, de artefatos humanos (casas, cidades, programas de computador, organizações, empresas, etc).

Padrões na Arquitetura e Urbanismo

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Christopher Alexander, O ModoIntemporal de Construir, 1977.

� Edifícios ou cidades estão vivos à medida em que são governados pelo modo intemporal de construção.

� É um processo que extrai ordem de nós mesmos. Ocorrerá espontaneamente, somente se nos permitirmos.�Lugares adquirem suas características a partir dos padrões de

acontecimentos que lá ocorrem.�Acontecimentos estão sempre relacionados com padrões

geométricos (de construção)�Padrões de construção podem estar “vivos” ou “mortos”�Se “vivos” solucionam conflitos,e se auto-alimentam�Se “mortos” nos levam ao conflito interior.

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Padrões “Vivos” para Construçãode Casas, Bairros e Cidades

� Transição na Entrada �Problema, Soluções e

Conseqüências

� Gradiente de Intimidade�Problema, Soluções e

Conseqüências

� Lugar Janela�Problema, Soluções e

Conseqüências

� Bifurcações em T�Problema, Soluções e

Conseqüências

� Mosaico de Subculturas�Problema, Soluções e

Conseqüências

� Pousada Indiana�Problema, Soluções e

Conseqüências

� Banco de Jardim�Problema, Soluções e

Conseqüências

� etc...

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Uma Linguagem de Padrõespara um Jardim

Jardim Semi-Oculto

Jardim Espontâneo Pátios com Vida

Transição na Entrada

Terraço PrivadoOlhando para a Rua

Balcão de 1.80m

Conexão com a Terra

Banco de Jardim

Pomar

Lugar ÁrvoresLadeira em Terraços

Canto do Edifício

Local Público ExteriorEstufa

Lugar Ensolarado

Padrões para Construção de Organizações

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Complien’s Process and Organization Structure Patterns

� Size the Schedule � Organization Follows Market � Developer Controls Process � Architect Also Implements � Review the Architecture � Group Validation � Scenarios Define Problem � Named Stable Bases � De-Couple Stages� Hub-Spoke-and-Rim� Prototype � Take No Small Slips � Interrupts Unjam Blocking � Don't Interrupt an Interrupt

� Self-selecting team� Solo Virtuoso� Form follows Function � Domain Expertise in Roles� Phasing it In� Apprentice � Organization Follows Location � Organization Follows Market � Patron � Architect Controls Product � Planning and Architecture � Conway's Law � +23 ->

Padrões de Design OO

Uma Linguagem de Padrões para Programas OO

State

Memento Adapter Proxy

Bridge

Command

Chain of Responsibility

Singleton

Abstract Factory

Prototype

Template Method

Facade

Factory Method

Observer

MediatorStrategy

Decorator

Flyweight

Composite

Interpreter

Visitor

Iterator

Builder

AdicionandoOperações

AdicionandoOperações

EnumerandoFilhos

SalvandoEstado da Operação

CriandoComposições

AdicionandoResponsabilidades

a Objetos

Modificando Peleversus Entranhas

CompartilhandoComposições

DefinindoGramática

DefinindoTravessias

Definindoa Cadeia

CompostoUsando

EvitandoHisterese

CompartilhandoEstratégias

CompartilhandoEstados Compartilhando

Terminais

ConfigurarFábrica

Dinamicamente

ÚnicaInstância

ÚnicaInstância

ImplementadaUsando

GerenciamentoComplexo deDependências

Freqüentemente Usa

DefinindoPassos doAlgoritmo

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Padrões de Design

� Soluções Sucintas e de Fácil Aplicação�Capturam, de forma sucinta e facilmente aplicável, soluções de

projeto (de programas de computador, casas, cidades, bairros, etc) que foram desenvolvidas e evoluíram com o passar do tempo

� Soluções Exaustivamente Refinadas�Resultados de um longo processo de projeto, re-projeto, teste e

reflexão sobre o que torna um sistema mais flexível, reusável, modular e compreensível.

� Soluções Compartilhadas�Construídas em grupo�Através da construção e uso de um vocabulário comum

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Elementos Essenciais de um Padrão de Design

� Nome�Resume em uma ou duas palavras: o problema, as soluções e

conseqüências do uso do padrão.� O Problema

�Descreve quando aplicar o padrão. Explica o problema e seu contexto. Sintomas e condições.

� A Solução�Elementos que constituem o design, seus relacionamentos,

responsabilidades e colaboradores.� As Conseqüências

�Resultados e compromissos decorrentes da aplicação do padrão.

�Impactos sobre a flexibilidade, extensibilidade, portabilidade ou desempenho do sistema.

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Padrões de Design Orientado a Objetos - Livro da “Gang-dos-Quatro”

�Nome e Classificação�Intenção�Também Conhecido

Como�Motivação�Aplicabilidade

�Estrutura�Participantes�Colaboradores�Conseqüências�Implementação�Exemplo de Código�Usos Conhecidos�Padrões

Relacionados

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Classes de Padrões de Design OO

�Criacionais�Tornam um sistema independente de como seus

objetos são criados, compostos e representados�Estruturais

�Tratam de compor classes e objetos para formar estruturas grandes e complexas

�Comportamentais�Tratam de algoritmos e como atribuir

responsabilidades entre objetos

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Sistema

Objeto

SGBD

Padrões Criacionais

� Tornam um sistema independente de como seus objetos são criados, compostos e representados

create()

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Padrões Estruturais

� Tratam de compor classes e objetos para formar estruturas grandes e complexas

Adapter Composite

DecoratorFacade

FlyweightProxy

Bridge

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Padrões Comportamentais(1/2)

� Tratam de algoritmos e como atribuir responsabilidades entre objetos

ChainOfResponsibility exec

Command

new

exec()

Interpreter&

|

b c

a *

Iterator

Mediator Memento

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Observer(s)

30%, 20%, 50%

Padrões Comportamentais(2/2)

� Tratam de algoritmos e como atribuir responsabilidades entre objetos

Visitor

State Strategy

a() b()

a() b()

TemplateMethod()a(..);...b(..);

Visitor Visitor

30%, 10%, 60%

State

Memento Adapter Proxy

Bridge

Command

Chain of Responsibility

Singleton

Abstract Factory

Prototype

Template Method

Facade

Factory Method

Observer

MediatorStrategy

Decorator

Flyweight

Composite

Interpreter

Visitor

Iterator

Builder

Uma Linguagem de Padrões para Programas OO

AdicionandoOperações

AdicionandoOperações

EnumerandoFilhos

SalvandoEstado da Operação

CriandoComposições

AdicionandoResponsabilidades

a Objetos

Modificando Peleversus Entranhas

CompartilhandoComposições

DefinindoGramática

DefinindoTravessias

Definindoa Cadeia

CompostoUsando

EvitandoHisterese

CompartilhandoEstratégias

CompartilhandoEstados Compartilhando

Terminais

ConfigurarFábrica

Dinamicamente

ÚnicaInstância

ÚnicaInstância

ImplementadaUsando

GerenciamentoComplexo deDependências

Freqüentemente Usa

DefinindoPassos doAlgoritmo

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Formulário para Descrição de Padrões

�Nome e Classificação�Intenção�Também Conhecido

Como�Motivação�Aplicabilidade

�Estrutura�Participantes�Colaboradores�Conseqüências�Implementação�Exemplo de Código�Usos Conhecidos�Padrões

Relacionados

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Notação de Classes e Objetos

ClasseAbstrata

operaçãoAbstrata()

SubclasseConcreta1operação()

variávelDeInstância

referencia objetoagrega

cria

pseudo código

ClasseConcretaummuitos

umObjetoreferênciaAObjeto outroObjeto

variávelDeInstância

SubclasseConcreta2

Padrões de Design. Java Deployment Couser. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]

Diagrama de Interação de Objetos

umObjetoop

eraç

ão a

tiva

sobr

eo

obje

to

TEM

PO

outroObjeto.método()this.método()

outroObjeto

outroObjeto = new Objeto()(instanciação)