padroes de projeto

35
Padrões de Projeto Fernando Deschamps Fernando Deschamps Sistemas Industriais Inteligentes – S2i Sistemas Industriais Inteligentes – S2i Departamento de Automação e Sistemas – DAS Departamento de Automação e Sistemas – DAS Universidade Federal de Santa Catarina – UFSC Universidade Federal de Santa Catarina – UFSC Uma Introdução Uma Introdução

Upload: ejdn1

Post on 19-Jun-2015

6.367 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Padroes De Projeto

Padrões de Projeto

Fernando DeschampsFernando Deschamps

Sistemas Industriais Inteligentes – S2iSistemas Industriais Inteligentes – S2i

Departamento de Automação e Sistemas – DASDepartamento de Automação e Sistemas – DAS

Universidade Federal de Santa Catarina – UFSCUniversidade Federal de Santa Catarina – UFSC

Uma IntroduçãoUma Introdução

Page 2: Padroes De Projeto

Agenda

IntroduçãoIntrodução::

O que são padrões de projeto?O que são padrões de projeto?

Motivação de seu uso.Motivação de seu uso.

Conceitos básicosConceitos básicos::

Principais atributos.Principais atributos.

Problemas que os padrões de projeto resolvem.Problemas que os padrões de projeto resolvem.

Como selecionar um padrão.Como selecionar um padrão.

Como usar um padrão.Como usar um padrão.

Alguns padrões de projetoAlguns padrões de projeto..

ExemplosExemplos da estrutura de alguns dos padrões de projeto. da estrutura de alguns dos padrões de projeto.

Onde obter Onde obter mais informaçõesmais informações..

Page 3: Padroes De Projeto

Em geral, em Em geral, em engenharia de softwareengenharia de software, dois são os , dois são os principais temas tratados:principais temas tratados:

MetodologiaMetodologia para o desenvolvimento de sistemas. para o desenvolvimento de sistemas.

Linguagem de modelagemLinguagem de modelagem para o projeto de software para o projeto de software orientado a objetos.orientado a objetos.

As dificuldades encontradas são decorrentes da As dificuldades encontradas são decorrentes da falta falta de experiênciade experiência de quem está aprendendo ambos os de quem está aprendendo ambos os temas pela primeira vez ou da temas pela primeira vez ou da dificuldade de dificuldade de combinaçãocombinação de todos os elementos que fazem parte de todos os elementos que fazem parte do projeto de um sistema complexo.do projeto de um sistema complexo.

““Estudos de casos”Estudos de casos” são uma fonte bastante rica para são uma fonte bastante rica para a solução de problemas de projeto, mesmo para a solução de problemas de projeto, mesmo para projetistas experientes.projetistas experientes.

Introdução

Page 4: Padroes De Projeto

Algumas Definições...

O que é um padrão de projeto?O que é um padrão de projeto?

Um padrão de projeto é uma Um padrão de projeto é uma estrutura estrutura recorrenterecorrente no no projetoprojeto de de software orientado a software orientado a objetosobjetos. Pelo fato de ser recorrente, vale a . Pelo fato de ser recorrente, vale a pena que seja documentada e estudada.pena que seja documentada e estudada.

O que faz um padrão de projeto?O que faz um padrão de projeto?

Um padrão de projeto Um padrão de projeto nomeianomeia, , abstraiabstrai e e identificaidentifica os aspectos chave de uma estrutura os aspectos chave de uma estrutura de projeto comum para torná-la útil para a de projeto comum para torná-la útil para a criação de um projeto orientado a objetos criação de um projeto orientado a objetos reutilizável.reutilizável.

Page 5: Padroes De Projeto

Problemas de Projeto Solucionados por Padrões

Procurando Procurando objetos apropriadosobjetos apropriados..

Determinando a Determinando a granularidadegranularidade dos objetos. dos objetos.

Especificando Especificando interfacesinterfaces dos objetos. dos objetos.

Especificando Especificando implementaçõesimplementações dos objetos. dos objetos.

Herança de classe versus herança de interface.Herança de classe versus herança de interface.

Programando para uma interface, não para uma Programando para uma interface, não para uma implementação.implementação.

Colocando os mecanismos de Colocando os mecanismos de reutilizaçãoreutilização para funcionar. para funcionar.

Herança versus composição.Herança versus composição.

Delegação.Delegação.

Herança versus tipos parametrizados.Herança versus tipos parametrizados.

Page 6: Padroes De Projeto

