Padrões de Projeto de Software Orientado a Objetos

Slides:



Advertisements
Apresentações semelhantes
Soluções elegantes para problemas recorrentes
Advertisements

Padrão de Projeto Iterator
PADRÕES DE PROJETO..
Design Patterns Patrícia Mateus nº3343 Carla Guerreiro nº3157
Modelagem de Software Orientado a Objetos
Projeto de Sistemas de Software
Design Patterns Builder Pattern
Elisabeth Suescún Leandra Mara da Silva
Projeto de Sistemas de Software
Projeto de Sistemas de Software
Projeto de Sistemas de Software
Padrões de Projeto Prototype.
Abstract Factory – Gustavo Lopes Mourad.
Padrão Abstract Factory
1 Introdução aos padrões de projeto (GoF) Conceitos preliminares –Mecanismos de herança –Princípio de Substituição de Liskov –Acoplamento concreto x Acoplamento.
Abstract Factory Intenção: fornecer uma interface comum para a criação de famílias de objetos relacionados ou dependentes, sem especificar suas classes.
Análise e Projeto de Sistemas
Padrões - introdução O que é um padrão?
Trabalho de Conclusão de Curso Moisés Alves Carneiro Filho
Design Pattern e a Reusabilidade de Software
Padrão de Construção Factory Method
Padrão de Projeto Chain of Responsability e Template Method
Design Patterns Projeto de Sistemas de Software.
Fundamentos da Engenharia de Software
Visão crítica sobre padrões: Over Engineering
Padrões de projeto detalhados Factory Method, Abstract Factory
Singleton e Adapter Professor: Nazareno Andrade
Módulo III Padrões GOF Professores
Projeto de Sistemas de Software
Integração com Banco de Dados
Padrões de Projeto These slides complement the E-book, Programming in the Large With Design Patterns available on both Kindle and Nook. Additional supporting.
Design Pattern (Padrões de Projeto)
Introdução Padrões de Projeto
April 05 Prof. Ismael H. F. Santos - 1 Módulo I Princípios e Padrões de Projeto de SW em Java Professores Eduardo Bezerra –
Design Patterns (Padrões de Projeto)
Padrão de Projeto Iterator Projeto de Sistemas de Software Thiago Pinheiro de Araújo.
Padrões de Design Toacy Cavalcante de Oliveira. 2 April 20, 2015 Problema.
Padrões de Projeto Abstract Factory.
Padrões de Projeto.
Factory.
Padrão de desenvolvimento
April 05 Prof. Ismael H. F. Santos - 1 Modulo I Princípios e Padrões de Projeto de SW em Java Professores Eduardo Bezerra –
Abstract Factory Pattern Algumas aplicações precisam criar objetos de classes que podem mudar ex: elementos de um sistema GUI. –Diferentes padrões precisam.
April 05 Prof. Ismael H. F. Santos - 1 Módulo III Padrões GOF: AbstractMethod Professores Eduardo Bezerra –
Design Patterns A adoção dos padrões terá um efeito profundo e duradouro sobre a forma de escrevermos programas Ward Cunningham e Ralph Johnson.
Padrões de Projeto Alcides Calsavara
1 Padrões: Composite (p. 163) Objetivo: compor objetos em estruturas de árvores para representar relações de parte/todo. “Composite” permite tratar objetos.
Padrões de projeto M.Sc. Sílvio Bacalá Jr..
1 Design Patterns Israel Rios. 2 Origens A idéia de padrões de projeto não teve origem na ciência da computação Christopher Alexander A Pattern Language:
Jobson Ronan Padrões GoF Jobson Ronan
CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 1: INTRODUÇÃO Prof. Cesar Augusto Tacla UTFPR/Campus.
1 - Introdução a Padrões de Projeto
Padrões de Projetos Professora Lucélia. Conceitos É uma solução conhecida para um problema comum São técnicas que nos dão uma boa solução para determinados.
Padrões de Projetos Orientados a Objetos I Wolley W. Silva.
PADROES DE PROJETO PROF. OSIEL MARLON. PADRÕES DE PROJETO INTRODUÇÃO Padrões de projeto têm emergido como uma das mais promissoras abordagens para a melhoria.
Aula 6 – Padrão Factory Method
Padrões de Projeto. O que são?  Soluções provenientes de diversos projetos e utilizados por diversos programadores;  Documentados em catálogos como.
Aula 7 – Padrão Abstract Factory
Padrões Criacionais Abstraem o processo de criação de instâncias (objetos), oferecendo flexibilidade no que é criado, por quem, como e quando.
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
©2003, Alexandre Vasconcelos & Augusto Sampaio CIn-UFPE1/65 Padrões de Projeto.
Padrões de Projeto de Criação Padrões de Projeto Orientados a Objetos Prof a. Danielle Martin Universidade de Mogi das Cruzes.
1 Introdução aos Padrões de Projetos (na prática) Créditos: Lúbia Vinhas Hazel Carvalho Crato Adaptações: Prof. Nécio de Lima Veras.
Jadson Xavier Muller Oliveira.  É difícil encontrar alguma definição consensual de padrão.  Definição aceitável: - São idéias que foram úteis em algum.
1 Padrões de Projeto de Software Orientado a Objetos Programação Orientada a Objetos Prof. Fabio Kon - IME/USP.
1 Introdução aos Padrões de Projetos Créditos: Prof. Fabio Kon - IME/USP Adaptações: Prof. Nécio de Lima Veras.
Introdução a Padrões de Projeto Padrões de Projeto Orientado a Objetos Profa. Danielle Martin Universidade de Mogi das Cruzes.
Programação Orienta a Objetos (SI) Análise e Projetos de Sistemas (LCC) 1 - Introdução a Padrões de Projeto Eduardo de Lucena Falcão.
Introdução a Padrões de Projeto Padrões de Projeto Orientado a Objetos Profa. Danielle Martin Universidade de Mogi das Cruzes.
Padrões de Projeto.
Transcrição da apresentação:

