Padrões GoF. Leonardo Gresta Paulino Murta leomurta@ic.uff.br



Documentos relacionados
Testes com Design Patterns

Programação Orientada a Objetos. Padrões de Criação

J930. Padrões. Projeto. Introdução. argonavis.com.br. Helder da Rocha

1Introdução Helder da Rocha

Programação Avançada. Padrões de Projeto de Software. Fonte: Oswaldo B. Peres e K19 Treinamentos

Padrões de Projeto. Prof. Jefersson Alex dos Santos

Curso - Padrões de Projeto Módulo 1: Introdução

Padrões de Projeto de Software Orientado a Objetos

Pasteur Ottoni de Miranda Junior. Alguns Padrões de Projeto Gamma

Programação com Objectos

Design Patterns. Viviane Torres da Silva

Prof.ª Esp. Talita Pagani

Design Pattern Implementation in Java and AspectJ

PADRÕES DE SOFTWARE. Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade. Grupo de Padrões de Software da UECE (GPS.

Padrões clássicos ou padrões GoF O livro "Design Patterns (1994) de Erich Gamma, John Vlissides, Ralph Jonhson e Richard Helm, descreve 23 padrões de

Análise e Projeto Orientados por Objetos

Padrões. Projeto (Design) de Software

Mas o que é mesmo Padrão de Projeto?

PADRÕES DE PROJETO FAÇADE, FLYWEIGHT E VISITOR

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Prototype, um Design Patterns de Criação

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

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação

Uma Introdução aos Padrões de Projeto com Java. Roberto Willrich INE-CTC-UFSC

Programação Orientada a Objetos Padrões de Projeto (design patterns) Fernando Vanini IC - UNICAMP

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

Uma Noção Intuitiva dos Padrões de Desenho de Software

Análise de Dados do Financeiro

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

Curso - Padrões de Projeto Módulo 2: Padrões de Criação

Decorator Pattern. SISMO - Sistemas e Mobilidade Junho de Departamento de Informática / UFMA

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

Padrões de Projeto de Software

4 O Workflow e a Máquina de Regras

Análise e Projeto Orientados por Objetos

Categorias de Padrões

Eduardo Bezerra. Editora Campus/Elsevier

Padrões de Projeto de Software Orientado a Objetos

Behavioral Patterns - Command

Padrões de Software (Software Patterns)

Padrões de Projeto WEB e o MVC

4 Plano de Recuperação

Padrões Comportamentais

Design Patterns na plataforma Java

Especialização em web com interfaces ricas. Padrões de Projeto - Estruturais

Padrões de Desenho Engenharia de Software

Especialização em web com interfaces ricas

Abstract Factory Pattern

Padrões de projeto 1

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

Padrões Arquiteturais e de Integração - Parte 1

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

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

Flexibilidade e Reusabilidade em Sistemas Orientados a Objetos - Uma Proposta para Implementação no EB

Engenharia de Software III

PADRÕES DE PROJETO. Cleviton Monteiro

Arquitectura de Sistemas de Software

2 Geração Dinâmica de Conteúdo e Templates de Composição

Padrão Básico de Projeto: Herança versus Composição

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO DE JANEIRO CURSO DE MESTRADO EM INFORMÁTICA FRAMEWORK DE AGENDAMENTO DE RECURSOS UTILIZANDO FILAS

Factory Method. Edeyson Andrade Gomes

Faculdade de Tecnologia SENAC Goiás. Disciplina: Gerenciamento de Rede de Computadores. Goiânia, 16 de novembro de 2014.

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

Padrões. Identificando padrões

Manual do Ambiente Moodle para Professores

TRABALHO DE DIPLOMAÇÃO Regime Modular ORIENTAÇÕES SOBRE O ROTEIRO DO PROJETO FINAL DE SISTEMAS DE INFORMAÇÕES

PRODUTO 1 (CONSTRUÇÃO DE PORTAL WEB)

Manual de Administração DPS Printer 2.1 NDDigital S/A - Software

3 SCS: Sistema de Componentes de Software

As principais características da abordagem de um banco de dados versus a abordagem de processamento de arquivos são as seguintes:

Feature-Driven Development

Padrões contexto problema solução

Arquitetura de Redes: Camadas de Protocolos (Parte I) Prof. Eduardo

2 Diagrama de Caso de Uso

Banco de Dados. Uma coleção de dados relacionados [ELMASRI/NAVATHE]

Guia de Início Rápido

Demonstrativo de Informações Previdenciárias e Repasses

Padrões de Design. Jair C Leite

Tópicos de Ambiente Web. Modulo 2 Processo de desenvolvimento de um site Professora: Sheila Cáceres

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1.

Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados

Prof.: Clayton Maciel Costa

Banco de Dados. Aula 1 - Prof. Bruno Moreno 16/08/2011

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

SISTEMAS OPERACIONAIS

Padrões de Projeto. Bibliografia. Nomenclatura

Manual Integra S_Line

INF011 Padrões de Projeto Introdução

ACL Linux. O que são ACLs e por que usá-las?

Tarciane Andrade.

Análise e Projeto de Sistemas de Informação. Andrêza Leite andreza.lba@gmail.com

Transcrição:

Padrões GoF Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Agenda Introdução Padrões de Criação Padrões de Estrutura Padrões de comportamento Leonardo Murta Padrões GoF 2

Introdução Os padrões GoF (Gamma et al., 1994) formam um catálogo de boas decisões de projeto Este catálogo é dividido em três tipos de padrões: Padrões de criação: preocupam-se em como criar objetos Padrões de estrutura: preocupam-se em como compor objetos Padrões de comportamento: preocupam-se em como os objetos devem interagir Leonardo Murta Padrões GoF 3

Introdução Os padrões GoF refletem situações muito recorrentes em projeto OO, e podem ser vistos como o mínimo que todo projetista OO deveria saber Neste catálogo também está descrita a estrutura de documentação de um padrão e como os padrões se relacionam Existem vários outros catálogos de padrões Esses catálogos relatam padrões em diferentes níveis de abstração: análise, arquitetura, projeto e codificação (idioma) Leonardo Murta Padrões GoF 4

Leonardo Murta Padrões GoF 5

Padrão Abstract Factory Objetivo: Fornecer uma interface para criação de objetos relacionados sem especificar as suas classes concretas Motivação: Suponha que se deseja fazer um sistema de janelas independente de SO (Motif, Windows,...) Seria necessário definir os widgets de forma abstrata e especializar para cada SO Além disso, seria necessário definir uma fábrica genérica de widgets e especializar para os SOs Leonardo Murta Padrões GoF 6

Padrão Abstract Factory Leonardo Murta Padrões GoF 7

Padrão Builder Objetivo: Separar a construção de objetos complexos da sua representação de forma que o mesmo processo de construção possa criar diferentes representações Motivação: Suponha que se deseje converter documentos RTF para outros formatos (texto, HTML,...) Seria necessário verificar quais partes um documento pode ter e definir uma especialização para cada uma das partes Leonardo Murta Padrões GoF 8

Padrão Builder Leonardo Murta Padrões GoF 9

Padrão Factory Method Objetivo: Definir uma interface de criação de objetos mas deixar as subclasses decidirem qual objeto criar Motivação: Na construção de frameworks, não é possível, a priori, determinar qual elemento deve ser criado A solução é permitir que o instanciador do framework faça a criação de uma instância específica Leonardo Murta Padrões GoF 10

Padrão Factory Method Leonardo Murta Padrões GoF 11

Padrão Prototype Objetivo: Especificar tipos de objetos a serem criados usando protótipos e aplicando clonagem nesses protótipos Motivação: Existem situações onde é desejável utilizar um objeto modelo complexo para a criação de outros objetos Supondo o caso de uma ferramenta de desenho, pode ser útil criar estruturas complexas e fazer uso delas como base para outros desenhos mais complexos Leonardo Murta Padrões GoF 12

Padrão Prototype Leonardo Murta Padrões GoF 13

Padrão Singleton Objetivo: Assegurar que uma determinada classe tem somente uma instância e fornecer um ponto global de acesso a ela Motivação: Em quase todo tipo de sistema existem classes com uma única instância Em um sistema operacional, existe a necessidade de representar o spool de impressoras Leonardo Murta Padrões GoF 14

Padrão Singleton Leonardo Murta Padrões GoF 15

Leonardo Murta Padrões GoF 16

Padrão Adapter Objetivo: Converter a interface de uma classe em outra, para atender as expectativas do cliente Motivação: Permitir que classes incompatíveis trabalhem em conjunto É possível utilizar um wrapper para conectar o sistema de PDV com o serviço de autorização de cartão, mesmo que os métodos não sejam 100% compatíveis Leonardo Murta Padrões GoF 17

Padrão Adapter Leonardo Murta Padrões GoF 18

Padrão Bridge Objetivo: Desacoplar a abstração da sua implementação, de modo que ambos possam variar independentemente Motivação: Supondo que um sistema de locadora de automóveis deseje representar categorias e modelos de carro Será que CarroGM deve herdar de Carro? E CarroEconomico? CarroGM é uma implementação de Carro Leonardo Murta Padrões GoF 19

Padrão Bridge Leonardo Murta Padrões GoF 20

Padrão Composite Objetivo: Compor objetos utilizando uma estrutura de árvore para representar hierarquias de todo-parte Motivação: Permitir que objetos do tipo todo ou do tipo parte sejam tratados da mesma maneira No projeto de um sistema de arquivos, espera-se que tanto um arquivo quanto um diretório possam informar o seu tamanho Leonardo Murta Padrões GoF 21

Padrão Composite Leonardo Murta Padrões GoF 22

Padrão Decorator Objetivo: Atribuir responsabilidades adicionais a um objeto de forma dinâmica Motivação: Em algumas situações é desejado que um objeto tenha mais responsabilidades que os demais da sua classe Supondo um sistema de janelas, é possível desejar que uma determinada caixa de texto tenha borda, e que outra tenha barra de rolagem Leonardo Murta Padrões GoF 23

Padrão Decorator Leonardo Murta Padrões GoF 24

Padrão Facade Objetivo: Prover uma interface única para um conjunto de interfaces de um subsistema, facilitando o seu uso Motivação: Existem situações onde um conjunto de classes deve se comportar como um componente Para isso, o cliente deve falar com uma única interface Suponha a interação entre um sistema cliente com um sistema de controle de biblioteca Leonardo Murta Padrões GoF 25

Padrão Facade Leonardo Murta Padrões GoF 26

Padrão Flyweight Objetivo: Utilizar compartilhamento para atender a um grande número de objetos Motivação: Regularmente, objetos com conteúdos idênticos são criados em um sistema (para representar a mesma entidade) Em um sistema de RH, o objeto que representa a formação dos funcionários pode estar sendo repetido Leonardo Murta Padrões GoF 27

Padrão Flyweight Leonardo Murta Padrões GoF 28

Padrão Proxy Objetivo: Fornece um substituto a um objeto (procurador) Motivação: Em situações onde é custoso o acesso direto a um objeto (rede, disco, etc.), pode-se utilizar um representante local Em um sistema operacional, é necessário fornecer acesso a sistemas de arquivos remotos (ex.: NFS) Leonardo Murta Padrões GoF 29

Padrão Proxy Leonardo Murta Padrões GoF 30

Leonardo Murta Padrões GoF 31

Padrão Chain of Responsability Objetivo: Desacoplar o objeto que envia uma requisição de um receptor único Motivação: Permitir que mais de um objeto possa tratar uma requisição Em um sistema com ajuda (help) sensível ao contexto, os componentes que não têm texto associado podem repassar a responsabilidade para os seus containers Leonardo Murta Padrões GoF 32

Padrão Chain of Responsability Leonardo Murta Padrões GoF 33

Padrão Command Objetivo: Encapsular comandos em objetos para permitir utilização em lote ou undo dos mesmos Motivação: Em um sistema de edição de texto é desejável que seja possível desfazer uma ou mais ações efetuadas Também é desejável que o editor possa funcionar de forma não interativa, através de um roteiro (script) de comandos Leonardo Murta Padrões GoF 34

Padrão Command Leonardo Murta Padrões GoF 35

Padrão Interpreter Objetivo: Definir uma representação em objetos de uma determinada linguagem Motivação: Em um sistema que lida com expressões lógicas, é interessante a criação de uma linguagem que facilite a sua utilização Por exemplo, uma expressão (Ex) pode ser representada por um Booleano, Not(Ex), And(Ex, Ex), Or(Ex, Ex) Leonardo Murta Padrões GoF 36

Padrão Interpreter Leonardo Murta Padrões GoF 37

Padrão Iterator Objetivo: Fornece um mecanismo de acesso a elementos de uma agregação sem quebrar o encapsulamento Motivação: Se um objeto de Turma fornecer a sua lista de alunos interna, poderão ser removidos ou inseridos alunos sem o conhecimento da Turma Esse tipo de problema ocorre com freqüência, e é visto como uma quebra de encapsulamento Leonardo Murta Padrões GoF 38

Padrão Iterator Leonardo Murta Padrões GoF 39

Padrão Mediator Objetivo: Definir um objeto que encapsula como vários outros objetos interagem Motivação: Promover acoplamento fraco não permitindo que os objetos se referenciem Em um sistema de informação, um Mediator pode ser utilizado para manter a consistência da interface Ex.: habilitar ou desabilitar opções em função da seleção de outras opções Leonardo Murta Padrões GoF 40

Padrão Mediator Leonardo Murta Padrões GoF 41

Padrão Memento Objetivo: Capturar e externalizar o estado interno de um objeto sem quebrar o encapsulamento Motivação: Permitir a implementação de mecanismos de checkpoint em um sistema para possibilitar undo Útil em situações que o padrão Command não funciona Em um processamento numérico longo, podem ser salvos estados intermediários Leonardo Murta Padrões GoF 42

Padrão Memento Leonardo Murta Padrões GoF 43

Padrão Observer Objetivo: Definir uma dependência de um para muitos com um mecanismo de notificação de eventos Motivação: A mesma informação (modelo) pode ser exibida em diferentes formatos (visão) em paralelo Suponhamos que dados estatísticos devem ser exibidos, ao mesmo tempo, em forma de tabela e gráfico Esses dados podem ser alterados durante a exibição Leonardo Murta Padrões GoF 44

Padrão Observer Leonardo Murta Padrões GoF 45

Padrão State Objetivo: Permitir que um objeto modifique o seu comportamento em função do seu estado interno Motivação: Gerar o efeito de uma troca de tipo de um objeto em tempo de execução Um forno de microondas deve se comportar de formas diferentes em função do seu estado quando o botão de ligar é pressionado Leonardo Murta Padrões GoF 46

Padrão State Leonardo Murta Padrões GoF 47

Padrão Strategy Objetivo: Definir uma família de algoritmos de forma encapsulada Motivação: Alguns algoritmos se repetem com freqüência, por isso devem ser isolados para facilitar a manutenção Tanto os objetos da classe CatalogoHospedes quanto os objetos da classe CatalogoServicos de um sistema de controle de hotéis precisam de algoritmos de ordenação Leonardo Murta Padrões GoF 48

Padrão Strategy Leonardo Murta Padrões GoF 49

Padrão Template Method Objetivo: Definir o esqueleto de um algoritmo e delegar alguns dos seus passos para as subclasses Motivação: Na construção de frameworks é necessário especificar o comportamento global e definir algumas lacunas para serem preenchidas no momento da instanciação Em um framework de validação de usuário, a forma de validar pode ser SGBD, LDAP, arquivo, etc. Leonardo Murta Padrões GoF 50

Padrão Template Method Leonardo Murta Padrões GoF 51

Padrão Visitor Objetivo: Aumentar a coesão das classes isolando em outras classes tarefas pouco coesas Motivação: Em uma ferramenta Case deve ser possível gerar as informações de casos de uso e classes em HTML, PDF, RTF, TeX, etc. Entretanto, não é desejável que a classe que representa um caso de uso tenha métodos para cada tipo de geração Leonardo Murta Padrões GoF 52

Padrão Visitor Leonardo Murta Padrões GoF 53

Bibliografia Gamma, E.; Helm, R.; Johnson, R.; Vlissides, J.; Design Pattern Elements of Reusable Object- Oriented Software ; Addison-Wesley; 1994 Leonardo Murta Padrões GoF 54

Padrões GoF Leonardo Gresta Paulino Murta leomurta@ic.uff.br