Problemas de Projeto Solucionados por Padrões

Relacionando estruturas de Relacionando estruturas de tempo de execuçãotempo de execução e de e de tempo de compilaçãotempo de compilação..

Projetando para Projetando para mudançasmudanças..

Dependências de operações específicas, plataformas de software e hardware, de representações ou implementações de objetos e algorítmicas.

Acoplamento forte.

Incapacidade na alteração de classes.

Programas de Programas de aplicaçãoaplicação..

Bibliotecas de classes (Bibliotecas de classes (toolkitstoolkits).).

Arcabouços de classes (Arcabouços de classes (frameworksframeworks).).

Page 7: Padroes De Projeto

Principais Atributos

Os principais atributos de uma boa descrição Os principais atributos de uma boa descrição de um padrão de projeto são:de um padrão de projeto são:

NomeNome:: referência que descreve de forma bastante sucinta referência que descreve de forma bastante sucinta o padrão.o padrão.

ProblemaProblema (motivação, intenção e objetivos, (motivação, intenção e objetivos, aplicabilidade): apresenta o contexto do padrão e quando aplicabilidade): apresenta o contexto do padrão e quando ele pode ser usado.ele pode ser usado.

SoluçãoSolução (estrutura, participantes, exemplo de código): (estrutura, participantes, exemplo de código): descreve a solução e os elementos que a compõem.descreve a solução e os elementos que a compõem.

Conseqüências e padrões relacionadosConseqüências e padrões relacionados: analisa os : analisa os resultados, vantagens e desvantagens obtidos com a resultados, vantagens e desvantagens obtidos com a aplicação do padrão.aplicação do padrão.

Page 8: Padroes De Projeto

Como selecionar um padrão de projeto?

Considere como os padrões de projeto Considere como os padrões de projeto solucionam problemas de projeto.solucionam problemas de projeto.

Examine as seções de descrição do problema Examine as seções de descrição do problema de cada padrão.de cada padrão.

Estude como os padrões se interrelacionam.Estude como os padrões se interrelacionam.

Estude padrões de finalidades semelhantes.Estude padrões de finalidades semelhantes.

Examine uma causa de reformulação de Examine uma causa de reformulação de projeto.projeto.

Considere o que deveria ser variável no Considere o que deveria ser variável no seu projeto.seu projeto.

Page 9: Padroes De Projeto

Como usar um padrão de projeto?

Leia o padrão por inteiro, uma vez, para obter uma Leia o padrão por inteiro, uma vez, para obter uma visão geral.visão geral.

Estude as seções de descrição do problema e do Estude as seções de descrição do problema e do padrão.padrão.

Olhe exemplos de código do padrão.Olhe exemplos de código do padrão.

Escolha nomes para os participantes do padrão que Escolha nomes para os participantes do padrão que tenham sentido no contexto da aplicação.tenham sentido no contexto da aplicação.

Defina as classes.Defina as classes.

Defina nomes específicos da aplicação para as Defina nomes específicos da aplicação para as operações no padrão.operações no padrão.

Implemente as operações para suportar as Implemente as operações para suportar as responsabilidades e colaborações presentes.responsabilidades e colaborações presentes.

Page 10: Padroes De Projeto

Alguns Padrões de Projeto

Em geral os padrões de projeto podem ser Em geral os padrões de projeto podem ser classificados em três diferentes tipos:classificados em três diferentes tipos:

Padrões de criaçãoPadrões de criação: abstraem o processo de criação de objetos : abstraem o processo de criação de objetos a partir da instanciação de classes.a partir da instanciação de classes.

Padrões estruturaisPadrões estruturais: tratam da forma como classes e objetos : tratam da forma como classes e objetos estão organizados para a formação de estruturas maiores.estão organizados para a formação de estruturas maiores.

Padrões comportamentaisPadrões comportamentais: preocupam-se com algoritmos e a : preocupam-se com algoritmos e a atribuição de responsabilidade entre objetos.atribuição de responsabilidade entre objetos.

Cada um desses tipos pode ser subclassificado em:Cada um desses tipos pode ser subclassificado em:

Padrões de classesPadrões de classes: em geral estáticos, definidos em tempo de : em geral estáticos, definidos em tempo de compilação.compilação.

Padrões de objetosPadrões de objetos: em geral dinâmicos, definidos em tempo : em geral dinâmicos, definidos em tempo de execução.de execução.

Page 11: Padroes De Projeto

Padrões de Criação

