SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Padrões de Projeto de Software
Orientado a Objetos
Engenharia de Software
Professor:
Cloves Rocha
PhD Student in Computer Science
MSc. in Computer Science
Padrões de Projeto de Software OO 2 / 33
Padrões de Projeto de Software
Orientados a Objetos (OO)
■ Também conhecidos como
◻ Padrões de Desenho de Software OO
◻ ou simplesmente como Padrões.
Padrões de Projeto de Software OO 3 / 33
A Inspiração
■ A ideia 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
implementá-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 4 / 33
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 (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 5 / 33
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 6 / 33
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 7 / 33
O Formato de um padrão
■ Todo padrão inclui
◻ Nome
◻ Problema
◻ Solução
◻ Consequê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 8 / 33
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 9 / 33
O Formato dos padrões no GoF
◻ Consequê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 10 / 33
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 11 / 33
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 12 / 33
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 13 / 33
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 14 / 33
Abstract Factory - Estrutura
AbstractProductA
ProductA1
Client
ProductA2
AbstractFactory
CreatProductA()
CreatProductB()
ConcreteFactory2
CreatProductA()
CreatProductB()
ConcreteFactory1
CreatProductA()
CreatProductB()
AbstractProductB
ProductB1ProductB2
Padrões de Projeto de Software OO 15 / 33
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 16 / 33
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 17 / 33
Abstract Factory - Consequê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).
Padrões de Projeto de Software OO 18 / 33
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()).
Padrões de Projeto de Software OO 19 / 33
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 compilador).
Padrões de Projeto de Software OO 20 / 33
Abstract Factory -
Exemplos de Código
■ O GoF contém exemplos em C++ e Smalltalk
■ Para casa, dar uma olhada em implementações em
◻ C++
◻ Smalltalk
◻ Java
■ e pense nas diferenças entre as implementações nestas linguagens
Pausa para o Template Method
■ Template Method (325) - padrão Comportamental
◻ definição de classes abstratas com métodos concretos
que apresentam uma receita de bolo chamando outros
métodos abstratos
◻ são as subclasses concretas que definem que tipo de
bolo será criado.
◻ no exemplo do Yoder note como o View "obriga" suas
subclasses a sempre chamar o setFocus antes e o
resetFocus depois.
Padrões de Projeto de Software OO 21 / 33
Cap. 13 do livro
■ Design Patterns in Ruby
◻ A aventura do laguinho
Padrões de Projeto de Software OO 22 / 33
Exemplo em Ruby (1/2)
Padrões de Projeto de Software OO 23 / 33
Exemplo em Ruby (2/2)
Padrões de Projeto de Software OO 24 / 33
Padrões de Projeto de Software OO 25 / 33
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.
Padrões de Projeto de Software OO 26 / 33
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 27 / 33
Os 23 Padrões do GoF
Criação
■ Abstract Factory
■ Builder
■ Factory Method
■ Prototype
■ Singleton
Padrões de Projeto de Software OO 28 / 33
Os 23 Padrões do GoF
Estruturais
■ Adapter
■ Bridge
■ Composite
■ Decorator
■ Façade
■ Flyweight
■ Proxy
Padrões de Projeto de Software OO 29 / 33
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 30 / 33
Para próxima aula
■ Apresentar qual o tipo de padrão foi selecionado para
o projeto do time… dar uma olhada no GoF
◻ a biblioteca possui algumas cópias
■ Adicionar tarefa no card do ~>
Padrões de Projeto de Software OO 31 / 33
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.
■ Talvez a última parte não seja sempre desejável.
Padrões de Projeto de Software OO 32 / 33
Próximas Aulas
■ Demais padrões do GoF
■ Outros tipos de padrões
◻ arquiteturais
◻ de análise
◻ anti-padrões
◻ etc.
Bibliografia
33 / 33
Obrigado! Thank you!
Dúvidas?
class ACESSO AO MATERIAL
def new_aula (nova)
end

Mais conteúdo relacionado

Mais procurados

Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamentothiagodp
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshopguestd37c23
 

Mais procurados (7)

Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...
 
PHP Anti Patterns
PHP Anti PatternsPHP Anti Patterns
PHP Anti Patterns
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamento
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 