Padrões de Projeto de Software Orientado a Objetos Tópicos de Programação Orientada a Objetos MAC 5759 Prof. Fabio Kon - IME/USP

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

Padrões de Projeto de Software OO 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. Livros The Timeless Way of Building A Pattern Language: Towns, Buildings, and Construction serviram de inspiração para os desenvolvedores de software. Padrões de Projeto de Software OO

Padrões de Projeto de Software OO 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. Padrões de Projeto de Software OO

Padrões de Projeto de Software OO 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. Padrões de Projeto de Software OO

Padrões de Projeto de Software OO 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 e listas ligadas, 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 CC fosse maior. E o impacto foi enorme, o livro vendeu centenas de milhares de cópias. Padrões de Projeto de Software OO

Padrões de Projeto de Software OO O Formato de um padrão Todo padrão inclui Nome Problema Solução Conseqüências / Forças Existem outros tipos de padrões mas na aula de hoje vamos nos concentrar no GoF. Padrões de Projeto de Software OO

O Formato dos padrões no GoF Nome (inclui número da página) um bom nome é essencial para que o padrão caia na boca do povo Objetivo / Intenção Também Conhecido Como 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 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 Padrões de Projeto de Software OO

O Formato dos padrões no GoF 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 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 Padrões de Projeto de Software OO

Tipos de Padrões de Projeto Categorias de Padrões do GoF Padrões de Criação Padrões Estruturais Padrões Comportamentais Vamos ver um exemplo de cada um deles. Na aula de hoje: Fábrica Abstrata (Abstract Factory (87)) - padrão de Criação de objetos Padrões de Projeto de Software OO

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

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. Padrões de Projeto de Software OO

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. Padrões de Projeto de Software OO

Abstract Factory - Estrutura CreatProductA() CreatProductB() Client AbstractProductA ProductA2 ProductA1 ConcreteFactory1 CreatProductA() CreatProductB() ConcreteFactory2 CreatProductA() CreatProductB() AbstractProductB ProductB2 ProductB1 Padrões de Projeto de Software OO

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 Padrões de Projeto de Software OO

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. Padrões de Projeto de Software OO

Abstract Factory - Conseqüências O padrão isola as classes concretas dos clientes; 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); promove a consistência de produtos (não há o perigo de misturar objetos de famílias diferentes); dificulta a criação de novos produtos ligeiramente diferentes (pois temos que modificar a fábrica abstrata e todas as fábricas concretas). Padrões de Projeto de Software OO

Abstract Factory - Implementação Fábricas abstratas em geral são implementadas como (127). 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. 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()). Padrões de Projeto de Software OO

Abstract Factory - Implementação 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. 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 compilador). Padrões de Projeto de Software OO

Abstract Factory - Exemplos de Código O GoF contém exemplos em C++ e Smalltalk Na próxima aula veremos exemplos em C++ Smalltalk Java e faremos uma comparação entre as implementações nestas linguagens Padrões de Projeto de Software OO

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. InterViews é um toolkit para a construção de aplicações gráficas no X Windows no qual o John Vlissides trabalhou e fez parte de sua tese de doutorado. ET++ é um arcabouço no qual o Gamma trabalhou e ajudava a construir aplicações com interfaces gráficas complexas (similares ao Java Swing de hoje). Padrões de Projeto de Software OO

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) Padrões de Projeto de Software OO

Os 23 Padrões do GoF Criação Abstract Factory Builder Factory Method Prototype Singleton Padrões de Projeto de Software OO

Os 23 Padrões do GoF Estruturais Adapter Bridge Composite Decorator Façade Flyweight Proxy Padrões de Projeto de Software OO

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

Padrões de Projeto de Software OO Para próxima aula Dar uma olhada no GoF a biblioteca possui algumas cópias Buscar por “GoF patterns” no google Padrões de Projeto de Software OO

Padrões de Projeto de Software OO 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 implementa-la duas vezes da mesma forma. Talvez a última parte não seja sempre desejável. Padrões de Projeto de Software OO

Padrões de Projeto de Software OO Próximas Aulas Exemplos de uso de Fábrica Abstrata em C++ Java Smalltalk Demais padrões do GoF Outros tipos de padrões arquiteturais de análise anti-padrões etc. Padrões de Projeto de Software OO