Padrões de Projeto de Software Orientado a Objetos



Documentos relacionados
Padrões de Projeto de Software Orientado a Objetos

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

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

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

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

Tópicos Avançados em Engenharia de Software

Prof.ª Esp. Talita Pagani

1Introdução Helder da Rocha

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

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 GoF. Leonardo Gresta Paulino Murta

Prototype, um Design Patterns de Criação

Testes com Design Patterns

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

Padrões de projeto 1

Programação com Objectos

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

Abstract Factory Pattern

Design Patterns. Viviane Torres da Silva

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

Padrões de Software (Software Patterns)

Análise e Projeto Orientados por Objetos

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

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

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

Design Pattern Implementation in Java and AspectJ

Análise e Projeto Orientados por Objetos

Mas o que é mesmo Padrão de Projeto?

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Engenharia de Software

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

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

Padrões de Desenho (Design Patterns)

Categorias de Padrões

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

PADRÕES DE PROJETO. Cleviton Monteiro

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

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Padrões de Projeto WEB e o MVC

Padrões de Projeto de Software

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

Padrões de Software (Software Patterns)

Padrões de Projeto. Abstract Factory

Padrões. Identificando padrões

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

Padrões de Projeto de Software

Orientação a Objetos

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

Proposta para a Implementação do Cadastro de um Log de Auditoria Baseada em Padrões de Projeto

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

Padrões de Design. Jair C Leite

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

Ministério da Educação UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ Campus Curitiba PLANO DE ENSINO

Programação com Objectos. Programação Centrada em Objectos. Home Page. Ano Lectivo 2008/2009 1º Semestre. Objectivos Programa Bibliografia Avaliação

Padrões de Projeto. Singleton

Análise e Projeto Orientados por Objetos

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

UNIVERSIDADE DO ESTADO DE SANTA CATARINA - UDESC DCC Departamento de Ciência da Computação Joinville-SC

Arquitectura de Sistemas de Software

Introdução a Java. Hélder Nunes

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

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

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

INF011 Padrões de Projeto Introdução

Especificação do 3º Trabalho

Design Patterns na plataforma Java

Requisitos de Software

Engenharia de Requisitos

Eduardo Bezerra. Editora Campus/Elsevier

Padrão Básico de Projeto: Interfaces e Polimorfismo

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

4 - Padrões de Construção

PROGRAMAÇÃO SERVIDOR PADRÕES MVC E DAO EM SISTEMAS WEB. Prof. Dr. Daniel Caetano

Padrões de Desenho Engenharia de Software

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

Padrões contexto problema solução

Aspectos técnicos do desenvolvimento baseado em componentes

Engenharia de Software I: Análise e Projeto de Software Usando UML

USANDO O IZCODE PARA GERAR SOFTWARE RAPIDAMENTE

Padrões de Projeto de Software

Refatoração de sistemas Java utilizando padrões de projeto: um estudo de caso

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

INF011 Padrões de Projeto. 03 Abstract Factory

SCE 186- Engenharia de Software

Gerenciamento de configuração. Gerenciamento de Configuração. Gerenciamento de configuração. Gerenciamento de configuração. Famílias de sistemas

Análise e Projeto Orientados por Objetos

Curso de Aprendizado Industrial Desenvolvedor WEB

2 Diagrama de Caso de Uso

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

Prof. Me. Marcos Echevarria

Desenho de Software. Desenho de Software 1

Modelagemde Software Orientadaa Objetos com UML

Transcrição:

Padrões de Projeto de Software Orientado a Objetos Ricardo Argenton Ramos [Baseado nos slides do professor Fabio Kon - USP] 1

Padrões de Projeto de Software OO Também conhecidos como Padrões de Desenho de Software OO ou simplesmente como Padrões. 2

A Inspiração A idéia de padrões foi apresentada por Christopher Alexander em 1977 no contexto de Arquitetura (de prédios e cidades): Cada padrão descreve um problema que ocorre repetidamente de novo e de novo em nosso ambiente, e então descreve a parte central da solução para aquele problema de uma forma que você pode usar esta solução um milhão de vezes, sem nunca implementa-la duas vezes da mesma forma. 3