Semelhante a Padrões de Projeto de Software Orientado a Objetos

Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Analise_OO1a_Introducao.ppt
Analise_OO1a_Introducao.pptAnalise_OO1a_Introducao.ppt
Analise_OO1a_Introducao.pptssuser12105c
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareivanassisleal
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceCarolina Karklis
 
Padrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryPadrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryEduardo Nicola F. Zagari
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Renato Groff
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Gabriel Rubens
 
Analise e desenvolvimento
Analise e desenvolvimentoAnalise e desenvolvimento
Analise e desenvolvimentoGabriel Moura
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a AspectosRicardo Terra
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design PatternsLucas Simões Maistro
 
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Renato Groff
 

Semelhante a Padrões de Projeto de Software Orientado a Objetos (20)

GoF.ppt
GoF.pptGoF.ppt
GoF.ppt
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Travalho versao final
Travalho versao finalTravalho versao final
Travalho versao final
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Analise_OO1a_Introducao.ppt
Analise_OO1a_Introducao.pptAnalise_OO1a_Introducao.ppt
Analise_OO1a_Introducao.ppt
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_software
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
 
Padrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryPadrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract Factory
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
 
Cs 2
Cs 2Cs 2
Cs 2
 
Analise e desenvolvimento
Analise e desenvolvimentoAnalise e desenvolvimento
Analise e desenvolvimento
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
 

Mais de Cloves da Rocha

Mineração de Dados Um Estudo de Caso Real.pdf
Mineração de Dados Um Estudo de Caso Real.pdfMineração de Dados Um Estudo de Caso Real.pdf
Mineração de Dados Um Estudo de Caso Real.pdfCloves da Rocha
 
Live: Inteligência Artificial (IA) para pequenas e médias empresas
Live: Inteligência Artificial (IA) para pequenas e médias empresasLive: Inteligência Artificial (IA) para pequenas e médias empresas
Live: Inteligência Artificial (IA) para pequenas e médias empresasCloves da Rocha
 
Introdução a Machine Learning na Prática
Introdução a Machine Learning na PráticaIntrodução a Machine Learning na Prática
Introdução a Machine Learning na PráticaCloves da Rocha
 
II JEDI 2019 - OUP e OPS
II JEDI 2019 - OUP e OPS II JEDI 2019 - OUP e OPS
II JEDI 2019 - OUP e OPS Cloves da Rocha
 
Café.COM - OUP | Observatório de Projetos de Software (OPS) com ênfase em da...
Café.COM - OUP | Observatório de Projetos de Software (OPS)  com ênfase em da...Café.COM - OUP | Observatório de Projetos de Software (OPS)  com ênfase em da...
Café.COM - OUP | Observatório de Projetos de Software (OPS) com ênfase em da...Cloves da Rocha
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareCloves da Rocha
 
Observatório de Projetos de Software com ênfase em dados abertos
Observatório de Projetos de Software com ênfase em dados abertosObservatório de Projetos de Software com ênfase em dados abertos
Observatório de Projetos de Software com ênfase em dados abertosCloves da Rocha
 
Gestão de Riscos em Processos de Negócios
Gestão de Riscos em Processos de NegóciosGestão de Riscos em Processos de Negócios
Gestão de Riscos em Processos de NegóciosCloves da Rocha
 
Utilização de Ferramenta Para Monitoração de Desempenho Baseada em Métodos Ág...
Utilização de Ferramenta Para Monitoração de Desempenho Baseada em Métodos Ág...Utilização de Ferramenta Para Monitoração de Desempenho Baseada em Métodos Ág...
Utilização de Ferramenta Para Monitoração de Desempenho Baseada em Métodos Ág...Cloves da Rocha
 
Aula 04 - Estudo de Caso Atacadão
Aula 04 - Estudo de Caso AtacadãoAula 04 - Estudo de Caso Atacadão
Aula 04 - Estudo de Caso AtacadãoCloves da Rocha
 
Café com André Menelau
Café com André MenelauCafé com André Menelau
Café com André MenelauCloves da Rocha
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de RequisitosCloves da Rocha
 
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves Rocha
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves RochaAPRESENTAÇÃO DO PROFESSOR - By Prof. Cloves Rocha
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves RochaCloves da Rocha
 
Principais Certificações em TIC - ITIL
Principais Certificações em TIC - ITILPrincipais Certificações em TIC - ITIL
Principais Certificações em TIC - ITILCloves da Rocha
 
