Padrões Comportamentais

Documentos relacionados
Programação Orientada a Objetos. Padrões Comportamentais

Padrões Comportamentais. Padrões de Projeto Comportamentais. Motivação. Chain of Responsibility (CoR) Padrão Chain of Responsibility

Padrões Comportamentais

Behavioral Patterns - Interpreter

BEHAVIOURAL DESIGN PATTERNS

T ó p i c o s A v a n ç a d o s e m L i n g u a g e m d e P r o g r a m a ç ã o. Padrões de Projeto. Prof. Alexandre Vidal. DEINF-UFMA Janeiro de 2007

Universidade Federal de Uberlândia Disciplina: POO2 Prof. Fabiano Dorça. Padrões de Projeto. Padrão Command

Programação Orientada a Objetos. Padrões Estruturais

Vítor E. Silva Souza

Mas o que é mesmo Padrão de Projeto?

Design Patterns. Viviane Torres da Silva

" ##$#$!% # & #$#$ !!!!"!

Sumário. Prefácio 12. Capítulo 1 - Técnicas Simples Para um Código Limpo 23

Análise e Projeto Orientados por Objetos

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões

INF011 Padrões de Projeto. 11 Composite

Padrões de Design. Padrões de Design. Abstract Factory. Padrões de Design. Padrões de Design Abstract Factory. Abstract Factory.

Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Dorça. Introdução. Padrões de projeto

INF011 Padrões de Projeto Introdução

Análise e Projeto Orientados por Objetos

b) Adapter, Bridge e Composite. c) Builder, Prototype e Singleton. d) Façade, Command e Decorator. e) Factory Method, Interpreter e Template Method.

Composite. Padrões de Projeto. Composite. Prof. MSc Manfrine Santos. Anderson Fernandes Esteves. Manaus, Outubro de / 19

Padrões de Projeto. Parte 1. Prof. Fellipe Aleixo

Princípios de Engenharia de Software Resumo 8 Semana 8 Versão: 1.0 Data: 05/10/04

Behavioral Patterns Chain of ofresponsability

Padrões de Projeto de Software

INF011 Padrões de Projeto. 21 Memento

Módulo III Padrões GOF: Iterator

Padrões de Projeto de Software

Profa. Thienne Johnson

Padrões de Projeto de Software Orientado a Objetos

Computação II Orientação a Objetos

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

Especialização em web com interfaces ricas

Análise e Projeto Orientados por Objetos

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

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

Testes com Design Patterns

Capítulo 1. Aspectos Preliminares

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Análise e Projeto. Padrões de Análise, Arquitetura e Projeto

Introdução à Programação

IFSC/Florianópolis - Programação Orientada a Objetos com Java - prof. Herval Daminelli

Conceitos de Sistemas de Banco de Dados INE 5323

Engenharia de Software

Behavioral Patterns - Command

Padrões Comportamentais

Estilo: BlackBoard. BlackBoard = repositório de dados compartilhados

Banco de Dados. SGBDs. Professor: Charles Leite

AULA 02. OBJETIVO: Características da Linguagem Orientada a Objetos.

Dada a linguagem, números romanos, construir uma representação para a gramática dela junto com um interpretador para essa gramática.

As classes Formatador e ElementosAFormatar

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico

Abstract Factory Builder Factory Method Prototype Singleton Adapter Bridge Composite Decorator Facade Flyweight Proxy

Análise e Projeto Orientados por Objetos

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

Capítulo 6: Linguagens de Programação

INF011 Padrões de Projeto. 04 Builder

Matéria Introdutória. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

6 A Ferramenta de Medição e Avaliação

Padrões GoF Strategy, Observer, Singleton, Abstract Factory e outros...

Introdução ao Java. Prof. Herbert Rausch Fernandes

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

Padrões contexto problema solução

Capítulo II Gramáticas

Aula 03. Evandro Deliberal

Introdução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008

Padrões GoF. Leonardo Gresta Paulino Murta

Programação com Objectos 2º Teste Tipo 1º Semestre (120 minutos)

PADRÕES DE PROJETO DE SOFTWARE

Capítulo II Gramáticas

Módulo III Padrões GOF

Protótipo de uma ferramenta de apoio para desenvolvimento de sistemas web para WebIntegrator

Gerência de Dispositivos. Adão de Melo Neto

Decorator e Composite. Nazareno Andrade (baseado no material de Hyggo Almeida)

Computação Paralela. Conceitos de Programação Orientada ao Objecto. João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

Estruturas de Dados Apresentação

