padrões de design orientado a objetos

32
Padrões de Design Orientado a Objetos Design Patterns

Upload: glauco-vinicius

Post on 19-Jun-2015

1.901 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Padrões de design orientado a objetos

Padrões de Design Orientado a Objetos

Design Patterns

Page 2: Padrões de design orientado a objetos

História

• O nome “Design Patterns" foi cunhado por Christopher Alexander quando ele propôs a criação de catálogos de padrões para arquitetura em seu livro:

“A Pattern Language: Towns, Buildings, Construction”(1977).

Page 3: Padrões de design orientado a objetos

História

“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”

Christopher Alexander

Page 4: Padrões de design orientado a objetos

História

• Idealmente um padrão deve possuir as seguintes características: – Encapsulamento: um padrão encapsula

um problema/solução bem definido. Ele deve ser independente, específico e formulado de maneira a ficar claro onde ele se aplica.

Page 5: Padrões de design orientado a objetos

História

– Generalidade: todo padrão deve permitir a construção de outras realizações a partir deste padrão.

– Abstração: os padrões representam abstrações da experiência empírica ou do conhecimento cotidiano.

Page 6: Padrões de design orientado a objetos

História

– Equilíbrio: quando um padrão é utilizado em uma aplicação, o equilíbrio dá a razão, relacionada com cada uma das restrições envolvidas, para cada passo do projeto.

– Abertura: um padrão deve permitir a sua extensão para níveis mais baixos de detalhe.

Page 7: Padrões de design orientado a objetos

História

– Combinatoriedade: os padrões são relacionados hierarquicamente. Padrões de alto nível podem ser compostos ou relacionados com padrões que endereçam problemas de nível mais baixo.

Page 8: Padrões de design orientado a objetos

História

• Em sua obra, Alexander estabeleceu que um padrão deve ser descrito em cinco partes:– Nome: uma descrição da solução, mais do

que do problema ou do contexto. – Exemplo: uma ou mais figuras, diagramas

ou descrições que ilustrem um protótipo de aplicação.

Page 9: Padrões de design orientado a objetos

História

– Contexto: a descrição das situações sob as quais o padrão se aplica.

– Problema: uma descrição das forças e restrições envolvidos e como elas interagem.

Page 10: Padrões de design orientado a objetos

História

– Solução: relacionamentos estáticos e regras dinâmicas descrevendo como construir artefatos de acordo com o padrão, freqüentemente citando variações e formas de ajustar a solução segundo as circunstâncias. Inclui referências a outras soluções e o relacionamento com outros padrões de nível mais baixo ou mais alto.

Page 11: Padrões de design orientado a objetos

História

• A partir dos conceitos criados por Alexander, Kent Beck e Ward Cunningham propuseram os primeiros padrões de projeto para a área da ciência da computação (Construção de janelas na linguagem Smalltalk, 1988).

• Nos anos seguintes Beck, Cunningham e outros seguiram com o desenvolvimento desta idéia.

Page 12: Padrões de design orientado a objetos

História

• Em 1995 o movimento ao redor de padrões de projeto ganhou popularidade com o livro: “Design Patterns: Elements of Reusable Object-Oriented Software”.

• Os autores desse livro são Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, conhecidos como a "Gangue dos Quatro" (Gang of Four) ou simplesmente "GoF".

Page 13: Padrões de design orientado a objetos

Porque Utilizar Design Patterns?

• Criação de soluções de software:– Elegantes– Simples– Reutilizáveis– Fácil manutenção

Page 14: Padrões de design orientado a objetos

Padrões GoF

• Os padrões GoF são organizados nas seguintes famílias:

• Criacionais– Tornam um sistema independente de

como seus objetos são criados, compostos e representados

Page 15: Padrões de design orientado a objetos

Padrões GoF

• Estruturais– Tratam de compor classes e objetos para

formar estruturas grandes e complexas

• Comportamentais– Tratam de algoritmos e como atribuir

responsabilidades entre objetos

Page 16: Padrões de design orientado a objetos

Família dos Padrões Criacionais

• Abstract Factory– Permite a criação de famílias de objetos

relacionados ou dependentes, através de uma única interface e sem que a classe concreta seja especificada.

• Builder– permite a separação da construção de um objeto

complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes representações.

Page 17: Padrões de design orientado a objetos

Família dos Padrões Criacionais

• Factory Method– Fornece uma interface para criação de