Principais Certificações em TIC
Principais Certificações em TIC Principais Certificações em TIC
Principais Certificações em TIC Cloves da Rocha
 
I Café ETE PORTO DIGITAL | EDUCAÇÃO PARA O SÉCULO 21
I Café ETE PORTO DIGITAL | EDUCAÇÃO PARA O SÉCULO 21I Café ETE PORTO DIGITAL | EDUCAÇÃO PARA O SÉCULO 21
I Café ETE PORTO DIGITAL | EDUCAÇÃO PARA O SÉCULO 21Cloves da Rocha
 
XII Café e CODE - Provocações do Mestre
XII Café e CODE - Provocações do MestreXII Café e CODE - Provocações do Mestre
XII Café e CODE - Provocações do MestreCloves da Rocha
 
XI Café e CODE - Provocações do Mestre
XI Café e CODE - Provocações do MestreXI Café e CODE - Provocações do Mestre
XI Café e CODE - Provocações do MestreCloves da Rocha
 
Introdução à Qualidade de Software
Introdução à Qualidade de SoftwareIntrodução à Qualidade de Software
Introdução à Qualidade de SoftwareCloves da Rocha
 

Mais de Cloves da Rocha (20)

Mineração de Dados Um Estudo de Caso Real.pdf
Mineração de Dados Um Estudo de Caso Real.pdfMineração de Dados Um Estudo de Caso Real.pdf
Mineração de Dados Um Estudo de Caso Real.pdf
 
Live: Inteligência Artificial (IA) para pequenas e médias empresas
Live: Inteligência Artificial (IA) para pequenas e médias empresasLive: Inteligência Artificial (IA) para pequenas e médias empresas
Live: Inteligência Artificial (IA) para pequenas e médias empresas
 
Introdução a Machine Learning na Prática
Introdução a Machine Learning na PráticaIntrodução a Machine Learning na Prática
Introdução a Machine Learning na Prática
 
II JEDI 2019 - OUP e OPS
II JEDI 2019 - OUP e OPS II JEDI 2019 - OUP e OPS
II JEDI 2019 - OUP e OPS
 
Café.COM - OUP | Observatório de Projetos de Software (OPS) com ênfase em da...
Café.COM - OUP | Observatório de Projetos de Software (OPS)  com ênfase em da...Café.COM - OUP | Observatório de Projetos de Software (OPS)  com ênfase em da...
Café.COM - OUP | Observatório de Projetos de Software (OPS) com ênfase em da...
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de Software
 
Observatório de Projetos de Software com ênfase em dados abertos
Observatório de Projetos de Software com ênfase em dados abertosObservatório de Projetos de Software com ênfase em dados abertos
Observatório de Projetos de Software com ênfase em dados abertos
 
Gestão de Riscos em Processos de Negócios
Gestão de Riscos em Processos de NegóciosGestão de Riscos em Processos de Negócios
Gestão de Riscos em Processos de Negócios
 
Palestra GEOMARKETING
Palestra GEOMARKETINGPalestra GEOMARKETING
Palestra GEOMARKETING
 
Utilização de Ferramenta Para Monitoração de Desempenho Baseada em Métodos Ág...
Utilização de Ferramenta Para Monitoração de Desempenho Baseada em Métodos Ág...Utilização de Ferramenta Para Monitoração de Desempenho Baseada em Métodos Ág...
Utilização de Ferramenta Para Monitoração de Desempenho Baseada em Métodos Ág...
 
Aula 04 - Estudo de Caso Atacadão
Aula 04 - Estudo de Caso AtacadãoAula 04 - Estudo de Caso Atacadão
Aula 04 - Estudo de Caso Atacadão
 
Café com André Menelau
Café com André MenelauCafé com André Menelau
Café com André Menelau
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves Rocha
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves RochaAPRESENTAÇÃO DO PROFESSOR - By Prof. Cloves Rocha
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves Rocha
 
Principais Certificações em TIC - ITIL
Principais Certificações em TIC - ITILPrincipais Certificações em TIC - ITIL
Principais Certificações em TIC - ITIL
 
Principais Certificações em TIC
Principais Certificações em TIC Principais Certificações em TIC
Principais Certificações em TIC
 