Análise e Projeto Orientados por Objetos

Análise. Orientada a Objetos Modelo Funcional, Modelo Estrutural e Modelo Comportamental. Linguagens: Java, C++, etc.

Padrões de Projeto. Factory Method

Análise e Projeto Orientados por Objetos

Design Pattern Implementation in Java and AspectJ

Programação com Objectos

Introdução. Por que desenvolver ALGORITMO?

Estruturas de Controle: Nível de Unidades de Programação

Padrões de Projeto de Software

Padrões de Projeto. Intenção: Observer. Motivação: Motivação:

Creational Patterns Factory method

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

Algoritmos e Técnicas de Programação Introdução Givanaldo Rocha de Souza

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

Engenharia de Software Orientada a objetos. Prof. Rogério Celestino dos Santos

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

Arquitecturas Paralelas I Computação Paralela em Larga Escala. Conceitos de Programação Orientada ao Objecto

Transcrição:

Padrões Comportamentais Parte 1 Soluções Reutilizáveis de Software Orientado a Objetos Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)

Padrões de Projeto Comportamentais 1. Chain of Responsibility 2. Command 3. Interpreter 4. Iterator 5. Mediator 6. Memento 7. Observer 8. State 9. Strategy 10. Template Method 11. Visitor

Padrões Comportamentais Se preocupam com algoritmos e a atribuição de responsabilidade entre objetos Descreve o papel de classes e objetos como se dará a comunicação entre os envolvidos

Chain of Responsibility Cadeia de Responsabilidades

Intenção Evitar 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 Encadear os objetos receptores, passando a solicitação ao longo da cadeia até que um objeto a trate

Motivação Considere um recurso de ajuda (help) sensível ao contexto para uma interface gráfica de usuário: A ajuda está acessível em qualquer ponto da interface A ajuda depende do ponto (contexto) onde foi acionada O problema é que o objeto que fornece a ajuda não é conhecido explicitamente pelo solicitante O que necessitamos é de uma maneira de desacoplar o botão que inicia a solicitação de ajuda dos objetos que podem fornecer as informações de ajuda

Aplicabilidade Utilizar quando: 1. Mais de um objeto pode tratar uma requisição e o objeto que irá tratar a mesma não é conhecido a priori 2. Desejamos fazer uma solicitação para um dentre vários objetos, sem especificar explicitamente o receptor 3. O conjunto de objetos que pode tratar uma solicitação deveria ser especificado dinamicamente

Estrutura

Estrutura Uma típica estrutura de objetos se parece seria:

Exemplo / Participantes

Exemplo / Participantes

Exemplo / Participantes 1. Handler (HelpHandler) Define uma interface para tratar solicitações (opcional) implementa um link para seu sucessor 2. ConcreteHandler (PrintButton, PrintDialog) Trata solicitações de sua responsabilidade Pode acessar o seu sucessor Se pode tratar, assim o faz, se não passa a solicitação para o seu sucessor 3. Client Inicia uma solicitação para um objeto da cadeia

Consequências 1. Acoplamento reduzido 2. Flexibilidade adicional na atribuição de responsabilidades a objetos 3. A recepção não é garantida

Command Também conhecido como Action ou Transaction

Intenção 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

Motivação Algumas vezes é necessário emitir solicitações para objetos nada sabendo sobre a operação que está sendo solicitada ou sobre o receptor da mesma Exemplo: no contexto de frameworks para desenvolver interfaces gráficas com o usuário Incluem objetos como botões de menu que executam uma solicitação em resposta a uma entrada do usuário Mas, só as classes de domínio sabem o que precisa ser feito em resposta a uma solicitação do usuário

Motivação Continuando... O padrão Command permite que objetos do framework possam fazer solicitações de objetos não especificados, transformando a própria solicitação em um objeto A chave desse padrão é a classe abstrata Command, a qual define uma interface para execução de operações Na sua forma mais simples, essa interface inclui uma operação abstrata execute()

Aplicabilidade Utilizar o padrão Command quando necessitamos: 1. parametrizar objetos por uma ação a ser executada 2. especificar, enfieirar e executar solicitações em tempos diferentes 3. suportar desfazer operações O objeto Command podem armazenar estado, tornando possível a reversão dos afeitos da sua ação Operação unexecute() Os comandos executados podem ser armazenados em uma lista histórica tornando possível desfazer uma série de comandos em sequência

Aplicabilidade Utilizar o padrão Command quando necessitamos: 4. suportar o registro (logging) de mudanças de maneira que possam ser replicadas no caso de uma queda no sistema 5. estruturar um sistema em torno de operações de alto nível construídas sobre operações primitivas Comum em sistemas que suportam transações