Abstract FactoryAbstract Factory: fornece uma interface para a : fornece uma interface para a criação de famílias de objetos relacionados ou criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.dependentes sem especificar suas classes concretas.

Uso conhecidoUso conhecido: transportabilidade entre diferentes : transportabilidade entre diferentes bibliotecas de interfaces gráficas (Gnome e KDE).bibliotecas de interfaces gráficas (Gnome e KDE).

BuilderBuilder: separa a construção (geralmente passo a : separa a construção (geralmente passo a passo) de um objeto complexo da sua representação, passo) de um objeto complexo da sua representação, de modo que o mesmo processo de construção possa de modo que o mesmo processo de construção possa criar diferentes representações.criar diferentes representações.

Uso conhecidoUso conhecido: conversão de formatos de texto em : conversão de formatos de texto em editores.editores.

Page 12: Padroes De Projeto

Padrões de Criação

Factory MethodFactory Method: define uma interface para criar um : define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe objeto, mas deixa as subclasses decidirem qual classe será instanciada. Permite a uma classe postergar a será instanciada. Permite a uma classe postergar a instanciação de subclasses.instanciação de subclasses.

Uso conhecidoUso conhecido: bastante usado em toolkits e frameworks : bastante usado em toolkits e frameworks para a instanciação de objetos.para a instanciação de objetos.

PrototypePrototype: especifica os tipos de objetos a serem : especifica os tipos de objetos a serem criados usando uma instância prototípica e cria novos criados usando uma instância prototípica e cria novos objetos copiando este protótipo.objetos copiando este protótipo.

Uso conhecidoUso conhecido: depurador Etgdb. : depurador Etgdb.

Page 13: Padroes De Projeto

Padrões de Criação

SingletonSingleton: garante que uma classe tenha somente : garante que uma classe tenha somente uma instância e fornece um ponto global de acesso uma instância e fornece um ponto global de acesso para ela.para ela.

Uso conhecidoUso conhecido: programas que só podem ter uma : programas que só podem ter uma instância sendo executada em um dado momento.instância sendo executada em um dado momento.

Page 14: Padroes De Projeto

Exemplo: Abstract Factory

Page 15: Padroes De Projeto

Exemplo: Builder

Page 16: Padroes De Projeto

Padrões Estruturais

AdapterAdapter: converte a interface de uma classe em : converte a interface de uma classe em outra interface esperada pelos clientes. Permite que outra interface esperada pelos clientes. Permite que certas classes trabalhem em conjunto, pois de outra certas classes trabalhem em conjunto, pois de outra forma seria impossível por causa de suas interfaces forma seria impossível por causa de suas interfaces incompatíveis.incompatíveis.

Uso conhecidoUso conhecido: popularmente conhecido como : popularmente conhecido como wrapperwrapper, , usado para adaptar a interface de classes.usado para adaptar a interface de classes.

BridgeBridge: separa uma abstração da sua : separa uma abstração da sua implementação, de modo que as duas possam variar implementação, de modo que as duas possam variar independentemente.independentemente.

Uso conhecidoUso conhecido: para evitar o vínculo entre abstração e : para evitar o vínculo entre abstração e implementação quando de mudanças na implementação implementação quando de mudanças na implementação em tempo de execução.em tempo de execução.

Page 17: Padroes De Projeto

Padrões Estruturais

CompositeComposite: compõe objetos em estrutura de árvore : compõe objetos em estrutura de árvore para representar hierarquias do tipo partes-todo. para representar hierarquias do tipo partes-todo. Permite que os clientes da estrutura tratem objetos Permite que os clientes da estrutura tratem objetos individuais e composições de objetos de maneira individuais e composições de objetos de maneira uniforme.uniforme.

Uso conhecidoUso conhecido: para representar hierarquias partes-todo.: para representar hierarquias partes-todo.

DecoratorDecorator: atribui responsabilidades adicionais a um : atribui responsabilidades adicionais a um objeto dinamicamente. Fornece uma alternativa objeto dinamicamente. Fornece uma alternativa flexível à utilização de subclasses para a extensão de flexível à utilização de subclasses para a extensão de funcionalidades.funcionalidades.

Uso conhecidoUso conhecido: para a atribuição de enfeites gráficos e : para a atribuição de enfeites gráficos e outras funcionalidades acessórias a widgets.outras funcionalidades acessórias a widgets.

Page 18: Padroes De Projeto

Padrões Estruturais