I Café ETE PORTO DIGITAL | EDUCAÇÃO PARA O SÉCULO 21
I Café ETE PORTO DIGITAL | EDUCAÇÃO PARA O SÉCULO 21I Café ETE PORTO DIGITAL | EDUCAÇÃO PARA O SÉCULO 21
I Café ETE PORTO DIGITAL | EDUCAÇÃO PARA O SÉCULO 21
 
XII Café e CODE - Provocações do Mestre
XII Café e CODE - Provocações do MestreXII Café e CODE - Provocações do Mestre
XII Café e CODE - Provocações do Mestre
 
XI Café e CODE - Provocações do Mestre
XI Café e CODE - Provocações do MestreXI Café e CODE - Provocações do Mestre
XI Café e CODE - Provocações do Mestre
 
Introdução à Qualidade de Software
Introdução à Qualidade de SoftwareIntrodução à Qualidade de Software
Introdução à Qualidade de Software
 

Último

Produção de poemas - Reciclar é preciso
Produção  de  poemas  -  Reciclar é precisoProdução  de  poemas  -  Reciclar é preciso
Produção de poemas - Reciclar é precisoMary Alvarenga
 
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdfROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdfMarcianaClaudioClaud
 
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxSlides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxLuizHenriquedeAlmeid6
 
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptxSlides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptxLuizHenriquedeAlmeid6
 
O Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhosoO Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhosoVALMIRARIBEIRO1
 
Insegurança nunca mais tem afeta pessoas
Insegurança nunca mais tem afeta pessoasInsegurança nunca mais tem afeta pessoas
Insegurança nunca mais tem afeta pessoasdiegosouzalira10
 
o-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdfo-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdfCarolineNunes80
 
Livro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-criançasLivro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-criançasMonizeEvellin2
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaHenrique Santos
 
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptxSlide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptxsfwsoficial
 
"Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande""Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande"Ilda Bicacro
 
Testes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfTestes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfCsarBaltazar1
 
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxEB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxIlda Bicacro
 
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdfHistoria-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdfandreaLisboa7
 
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEblogdoelvis
 
Descrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamenteDescrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamenteLeonel Morgado
 
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdfaulasgege
 
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHASMARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHASyan1305goncalves
 

Último (20)

Produção de poemas - Reciclar é preciso
Produção  de  poemas  -  Reciclar é precisoProdução  de  poemas  -  Reciclar é preciso
Produção de poemas - Reciclar é preciso
 
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdfROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
 
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxSlides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
 
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptxSlides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
 
O Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhosoO Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhoso
 
Poema - Aedes Aegypt.
Poema - Aedes Aegypt.Poema - Aedes Aegypt.
Poema - Aedes Aegypt.
 
Insegurança nunca mais tem afeta pessoas
Insegurança nunca mais tem afeta pessoasInsegurança nunca mais tem afeta pessoas
Insegurança nunca mais tem afeta pessoas
 
o-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdfo-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdf
 
Livro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-criançasLivro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-crianças
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de Infância
 
Poema - Maio Laranja
Poema - Maio Laranja Poema - Maio Laranja
Poema - Maio Laranja
 
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptxSlide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
 
"Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande""Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande"
 
Testes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfTestes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdf
 
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxEB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
 
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdfHistoria-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
 
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
 
Descrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamenteDescrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamente
 
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
 
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHASMARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
 