Catálogo de soluções Um padrão encerra o conhecimento de uma pessoa muito experiente em um determinado assunto de uma forma que este conhecimento pode ser transmitido para outras pessoas menos experientes. Outras ciências (p.ex. química) e engenharias possuem catálogos de soluções. Desde 1995, o desenvolvimento de software passou a ter o seu primeiro catálogo de soluções para projeto de software: o livro GoF. 4

Gang of Four (GoF) E. Gamma and R. Helm and R. Johnson and J. Vlissides. Design Patterns - Elements of Reusable Object-Oriented Software. Addison- Wesley, 1995. 5

Gang of Four (GoF) Passamos a ter um vocabulário comum para conversar sobre projetos de software. Soluções que não tinham nome passam a ter nome. Ao invés de discutirmos um sistema em termos de pilhas, filas, árvores, passamos a falar de coisas de muito mais alto nível como Fábricas, Fachadas, Observador, Estratégia, etc. A maioria dos autores eram entusiastas de Smalltalk, principalmente o Ralph Johnson. Mas acabaram baseando o livro em C++ para que o impacto junto à comunidade de C fosse maior. E o impacto foi enorme, o livro vendeu centenas de milhares de cópias. 6

O Formato de um padrão Todo padrão inclui o mínimo: Nome Problema Solução Conseqüências / Forças Exemplo 7

O Formato dos padrões no GoF 1/4 Nome (inclui número da página) um bom nome é essencial para que o padrão caia na boca do povo Objetivo / Intenção Motivação um cenário mostrando o problema e a necessidade da solução Aplicabilidade como reconhecer as situações nas quais o padrão é aplicável 8

O Formato dos padrões no GoF 2/4 Estrutura uma representação gráfica da estrutura de classes do padrão (usando OMT91) em, às vezes, diagramas de interação (Booch 94) Participantes as classes e objetos que participam e quais são suas responsabilidades Colaborações como os participantes colaboram para exercer as suas responsabilidades 9

O Formato dos padrões no GoF 3/4 Conseqüências vantagens e desvantagens, trade-offs Implementação com quais detalhes devemos nos preocupar quando implementamos o padrão aspectos específicos de cada linguagem Exemplo de Código no caso do GoF, em C++ (a maioria) ou Smalltalk 10

O Formato dos padrões no GoF 4/4 Usos Conhecidos exemplos de sistemas reais de domínios diferentes onde o padrão é utilizado Padrões Relacionados quais outros padrões devem ser usados em conjunto com esse quais padrões são similares a este, quais são as dierenças 11

Tipos de Padrões de Projeto Categorias de Padrões do GoF Padrões de Criação Padrões Estruturais Padrões Comportamentais Exemplo: Fábrica Abstrata (Abstract Factory (87)) - padrão de Criação de objetos 12

Fábrica Abstrata Abstract Factory (87) Objetivo: prover uma interface para criação de famílias de objetos relacionados sem especificar sua classe concreta. 13

Abstract Factory - Motivação Considere uma aplicação com interface gráfica que é implementada para plataformas diferentes (Motif para UNIX e outros ambientes para Windows e MacOS). As classes implementando os elementos gráficos não podem ser definidas estaticamente no código. Precisamos de uma implementação diferente para cada ambiente. Até em um mesmo ambiente, gostaríamos de dar a opção ao usuário de implementar diferentes aparências (look-and-feels). Podemos solucionar este problema definindo uma classe abstrata para cada elemento gráfico e utilizando diferentes implementações para cada aparência ou para cada ambiente. Ao invés de criarmos as classes concretas com o operador new, utilizamos uma Fábrica Abstrata para criar os objetos em tempo de execução. O código cliente não sabe qual classe concreta utilizamos. 14

Abstract Factory - Aplicabilidade Use uma fábrica abstrata quando: um sistema deve ser independente da forma como seus produtos são criados e representados; um sistema deve poder lidar com uma família de vários produtos diferentes; você quer prover uma biblioteca de classes de produtos mas não quer revelar as suas implementações, quer revelar apenas suas interfaces. 15

Abstract Factory - Estrutura AbstractFactory CreatProductA() CreatProductB() AbstractProductA Client ProductA2 ProductA1 ConcreteFactory1 CreatProductA() CreatProductB() ConcreteFactory2 CreatProductA() CreatProductB() AbstractProductB ProductB2 ProductB1 16