FaçadeFaçade: fornece uma interface unificada para um : fornece uma interface unificada para um conjunto de interfaces em um subsistema. Define conjunto de interfaces em um subsistema. Define uma interface de nível mais alto que torna o uma interface de nível mais alto que torna o subsistema mais fácil de usar.subsistema mais fácil de usar.

Uso conhecidoUso conhecido: interface única em sistemas complexos.: interface única em sistemas complexos.

FlyweightFlyweight: usa compartilhamento para suportar : usa compartilhamento para suportar grandes quantidades de objetos, de granularidade grandes quantidades de objetos, de granularidade fina, de maneira eficiente.fina, de maneira eficiente.

Uso conhecidoUso conhecido: sistemas com grande número de objetos.: sistemas com grande número de objetos.

ProxyProxy: fornece um objeto representante ou um : fornece um objeto representante ou um marcador de outro objeto para controlar o acesso ao marcador de outro objeto para controlar o acesso ao mesmo.mesmo.

Uso conhecidoUso conhecido: algumas implementações de CORBA.: algumas implementações de CORBA.

Page 19: Padroes De Projeto

Exemplo: Adapter

Page 20: Padroes De Projeto

Exemplo: Composite

Page 21: Padroes De Projeto

Exemplo: Façade

Page 22: Padroes De Projeto

Exemplo: Proxy

Page 23: Padroes De Projeto

Padrões Comportamentais

Chain of ResponsibilityChain of Responsibility: evita o acoplamento entre : evita o acoplamento entre o remetente de uma solicitação e o destinatário da o remetente de uma solicitação e o destinatário da solicitação, dando a mais de um objeto a chance de solicitação, dando a mais de um objeto a chance de tratar a solicitação. Encadeia os objetos receptores e tratar a solicitação. Encadeia os objetos receptores e passa a solicitação ao longo da cadeia até que um passa a solicitação ao longo da cadeia até que um objeto a trate.objeto a trate.

Uso conhecidoUso conhecido: tratamento de eventos de usuário.: tratamento de eventos de usuário.

CommandCommand: encapsula uma solicitação como um : encapsula uma solicitação como um objeto, permitindo a parametrização de clientes com objeto, permitindo a parametrização de clientes com diferentes solicitações, o enfileiramento e o registro diferentes solicitações, o enfileiramento e o registro de solicitações e o suporte a operações que possam de solicitações e o suporte a operações que possam ser, por exemplo, desfeitas.ser, por exemplo, desfeitas.

Uso conhecidoUso conhecido: suporte a “desfazer”.: suporte a “desfazer”.

Page 24: Padroes De Projeto

Padrões Comportamentais

InterpreterInterpreter: dada uma linguagem, define uma : dada uma linguagem, define uma representação para sua gramática juntamente com representação para sua gramática juntamente com um interpretador que usa a representação para um interpretador que usa a representação para interpretar sentenças nesta linguagem.interpretar sentenças nesta linguagem.

Uso conhecidoUso conhecido: interpretar uma linguagem com um : interpretar uma linguagem com um árvore sintática abstrata, como em compiladores de árvore sintática abstrata, como em compiladores de linguagens orientadas a objetos.linguagens orientadas a objetos.

IteratorIterator: fornece uma maneira de acessar : fornece uma maneira de acessar seqüencialmente os elementos de um objeto seqüencialmente os elementos de um objeto agregado sem expor sua representação subjacente.agregado sem expor sua representação subjacente.

Uso conhecidoUso conhecido: C++ Standard Template Library.: C++ Standard Template Library.

Page 25: Padroes De Projeto

Padrões Comportamentais

MediatorMediator: define um objeto que encapsula a : define um objeto que encapsula a interação entre um conjunto de objetos. Promove o interação entre um conjunto de objetos. Promove o acoplamento fraco ao evitar que os objetos se acoplamento fraco ao evitar que os objetos se refiram explicitamente uns aos outros, permitindo a refiram explicitamente uns aos outros, permitindo a variação das interações independentemente.variação das interações independentemente.

Uso conhecidoUso conhecido: arquitetura de aplicações de Smalltalk.: arquitetura de aplicações de Smalltalk.

MementoMemento: sem violar a encapsulação, captura e : sem violar a encapsulação, captura e externaliza um estado interno de um objeto, de modo externaliza um estado interno de um objeto, de modo que o mesmo possa posteriormente ser restaurado que o mesmo possa posteriormente ser restaurado para este estado.para este estado.

Uso conhecidoUso conhecido: armazenar um instantâneo do estado do : armazenar um instantâneo do estado do objeto sem romper sua encapsulação.objeto sem romper sua encapsulação.