famílias de objetos relacionados ou dependentes, sem especificar suas classes concretas.

• Prototype – Permite a criação de objetos a partir de um

modelo original, ou protótipo (clonar objetos instanciados em memória).

Page 18: Padrões de design orientado a objetos

Família dos Padrões Criacionais

• Singleton– Permite que uma classe possua apenas

uma instância. Isso permite um único ponto global de acesso á essa instância.

Page 19: Padrões de design orientado a objetos

Família dos Padrões Estruturais

• Adapter– Permite que classes com interfaces

incompatíveis possam interagir.

• Bridge– utilizado quando é desejável que uma

interface (abstração) possa variar independentemente das suas implementações.

Page 20: Padrões de design orientado a objetos

Família dos Padrões Estruturais

• Composite– Utilizado para representar um objeto que é

constituído pela composição de objetos similares a ele.

• Decorator– Utilizado para adicionar responsabilidades

aos objetos dinamicamente.

Page 21: Padrões de design orientado a objetos

Família dos Padrões Estruturais

• Façade– disponibiliza uma interface para uma

grande quantidade de funcionalidades de uma API

• Flyweight– apropriado quando vários objetos devem

ser manipulados, e esses não suportam dados adicionais.

Page 22: Padrões de design orientado a objetos

Família dos Padrões Estruturais

• Proxy– Encapsula um objeto através de um outro

objeto que possui a mesma interface, de forma que o segundo objeto, conhecido como “Proxy”, controla o acesso ao primeiro, que é o objeto real.

Page 23: Padrões de design orientado a objetos

Família dos Padrões Comportamentais

• Chain of Responsability– Evita o acoplamento do remetente de uma

solicitação ao seu receptor, ao dar a mais de um objeto a oportunidade de tratar a solicitação

• Command– Encapsular uma solicitação como um objeto,

desta forma permitindo parametrizar clientes com diferentes solicitações, enfileirar ou fazer o registro (log) de solicitações e suportar operações que podem ser desfeitas.

Page 24: Padrões de design orientado a objetos

Família dos Padrões Comportamentais

• Interpreter

• Iterator– permite a "iteração" e um modo de acesso

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

Page 25: Padrões de design orientado a objetos

Família dos Padrões Comportamentais

• Mediator– Desacopla e gerencia as colaborações

entre um grupo de objetos.

• Memento – Define como salvar o estado de uma

instância de uma classe e restaurá-la depois.

Page 26: Padrões de design orientado a objetos

Família dos Padrões Comportamentais

• Observer – Permite que quando um objeto mude seu

estado, todos seus dependentes sejam notificados e atualizados automaticamente.

• State– Permite que um objeto altere o seu

comportamento quando o seu estado muda.

Page 27: Padrões de design orientado a objetos

Família dos Padrões Comportamentais

• Strategy– Este padrão permite que o algoritmo possa variar

independentemente dos clientes que o utilizam .

• Template Method

• Visitor– permite definir novas operações sem alterar as

classes dos elementos sobre os quais opera. Adiciona funções polimórficas a uma classe de maneira não invasiva.

Page 28: Padrões de design orientado a objetos
Page 29: Padrões de design orientado a objetos

Considerações Finais

• Os padrões de projeto não devem ser vistos como a salvação universal para o problema do desenvolvimento de software nem ser posto de lado como uma coisa inútil. Eles apenas fornecem uma relação de soluções comuns que são usadas no mundo real das aplicações comerciais, soluções que já foram provadas e aprovadas em diferentes projetos de software.

Page 30: Padrões de design orientado a objetos

Considerações Finais

• Conhecer os padrões de projeto pode ser muito interessante mas saber como aplicá-los aos seus projetos é o que realmente vai fazer a diferença.

Page 31: Padrões de design orientado a objetos

Bibliografia

• Enterprise Solution Patterns Using Microsoft .NET, Microsoft, 2007

• Introduction to Design Patterns in C#, James W Cooper, 2002

• Core J2EE Patterns, Alur, Crupi, Malks, 2004

Page 32: Padrões de design orientado a objetos

Bibliografia

• Wikipedia– http://en.wikipedia.org/wiki/Christopher_Ale

xander#Architecture

– http://pt.wikipedia.org/wiki/Padr%C3%B5es_de_projeto_de_software

– http://en.wikipedia.org/wiki/A_Pattern_Language