Abstract Factory - Participantes AbstractFactory (WidgetFactory) ConcreteFactory (MotifWidgetFactory, WindowsWidgetFactory) AbstractProduct (Window, ScrollBar) ConcreteProduct (MotifWindow, MotifScrollBar, WindowsWindow, WindowsScrollBar) Client - usa apenas as interfaces declaradas pela AbstractFactory e pelas classes AbstratProduct 17

Abstract Factory - Colaborações Normalmente, apenas uma instância de ConcreteFactory é criada em tempo de execução. Esta instância cria objetos através das classes ConcreteProduct correspondentes a uma família de produtos. Uma AbstractFactory deixa a criação de objetos para as suas subclasses ConcreteFactory. 18

Abstract Factory - Conseqüências O padrão 1. isola as classes concretas dos clientes; 2. facilita a troca de famílias de produtos (basta trocar uma linha do código pois a criação da fábrica concreta aparece em um único ponto do programa); 3. promove a consistência de produtos (não há o perigo de misturar objetos de famílias diferentes); 4. dificulta a criação de novos produtos ligeiramente diferentes (pois temos que modificar a fábrica abstrata e todas as fábricas concretas). 19

Abstract Factory - Implementação 1. Fábricas abstratas em geral são implementadas como (127). 2. Na fábrica abstrata, cria-se um método fábrica para cada tipo de produto. Cada fábrica concreta implementa o código que cria os objetos de fato. 3. Se tivermos muitas famílias de produtos, teríamos um excesso de classes fábricas concretas. Para resolver este problema, podemos usar o Prototype (117): criamos um dicionário mapeando tipos de produtos em instâncias prototípicas destes produtos. Então, sempre que precisarmos criar um novo produto pedimos à sua instância prototípica que crie um clone (usando um método como clone() ou copy()). 20

Abstract Factory - Implementação 4. Em linguagens dinâmicas como Smalltalk onde classes são objetos de primeira classe, não precisamos guardar uma instância prototípica, guardamos uma referência para a própria classe e daí utilizamos o método new para construir as novas instâncias. 5. Definindo fábricas extensíveis. normalmente, cada tipo de produto tem o seu próprio método fábrica; isso torna a inclusão de novos produtos difícil. solução: usar apenas um método fábrica Product make (string thingtobemade) isso aumenta a flexibilidade mas torna o código menos seguro (não teremos verificação de tipos pelo 21 compilador).

Abstract Factory - Usos Conhecidos InterViews usa fábricas abstratas para encapsular diferentes tipos de aparências para sua interface gráfica ET++ usa fábricas abstratas para permitir a fácil portabilidade para diferentes ambientes de janelas (XWindows e SunView, por exemplo) Sistema de captura e reprodução de vídeo feito na UIUC usa fábricas abstratas para permitir portabilidade entre diferentes placas de captura de vídeo. Em linguagens dinâmicas como Smalltalk (e talvez em POO em geral) classes podem ser vistas como fábricas de objetos. 22

Abstract Factory - Padrões Relacionados Fábricas abstratas são normalmente implementadas com métodos fábrica (FactoryMethod (107)) mas podem também ser implementados usando Prototype (117). O uso de protótipos é particularmente importante em linguagens não dinâmicas como C++ e em linguagens "semi-dinâmicas" como Java. Em Smalltalk, não é tão relevante. Curiosidade: a linguagem Self não possui classes, toda criação de objetos é feita via clonagem. Uma fábrica concreta é normalmente um Singleton (127) 23

Os 23 Padrões do GoF Criação Abstract Factory Builder Factory Method Prototype Singleton 24

Os 23 Padrões do GoF Estruturais Adapter Bridge Composite Decorator Façade Flyweight Proxy 25

Os 23 Padrões do GoF Comportamentais Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor 26

Próxima aula Em grupos de 3 alunos deverão estudar um tipo de padrão do Gof e apresentar em sala de aula para os outros. 27

Recapitulando Voltando ao Christopher Alexander: Cada padrão descreve um problema que ocorre repetidamente de novo e de novo em nosso ambiente, e então descreve a parte central da solução para aquele problema de uma forma que você pode usar esta solução um milhão de vezes, sem nunca implementá-la duas vezes da mesma forma. 28