Padrões de Projeto de Software Orientado a Objetos

  • 1. Padrões de Projeto de Software Orientado a Objetos Engenharia de Software Professor: Cloves Rocha PhD Student in Computer Science MSc. in Computer Science
  • 2. Padrões de Projeto de Software OO 2 / 33 Padrões de Projeto de Software Orientados a Objetos (OO) ■ Também conhecidos como ◻ Padrões de Desenho de Software OO ◻ ou simplesmente como Padrões.
  • 3. Padrões de Projeto de Software OO 3 / 33 A Inspiração ■ A ideia 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 implementá-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.
  • 4. Padrões de Projeto de Software OO 4 / 33 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 (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.
  • 5. Padrões de Projeto de Software OO 5 / 33 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.
  • 6. Padrões de Projeto de Software OO 6 / 33 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.
  • 7. Padrões de Projeto de Software OO 7 / 33 O Formato de um padrão ■ Todo padrão inclui ◻ Nome ◻ Problema ◻ Solução ◻ Consequências / Forças ■ Existem outros tipos de padrões mas na aula de hoje vamos nos concentrar no GoF.
  • 8. Padrões de Projeto de Software OO 8 / 33 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
  • 9. Padrões de Projeto de Software OO 9 / 33 O Formato dos padrões no GoF ◻ Consequê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
  • 10. Padrões de Projeto de Software OO 10 / 33 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
  • 11. Padrões de Projeto de Software OO 11 / 33 Fábrica Abstrata Abstract Factory (87) Objetivo: ■ prover uma interface para criação de famílias de objetos relacionados sem especificar sua classe concreta.
  • 12. Padrões de Projeto de Software OO 12 / 33 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.
  • 13. Padrões de Projeto de Software OO 13 / 33 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.
  • 14. Padrões de Projeto de Software OO 14 / 33 Abstract Factory - Estrutura AbstractProductA ProductA1 Client ProductA2 AbstractFactory CreatProductA() CreatProductB() ConcreteFactory2 CreatProductA() CreatProductB() ConcreteFactory1 CreatProductA() CreatProductB() AbstractProductB ProductB1ProductB2
  • 15. Padrões de Projeto de Software OO 15 / 33 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
  • 16. Padrões de Projeto de Software OO 16 / 33 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.
  • 17. Padrões de Projeto de Software OO 17 / 33 Abstract Factory - Consequê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).
  • 18. Padrões de Projeto de Software OO 18 / 33 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()).
  • 19. Padrões de Projeto de Software OO 19 / 33 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 compilador).
  • 20. Padrões de Projeto de Software OO 20 / 33 Abstract Factory - Exemplos de Código ■ O GoF contém exemplos em C++ e Smalltalk ■ Para casa, dar uma olhada em implementações em ◻ C++ ◻ Smalltalk ◻ Java ■ e pense nas diferenças entre as implementações nestas linguagens
  • 21. Pausa para o Template Method ■ Template Method (325) - padrão Comportamental ◻ definição de classes abstratas com métodos concretos que apresentam uma receita de bolo chamando outros métodos abstratos ◻ são as subclasses concretas que definem que tipo de bolo será criado. ◻ no exemplo do Yoder note como o View "obriga" suas subclasses a sempre chamar o setFocus antes e o resetFocus depois. Padrões de Projeto de Software OO 21 / 33
  • 22. Cap. 13 do livro ■ Design Patterns in Ruby ◻ A aventura do laguinho Padrões de Projeto de Software OO 22 / 33
  • 23. Exemplo em Ruby (1/2) Padrões de Projeto de Software OO 23 / 33
  • 24. Exemplo em Ruby (2/2) Padrões de Projeto de Software OO 24 / 33
  • 25. Padrões de Projeto de Software OO 25 / 33 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.
  • 26. Padrões de Projeto de Software OO 26 / 33 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)
  • 27. Padrões de Projeto de Software OO 27 / 33 Os 23 Padrões do GoF Criação ■ Abstract Factory ■ Builder ■ Factory Method ■ Prototype ■ Singleton
  • 28. Padrões de Projeto de Software OO 28 / 33 Os 23 Padrões do GoF Estruturais ■ Adapter ■ Bridge ■ Composite ■ Decorator ■ Façade ■ Flyweight ■ Proxy
  • 29. Padrões de Projeto de Software OO 29 / 33 Os 23 Padrões do GoF Comportamentais ■ Chain of Responsibility ■ Command ■ Interpreter ■ Iterator ■ Mediator ■ Memento ■ Observer ■ State ■ Strategy ■ Template Method ■ Visitor
  • 30. Padrões de Projeto de Software OO 30 / 33 Para próxima aula ■ Apresentar qual o tipo de padrão foi selecionado para o projeto do time… dar uma olhada no GoF ◻ a biblioteca possui algumas cópias ■ Adicionar tarefa no card do ~>
  • 31. Padrões de Projeto de Software OO 31 / 33 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. ■ Talvez a última parte não seja sempre desejável.
  • 32. Padrões de Projeto de Software OO 32 / 33 Próximas Aulas ■ Demais padrões do GoF ■ Outros tipos de padrões ◻ arquiteturais ◻ de análise ◻ anti-padrões ◻ etc.
  • 34. Obrigado! Thank you! Dúvidas? class ACESSO AO MATERIAL def new_aula (nova) end