Page 26: Padroes De Projeto

Padrões Comportamentais

ObserverObserver: define uma dependência um-para-muitos : define uma dependência um-para-muitos entre objetos, de modo que, quando um objeto muda entre objetos, de modo que, quando um objeto muda de estado, todos os seus dependentes são de estado, todos os seus dependentes são automaticamente notificados e atualizados.automaticamente notificados e atualizados.

Uso conhecidoUso conhecido: propagação de mudanças e atualizações : propagação de mudanças e atualizações com acoplamento fraco entre os objetos.com acoplamento fraco entre os objetos.

StateState: permite que um objeto altere seu : permite que um objeto altere seu comportamento quando seu estado interno muda. O comportamento quando seu estado interno muda. O objeto parecerá ter mudado sua classe.objeto parecerá ter mudado sua classe.

Uso conhecidoUso conhecido: em algumas implementações da pilha : em algumas implementações da pilha TCP/IP.TCP/IP.

Page 27: Padroes De Projeto

Padrões Comportamentais

StrategyStrategy: define uma família de algoritmos, : define uma família de algoritmos, encapsula cada um deles e os faz intercambiáveis. encapsula cada um deles e os faz intercambiáveis. Permite que o algoritmo varie independentemente Permite que o algoritmo varie independentemente dos clientes que o utilizam.dos clientes que o utilizam.

Uso conhecidoUso conhecido: sistemas de otimização.: sistemas de otimização.

Template MethodTemplate Method: define o esqueleto de um : define o esqueleto de um algoritmo em uma operação, postergando a definição algoritmo em uma operação, postergando a definição de alguns passos para subclasses. Permite que as de alguns passos para subclasses. Permite que as subclasses redefinam certos passos de um algoritmo subclasses redefinam certos passos de um algoritmo sem mudar sua estrutura.sem mudar sua estrutura.

Uso conhecidoUso conhecido: arquiteturas Application/Document/View.: arquiteturas Application/Document/View.

Page 28: Padroes De Projeto

Padrões Comportamentais

VisitorVisitor: representa uma operação a ser executada : representa uma operação a ser executada sobre os elementos de uma estrutura de objetos. sobre os elementos de uma estrutura de objetos. Permite a definição de uma nova operação sem Permite a definição de uma nova operação sem mudar as classes dos elementos sobre os quais mudar as classes dos elementos sobre os quais opera.opera.

Uso conhecidoUso conhecido: para executar uma série de operações : para executar uma série de operações sobre objetos que possuem interfaces diferentes, sem sobre objetos que possuem interfaces diferentes, sem poluir a interface dos mesmos.poluir a interface dos mesmos.

Page 29: Padroes De Projeto

Exemplo: Chain of Responsibility

Page 30: Padroes De Projeto

Exemplo: Command

Page 31: Padroes De Projeto

Exemplo: Observer

Page 32: Padroes De Projeto

Exemplo: State

Page 33: Padroes De Projeto

Exemplo: Strategy

Page 34: Padroes De Projeto

Exemplo: Template Method

Page 35: Padroes De Projeto

Outras Referências

Livro base: Livro base: Padrões de Projeto: Soluções Reutilizáveis Padrões de Projeto: Soluções Reutilizáveis de Software Orientado a Objetosde Software Orientado a Objetos - “The Gang of Four”. - “The Gang of Four”.

Design Patterns Tutorial:Design Patterns Tutorial:http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/patterns/objectives.htmlhttp://www.csc.calpoly.edu/~dbutler/tutorials/winter96/patterns/objectives.html

Design Patterns, Pattern Languages and Frameworks:Design Patterns, Pattern Languages and Frameworks:http://www.cs.wustl.edu/~schmidt/patterns.htmlhttp://www.cs.wustl.edu/~schmidt/patterns.html

A Learning Guide to Design Patterns:A Learning Guide to Design Patterns:http://www.industriallogic.com/papers/learning.htmlhttp://www.industriallogic.com/papers/learning.html

Data & Object Factory's Design Patterns Page: Data & Object Factory's Design Patterns Page: http://www.dofactory.com/patterns/Patterns.aspxhttp://www.dofactory.com/patterns/Patterns.aspx

Overview of Design Patterns:Overview of Design Patterns: http://www.mindspring.com/~mgrand/pattern_synopses.htmhttp://www.mindspring.com/~mgrand/pattern_synopses.htm