Estrutura

Exemplo/Participantes

Exemplo/Participantes

Exemplo/Participantes

Exemplo/Participantes

Exemplo/Participantes 1. Command Define uma interface para a execução de uma operação 2. ConcreteCommand (PasteCommand, OpenCommand) Implementa a operação execute() correspondente 3. Client (Application) Criar um objeto ConcreteCommande envia a seu receptor 4. Invoker (MenuItem) Solicita ao Command a execução da solicitação 5. Receiver (Document, Application) Sabe como executar a operação associada a uma solicitação

Consequências 1. Desacopla o objeto que invoca a operação daquele que sabe como executá-la 2. Commands podem ser manipulados e estendidos como qualquer outro objeto 3. Você pode montar comandos para formar um comando composto (MacroCommand) 4. É fácil acrescentar novos comandos, pois não é necessário modificar as classes existentes

Interpreter Interpretador

Intenção Dada uma linguagem, definir uma representação para a sua gramática juntamente com um interpretador que usa representação para interpretar sentenças da linguagem

Motivação Se um problema específico de ocorre com frequência suficiente, pode ser útil expressar instâncias do problema como sentenças de uma linguagem (simples) Por exemplo: Pesquisar cadeias de caracteres que correspondem a um determinado padrão (pattern matching) é um problema comum à suscitou a criação de expressões regulares

Motivação O padrão Interpreter descreve como definir uma gramática para linguagens simples Representar sentenças nessa linguagem Interpretar tais sentenças

Aplicabilidade Usamos o padrão Iterpreter quando: 1. A gramática é simples 2. A eficiência não é uma preocupação crítica

Estrutura

Exemplo/Participantes Exemplo de gramática: expression ::= literal alternation sequence repetition '(' expression ')' alternation ::= expression ' ' expression sequence ::= expression '&' expression repetition ::= expression '*' literal ::= 'a' 'b' 'c'... { 'a' 'b' 'c'... }*

Exemplo/Participantes

Exemplo/Participantes

Exemplo/Participantes 1. AbstractExpression (RegularExpression) Declara uma operação abstrata interpret() 2. TerminalExpression (LiteralExpression) Implementa uma operação interpret() associada aos símbolos terminais da gramática 3. NonTerminalExpression (AlternationExpression, RepititionExpression, SequenceExpression) Implementa uma operação interpret() par símbolos nãoterminais da gramática Pode chamar a se mesmo de forma recursiva

Exemplo/Participantes 4. Context Contém informação que é global para o interpretador 5. Client Constrói ou recebe uma árvore sintática abstrata que representa uma determinada sentença na linguagem definida pela gramática A árvore abstrata é montada a partir de instâncias das classes NonTerminalExpression e TerminalExpression

Consequências 1. Fácil de mudar e estender a gramática 2. Implementar a gramática também é fácil 3. Gramáticas complexas são difíceis de manter 4. Possibilita ir acrescentando novas formas de interpretar expressões

Iterator Também como Cursor

Intenção Fornecer um meio de acessar, sequencialmente, os elementos de uma coleção de objetos sem expor a sua representação subjacente

Motivação Um objeto agregador, como uma lista, deveria oferecer um meio de acessar seus elementos sem expor a sua estrutura interna Podemos também desejar percorrer a coleção de diferentes maneiras O padrão Iterator permite fazer tudo isso A chave desse padrão é retirar a responsabilidade de acesso e percurso do objeto lista e colocá-la em um objeto Iterator A classe Iterator define uma interface para o acesso aos elementos da lista

Aplicabilidade Use o padrão Iterator para: 1. acessar os conteúdos de um objeto agregador (coleção) sem expor sua representação interna 2. suportar múltiplos percursos pelos objetos agregados 3. Fornecer uma interface uniforme que percorra diferentes estruturas agregadoras (polimorfismo)

Estrutura

Exemplo/Participantes

Exemplo/Participantes 1. Iterator Define uma interface para acessar e percorres uma coleção 2. ConcreteIterator Implementa a interface Iterator Mantém o controle da posição corrente no percurso 3. Aggregate Define uma interface para a criação de um objeto Iterator 4. ConcreteAggregate Cria a retorna uma instância do Iterator apropriado

Consequências 1. Ele suporta variações no percurso de uma coleção 2. Iterators simplificam a interface da coleção 3. Mais do que um percurso pode estar em curso (ou pendente), em uma coleção