SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
“Design Patterns” padrões de projeto 
para software Orientados a Objeto 
Eduardo M. F. Jorge (emjorge1974@gmail.com)
Como tornar projetos mais reutilizáveis, com menos 
acoplamento e com um maior nível de reutilização? 
Tarefa para desenvolvedores experientes
Padrões de Projeto 
} O bom desenvolvimento de um software orientado a 
objeto depende de alguns fatores: 
} Uma boa decomposição do sistema em classes e objetos 
} O conhecimento pelos desenvolvedores dos diversos 
aspectos ligados à orientação a Objeto: 
} Encapsulação 
} Reutilização 
} Flexibilidade 
} Portabilidade 
} Desempenho
Padrões de Projeto 
} Desenvolvedores iniciantes podem utilizar padrões de 
projetos catalogados por “experts” para obter 
conhecimento e experiência na construção de aplicações 
orientadas a objeto. 
} Com a boa utilização de padrões de projeto a 
comunicação entre desenvolvedores, e a manutenção de 
sistemas, tornam-se menos complexas. 
} Padrões de projeto podem ajudar a encontrar abstrações 
que tornem o software mais flexível e reutilizável.
Padrões de Projeto 
} A definição clássica para os Designs Patterns é a seguinte: 
"um Pattern descreve um problema que se repete várias vezes 
em um determinado meio, e em seguida descreve o núcleo da 
sua solução, de modo que esta solução possa ser usada 
milhares e milhares de vezes” [ALE77].
Melhor Leitura do Projeto 
Singleton 
Façade 
Abstract Factory
Padrões de Projeto: Histórico 
} Os Designs Patterns originam-se no final dos anos 80, 
} quando Ward Cunningham e Kent Beck desenvolveram um 
conjunto de padrões para serem aplicados no desenvolvimento de 
interfaces do usuário elegantes em Smalltalk. 
} No mesmo período, Jim Coplien estava desenvolvendo um catálogo 
de padrões C++ chamados idiomas.
Padrões de Projeto: Histórico 
} Erich Gamma estava trabalhando em sua tese de doutorado sobre 
desenvolvimento de software orientado a objeto, e reconheceu a 
importância de acumular explicitamente as estruturas de projetos 
que se repetiam com frequência. 
} Em 1994, quatro autores – Erich Gamma, Richard Helm, Ralph Johnson e John 
Vlissides - publicaram o primeiro catálogo de Design Patterns para programas 
orientado a objetos: Design Patterns – Elements of Reusable Object-Oriented 
software. 
} Esse livro descreve soluções simples para problema específicos no 
projeto de software orientado a objetos.
Padrões de Projeto: Aplicado em Outras Áreas 
} No seu livro - A Pattern Language: Towns, Buildings, 
Construction - mostra como patterns podem ser 
aplicados na construção de casas, assim como no 
planejamento de bairros e cidades.
Motivação 
} Tornar o desenvolvimento de software OO uma tarefa 
menos complexa. 
} Possibilitar que desenvolvedores iniciantes possam fazer 
uso de padrões de projetos catalogados por “experts”. 
} Criar uma padronização para soluções de projeto OO.
Conceito Básico 
} Cada padrão descreve um problema que ocorre inúmeras 
vezes. 
} É descrito a essência da solução para esse problema. 
} Solução pode ser reutilizada sempre que esse problema 
vier a aparecer em qualquer projeto de sistema.
Conceito Básico (continuação....) 
} Descreve uma situação onde várias classes cooperam 
para realizar uma determinada tarefa. 
} É determinado uma organização específica, ou seja, 
micro-arquiteturas de classe e objetos com seus papeis e 
colaborações. 
} Na descrição de um padrão alguns componentes são 
essenciais para o seu entendimento com: nome, problema, 
solução e conseqüências.
Exemplo Editor de Desenho 
Shape 
Limite() 
CriaManipulador() 
EditorDesenho 
LinhaShape 
Limite() 
CriaManipulador() 
PoligonoShape 
Limite() 
CriaManipulador() 
TextView 
GetExtensao() 
Problema
Exemplo Editor de Desenho 
Shape 
Limite() 
CriaManipulador() 
EditorDesenho 
LinhaShape 
Limi te() 
CriaMani pulad or() 
PoligonoShape 
Limite() 
CriaManipulador() 
TextView 
GetExtensao() 
TextShape 
Limite() 
CriaManipulador() 
Text 
return text.getExtent() 
return new TextManipulador 
Solução
Objetivo 
l Converter a interface de classe em outra interface 
esperada pelo cliente. 
l Permite que classes trabalhem juntas mesmo com 
interfaces incompatíveis.
Motivação 
l Fazer uso de reutilização mesmo quando temos 
classes com interfaces diferentes das que são 
necessárias pela aplicação.
Aplicabilidade 
l Quando se quer usar uma classe existente, e sua 
interface não for igual a que você necessita. 
l Quando você não tem o código fonte da classe a ser 
adaptada. 
l Quando a classe é genérica , e assim, não se deve 
altera a classe para uma aplicação específica.
Estrutura Genérica 
Com Herança múltipla 
The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then 
insert it again.
Estrutura Genérica 
Com Composição (JAVA) 
Objetivo (Shape) 
Pedido() 
Cliente (EditorDesenho) 
Adaptador (TextShape) 
Pedido() 
Adaptada ->Pedido 
Especifico() 
Adaptada (TextView) 
PedidoEspecifico() 
Adaptada
Participantes 
l Objetivo (Shape) – Define o domínio específico que 
é usado pelo Cliente. 
l Cliente (EditorDesenho) – Colabora com objetos 
conforme a interface da classe Objetivo. 
l Adaptada (TextView) – Define uma interface 
existente que necessita ser adaptada. 
l Adaptador (TextShape) – Adapta a interface da 
classe Adaptada para interface da classe Objetivo.
Colaborações entre objetos 
l Clientes(Editor Desenho) chamam operações 
de instancias do Adaptador(TextShape). 
l Em troca, o Adaptador (TextShape) chama 
operações da classe Adaptada (TextView). 
l Delegação de funções.
Consequências do uso do padrão ADAPTER 
l O Cliente (EditorDesenho) e a classe Adaptada 
(TextView) permanecem inalteradas. 
l Com a chamada de funcionalidade indiretas o 
programa se torna mais complexo. 
l A Classe Adapter pode determinar que métodos 
devem ser chamados de outro objeto.
Projeto Exemplo 
} O objetivo deste projeto é a construção de um conjunto 
de classes que permitam a criação de Editor de Desenho 
fictício. O EditorDesenho objetiva imprimir o limite X,Y 
de seus possíveis Shapes. O problema aqui estabelecido é 
necessidade de adaptar a classe Textview para funcionar 
neste editor. O padrão a ser utilizado é o Adapter.
Diagrama de Classe
Tratamento de Exceções 
} Uma exceção e uma condição anormal que surge em uma 
sequência de código em tempo de execução. 
} Muitas Linguagens usam código de retorno das funções 
chamadas para sinalizar erros. 
} Procedimento sujeito a problemas. 
} Complexidade no encadeamento do código. 
} Falta de detalhes sobre o erro.
Tratamento de Exceções 
} Hierarquia de Classes
Especificando métodos que lançam 
exceções 
} Quando não for adequado capturar uma exceção pode-se lança-lá para cima. 
O método que fizer chamada a um método que lança uma exceção e obrigado a: 
Capturar / Lançar / Capturar e Lançar. 
} public void adicionaContato(IF_Contato c) throws Exception{ 
} If(!this.mConato.containsKey(c.getTelefone()){ 
} This.mContato.put(c.getTelefone(),c) 
} else{ 
} Exception e = new Exception(“Contato já existe!); 
} throw e; 
} }} 
} public void cadastraContato(String nome, String telefone) throws Exception{ 
} IF_Contato c = new Contato(); 
} c.setNome(nome); c.setTelefone(telefone); 
} Agenda.getInstancia().adicionaContato(c); 
} } 
}
Especificando métodos que lançam 
exceções 
} 
Quando não for adequado capturar uma exceção pode-se lança-lá para cima. 
O método que fizer chamada a um método que lança uma exceção e obrigado a: 
Capturar / Lançar / Capturar e Lançar. 
} 
//Lançar 
public InputFileDeclared(String filename) throws FileNotFoundException { 
in = new FileInputStream(filename); 
} 
} //Capturar e Lançar. 
public void InputFileDeclared_v1(String filename) throws FileNotFoundException { 
try{ 
in = new FileInputStream(filename); 
}catch(FileNotFoundException e){ 
System.out.println("Erro gerado no método"+ e); 
throw e; 
} 
}
Tratamento de Exceções 
} Em Java o tratamento de exceções é gerenciado por meio 
das palavaras-chave: 
try{ 
// Bloco de Código 
}catch (ExcecaoTipo e){ 
//Bloco de Código 
throw(e); 
}
Fluxo Exceção
Finaly 
} finaly - Quando for necessário ter certeza que um determinado código 
será executado independente das exceções que são cousadas ou 
capturadas. 
try { 
. . . 
out.close(); // Não existe a garantia que esse código será 
executado se houver algum problema. 
} catch (ArrayIndexOutOfBoundsException e) { 
out.close(); // Não existe a garantia que esse código será 
executado se houver algum problema. 
System.err.println("Caught ArrayIndexOutOfBoundsException: " + e.getMessage()); 
} catch (IOException e) { 
System.err.println("Caught IOException: " + e.getMessage()); 
} 
finally { 
if (out != null) { 
System.out.println("Closing PrintWriter"); 
out.close(); 
} else { 
System.out.println("PrintWriter not open"); 
} 
}
Objetivo 
} “Template Method” define o esqueleto de um algoritmo 
para uma operação, transferindo alguns passos desta 
operação para as subclasses. 
} Este padrão permite que uma subclasse redefina certos 
passos de um algoritmo, sem alterar a estrutura do 
mesmo.
Objetivo (fonte Jacques ) 
} Define o esqueleto de um algoritmo numa operação, 
deixando que subclasses completem algumas das etapas. 
} O padrão Template Method permite que subclasses 
redefinem determinadas etapas de um algoritmo sem 
alterar a estrutura do algoritmo. 
} Resumo 
} Um Template Method define um algoritmo usando operações 
abstratas 
} Subclasses fazem override das operações para prover um 
comportamento concreto 
} Este padrão é a base para a construção de frameworks
Quando usar o padrão Template 
Method? (fonte Jacques ) 
} Para implementar partes invariantes de um algoritmo uma única vez e 
deixar subclasses implementarem o comportamento variável 
} Quando comportamento comum entre subclasses deveria ser refatorado e 
localizado numa classe comum para evitar duplicação 
} É um passo frequente de "refactoring" de código 
} Primeiro identifique as diferenças 
} Coloque as diferenças em novos métodos 
} Substitua o código das diferenças por uma chamada a um dos novos 
métodos 
} Para controlar extensões de subclasses 
} Você pode definir um Template Method que chame operações-gancho 
(hook) e pontos específicos, permitindo extensões apenas nestes pontos 
} Faça com que apenas os métodos-gancho possam sofrer override
Estrutura Genérica 
TemplateAbstrato 
templateMethod() 
#operacao1() 
#operacao2() 
TemplateConc reto 
#operacao1() 
#operacao2()
Exemplo Prático 
Logi n 
logon() 
autentica(usuarioID : String, senha : String) : Object 
notif icaAutenticacao(objAutenticacao : Object) 
LoginAplicacao 
autentica(usuarioID : String, senha : String) : Object 
notif icaAutenticacao(objAutenticacao : Object) 
- Obtém Dados 
if (autentica(...)) 
notificaAutenticacao(..)
Participantes 
} TemplateAbstrata (Login) 
} Define operações abstratas que subclasses concretas definem 
para implementar certas etapas do algoritmo 
} Implementa um Template Method (logon()) definindo o 
esqueleto de um algoritmo 
} O Template Method chama várias operações, entre as quais as 
operações abstratas da classe 
} TemplateConcreta (LoginAplicação) 
} Implementa as operações abstratas para desempenhar as 
etapas do algoritmo que tenham comportamento específico a 
esta subclasse
Problema 
Método Gabarito
} Mensagem 
} public String envia(Destinatario destinatario)throws Exception{ 
} this.verifica(); 
} return "Mensagem para "+destinatario.getNomeCompleto()+" 
"+this.getTxtMensagem(); 
} 
} }
Email 
} public void verifica()throws Exception{ 
} if (this.getAssunto().isEmpty()){ 
} throw new Exception("Assunto não está preenchido!"); 
} } 
} } 
} public String getTxtMensagem(){ 
} return "EMAIL;"+super.getDataHora()+";"+super.getEmail()+";"+this.getAssunto() 
+";"+super.getConteudo(); 
} }
SMS 
} public void verifica()throws Exception{ 
} if(!(this.conteudo.length()<=20)){ 
} throw new Exception("Conteúdo maior do que vinte caracteres!"); 
} } 
} } 
} public String getTxtMensagem(){ 
} return "SMS;"+this.getTelefone()+";"+super.getConteudo()+";"+super.getDataHora(); 
} 
} }
main 
} Destinatario[] d = new Destinatario[2]; 
} 
} d[0]= new Destinatario(); d[0].setNome("emjorge"); d[0].setNomeCompleto("Eduardo M. F. jorge"); 
} 
} d[1]= new Destinatario(); d[1].setNome("camila"); d[1].setNomeCompleto("Camila S. P. Jorge"); 
} 
} Mensagem email = new Email("emjorge@gamil.com","Prova Tópicos II","03/10/2005","Aviso"); 
} Mensagem email1 = new Email("emjorge@gmail.com","Prova Tópicos II","03/10/2005",""); 
} Mensagem sms = new Sms("camila@gmail.com","A Prova de Tópicos II será na sala 
36","03/10/2005","9129-2234"); 
} Mensagem sms1 = new Sms("camila@gmail.com","Prova Tópicos II","03/10/2005","9129-2234"); 
} 
}
main 
} try{ 
} System.out.println(email.envia(d[0])); 
} }catch(Exception e){ System.out.println(e.getMessage()); } 
} try{ 
} System.out.println(email1.envia(d[1])); 
} }catch(Exception e){ System.out.println(e.getMessage()); } 
} try{ 
} System.out.println(sms.envia(d[0])); 
} }catch(Exception e){ System.out.println(e.getMessage()); } 
} try{ 
} System.out.println(sms1.envia(d[1])); 
} }catch(Exception e){ System.out.println(e.getMessage()); }
Objetivo 
} Possibilitar que objetos registrados em um serviço sejam 
notificados da mudança de estado ou de outros eventos 
que ocorram no objeto que gerencia o serviço. 
} "Definir uma dependência um-para-muitos entre objetos 
para que quando um objeto mudar de estado, todos os 
seus dependentes sejam notificados e atualizados 
automaticamente." [GoF]
Quando usar o padrão Observer? 
(fonte Jacques ) 
} Quando uma abstração tem dois aspectos, um 
dependente do outro. Encapsular este aspectos em 
objetos separados permite que variem e sejam reusados 
separadamente. 
} Quando uma mudança a um objeto requer mudanças a 
outros e você não sabe quantos outros objetos devem 
mudar. 
} Quando um objeto deve ser capaz de avisar outros sem 
fazer suposições sobre quem são os objetos. Em outras 
palavras, sem criar um acoplamento forte entre os 
objetos.
Estrutura Genérica 
Fonte http://www.deinf.ufma.br/~vidal/Topicos/observer.pdf
Participantes 
} Participantes 
} Subject – Classe abstrata que contempla a 
funcionalidade de registrar e notificar os Objetos 
(Observer) 
} Observer – Interface implementada por Objetos a 
serem notificados 
} ConcreteSubject - possui estados de interesse dos 
objetos notificados. Responsável pela notificação dos 
Objetos quando o estado muda. 
} ConcreteObserver - Implementa a interface Observer. 
Armazena o estado que deve estar consistente com base 
no ConcreteSubject
Conseqüências 
} permite reusar Subjects sem reusar seus Observers 
e vice-versa; 
} suporte para comunicação em broadcast (a notificação é 
enviada pelo Subject automaticamente para todos os 
Observers subscritos); 
} atualizações inesperadas (cuidar dos critérios de 
dependência). 
} o custo de uma mudança ao estado de um Subject pode 
ser grande se houver muitos Observers 
Adaptado de Fonte 
http://www.deinf.ufma.br/~vidal/Topicos/observer.pdf e Jacques
Problema
Solução Observer

Mais conteúdo relacionado

Mais procurados

4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...Manuel Menezes de Sequeira
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Marcos Castro
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...Manuel Menezes de Sequeira
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...Manuel Menezes de Sequeira
 
Curso de Java (Parte 3)
 Curso de Java (Parte 3) Curso de Java (Parte 3)
Curso de Java (Parte 3)Mario Sergio
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologiaselliando dias
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)Mario Sergio
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoJose Augusto Cintra
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java BasicoJoel Lobo
 

Mais procurados (20)

4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Series lab
Series labSeries lab
Series lab
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
Aula5 linguagem uml-introducao
Aula5 linguagem uml-introducaoAula5 linguagem uml-introducao
Aula5 linguagem uml-introducao
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Curso de Java (Parte 3)
 Curso de Java (Parte 3) Curso de Java (Parte 3)
Curso de Java (Parte 3)
 
Java1
Java1Java1
Java1
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de Programação
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 

Semelhante a Intro padroesprojetoadaptertemplateobserver

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
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Classes csharp
Classes csharpClasses csharp
Classes csharpTiago
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
Pattners Everywhere, Even in Javascript
Pattners Everywhere, Even in JavascriptPattners Everywhere, Even in Javascript
Pattners Everywhere, Even in JavascriptGustavo Corrêa Alves
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: AdapterMessias Batista
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introduçãoelliando dias
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 

Semelhante a Intro padroesprojetoadaptertemplateobserver (20)

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
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
Aula1
Aula1Aula1
Aula1
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Pattners Everywhere, Even in Javascript
Pattners Everywhere, Even in JavascriptPattners Everywhere, Even in Javascript
Pattners Everywhere, Even in Javascript
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Working with legacy code 3
Working with legacy code 3Working with legacy code 3
Working with legacy code 3
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: Adapter
 
Introducao ao .Net
Introducao ao .NetIntroducao ao .Net
Introducao ao .Net
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introdução
 
Apostila de-vb-net
Apostila de-vb-netApostila de-vb-net
Apostila de-vb-net
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 

Último

Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfmaurocesarpaesalmeid
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfHELENO FAVACHO
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfHELENO FAVACHO
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfRavenaSales1
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
atividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfatividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfLuizaAbaAba
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfHELENO FAVACHO
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecniCleidianeCarvalhoPer
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfEmanuel Pio
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTailsonSantos1
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxedelon1
 

Último (20)

Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
atividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfatividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdf
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdf
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 

Intro padroesprojetoadaptertemplateobserver

  • 1. “Design Patterns” padrões de projeto para software Orientados a Objeto Eduardo M. F. Jorge (emjorge1974@gmail.com)
  • 2. Como tornar projetos mais reutilizáveis, com menos acoplamento e com um maior nível de reutilização? Tarefa para desenvolvedores experientes
  • 3. Padrões de Projeto } O bom desenvolvimento de um software orientado a objeto depende de alguns fatores: } Uma boa decomposição do sistema em classes e objetos } O conhecimento pelos desenvolvedores dos diversos aspectos ligados à orientação a Objeto: } Encapsulação } Reutilização } Flexibilidade } Portabilidade } Desempenho
  • 4. Padrões de Projeto } Desenvolvedores iniciantes podem utilizar padrões de projetos catalogados por “experts” para obter conhecimento e experiência na construção de aplicações orientadas a objeto. } Com a boa utilização de padrões de projeto a comunicação entre desenvolvedores, e a manutenção de sistemas, tornam-se menos complexas. } Padrões de projeto podem ajudar a encontrar abstrações que tornem o software mais flexível e reutilizável.
  • 5. Padrões de Projeto } A definição clássica para os Designs Patterns é a seguinte: "um Pattern descreve um problema que se repete várias vezes em um determinado meio, e em seguida descreve o núcleo da sua solução, de modo que esta solução possa ser usada milhares e milhares de vezes” [ALE77].
  • 6. Melhor Leitura do Projeto Singleton Façade Abstract Factory
  • 7. Padrões de Projeto: Histórico } Os Designs Patterns originam-se no final dos anos 80, } quando Ward Cunningham e Kent Beck desenvolveram um conjunto de padrões para serem aplicados no desenvolvimento de interfaces do usuário elegantes em Smalltalk. } No mesmo período, Jim Coplien estava desenvolvendo um catálogo de padrões C++ chamados idiomas.
  • 8. Padrões de Projeto: Histórico } Erich Gamma estava trabalhando em sua tese de doutorado sobre desenvolvimento de software orientado a objeto, e reconheceu a importância de acumular explicitamente as estruturas de projetos que se repetiam com frequência. } Em 1994, quatro autores – Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides - publicaram o primeiro catálogo de Design Patterns para programas orientado a objetos: Design Patterns – Elements of Reusable Object-Oriented software. } Esse livro descreve soluções simples para problema específicos no projeto de software orientado a objetos.
  • 9. Padrões de Projeto: Aplicado em Outras Áreas } No seu livro - A Pattern Language: Towns, Buildings, Construction - mostra como patterns podem ser aplicados na construção de casas, assim como no planejamento de bairros e cidades.
  • 10. Motivação } Tornar o desenvolvimento de software OO uma tarefa menos complexa. } Possibilitar que desenvolvedores iniciantes possam fazer uso de padrões de projetos catalogados por “experts”. } Criar uma padronização para soluções de projeto OO.
  • 11. Conceito Básico } Cada padrão descreve um problema que ocorre inúmeras vezes. } É descrito a essência da solução para esse problema. } Solução pode ser reutilizada sempre que esse problema vier a aparecer em qualquer projeto de sistema.
  • 12. Conceito Básico (continuação....) } Descreve uma situação onde várias classes cooperam para realizar uma determinada tarefa. } É determinado uma organização específica, ou seja, micro-arquiteturas de classe e objetos com seus papeis e colaborações. } Na descrição de um padrão alguns componentes são essenciais para o seu entendimento com: nome, problema, solução e conseqüências.
  • 13. Exemplo Editor de Desenho Shape Limite() CriaManipulador() EditorDesenho LinhaShape Limite() CriaManipulador() PoligonoShape Limite() CriaManipulador() TextView GetExtensao() Problema
  • 14. Exemplo Editor de Desenho Shape Limite() CriaManipulador() EditorDesenho LinhaShape Limi te() CriaMani pulad or() PoligonoShape Limite() CriaManipulador() TextView GetExtensao() TextShape Limite() CriaManipulador() Text return text.getExtent() return new TextManipulador Solução
  • 15. Objetivo l Converter a interface de classe em outra interface esperada pelo cliente. l Permite que classes trabalhem juntas mesmo com interfaces incompatíveis.
  • 16. Motivação l Fazer uso de reutilização mesmo quando temos classes com interfaces diferentes das que são necessárias pela aplicação.
  • 17. Aplicabilidade l Quando se quer usar uma classe existente, e sua interface não for igual a que você necessita. l Quando você não tem o código fonte da classe a ser adaptada. l Quando a classe é genérica , e assim, não se deve altera a classe para uma aplicação específica.
  • 18. Estrutura Genérica Com Herança múltipla The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again.
  • 19. Estrutura Genérica Com Composição (JAVA) Objetivo (Shape) Pedido() Cliente (EditorDesenho) Adaptador (TextShape) Pedido() Adaptada ->Pedido Especifico() Adaptada (TextView) PedidoEspecifico() Adaptada
  • 20. Participantes l Objetivo (Shape) – Define o domínio específico que é usado pelo Cliente. l Cliente (EditorDesenho) – Colabora com objetos conforme a interface da classe Objetivo. l Adaptada (TextView) – Define uma interface existente que necessita ser adaptada. l Adaptador (TextShape) – Adapta a interface da classe Adaptada para interface da classe Objetivo.
  • 21. Colaborações entre objetos l Clientes(Editor Desenho) chamam operações de instancias do Adaptador(TextShape). l Em troca, o Adaptador (TextShape) chama operações da classe Adaptada (TextView). l Delegação de funções.
  • 22. Consequências do uso do padrão ADAPTER l O Cliente (EditorDesenho) e a classe Adaptada (TextView) permanecem inalteradas. l Com a chamada de funcionalidade indiretas o programa se torna mais complexo. l A Classe Adapter pode determinar que métodos devem ser chamados de outro objeto.
  • 23. Projeto Exemplo } O objetivo deste projeto é a construção de um conjunto de classes que permitam a criação de Editor de Desenho fictício. O EditorDesenho objetiva imprimir o limite X,Y de seus possíveis Shapes. O problema aqui estabelecido é necessidade de adaptar a classe Textview para funcionar neste editor. O padrão a ser utilizado é o Adapter.
  • 25. Tratamento de Exceções } Uma exceção e uma condição anormal que surge em uma sequência de código em tempo de execução. } Muitas Linguagens usam código de retorno das funções chamadas para sinalizar erros. } Procedimento sujeito a problemas. } Complexidade no encadeamento do código. } Falta de detalhes sobre o erro.
  • 26. Tratamento de Exceções } Hierarquia de Classes
  • 27. Especificando métodos que lançam exceções } Quando não for adequado capturar uma exceção pode-se lança-lá para cima. O método que fizer chamada a um método que lança uma exceção e obrigado a: Capturar / Lançar / Capturar e Lançar. } public void adicionaContato(IF_Contato c) throws Exception{ } If(!this.mConato.containsKey(c.getTelefone()){ } This.mContato.put(c.getTelefone(),c) } else{ } Exception e = new Exception(“Contato já existe!); } throw e; } }} } public void cadastraContato(String nome, String telefone) throws Exception{ } IF_Contato c = new Contato(); } c.setNome(nome); c.setTelefone(telefone); } Agenda.getInstancia().adicionaContato(c); } } }
  • 28. Especificando métodos que lançam exceções } Quando não for adequado capturar uma exceção pode-se lança-lá para cima. O método que fizer chamada a um método que lança uma exceção e obrigado a: Capturar / Lançar / Capturar e Lançar. } //Lançar public InputFileDeclared(String filename) throws FileNotFoundException { in = new FileInputStream(filename); } } //Capturar e Lançar. public void InputFileDeclared_v1(String filename) throws FileNotFoundException { try{ in = new FileInputStream(filename); }catch(FileNotFoundException e){ System.out.println("Erro gerado no método"+ e); throw e; } }
  • 29. Tratamento de Exceções } Em Java o tratamento de exceções é gerenciado por meio das palavaras-chave: try{ // Bloco de Código }catch (ExcecaoTipo e){ //Bloco de Código throw(e); }
  • 31.
  • 32. Finaly } finaly - Quando for necessário ter certeza que um determinado código será executado independente das exceções que são cousadas ou capturadas. try { . . . out.close(); // Não existe a garantia que esse código será executado se houver algum problema. } catch (ArrayIndexOutOfBoundsException e) { out.close(); // Não existe a garantia que esse código será executado se houver algum problema. System.err.println("Caught ArrayIndexOutOfBoundsException: " + e.getMessage()); } catch (IOException e) { System.err.println("Caught IOException: " + e.getMessage()); } finally { if (out != null) { System.out.println("Closing PrintWriter"); out.close(); } else { System.out.println("PrintWriter not open"); } }
  • 33. Objetivo } “Template Method” define o esqueleto de um algoritmo para uma operação, transferindo alguns passos desta operação para as subclasses. } Este padrão permite que uma subclasse redefina certos passos de um algoritmo, sem alterar a estrutura do mesmo.
  • 34. Objetivo (fonte Jacques ) } Define o esqueleto de um algoritmo numa operação, deixando que subclasses completem algumas das etapas. } O padrão Template Method permite que subclasses redefinem determinadas etapas de um algoritmo sem alterar a estrutura do algoritmo. } Resumo } Um Template Method define um algoritmo usando operações abstratas } Subclasses fazem override das operações para prover um comportamento concreto } Este padrão é a base para a construção de frameworks
  • 35. Quando usar o padrão Template Method? (fonte Jacques ) } Para implementar partes invariantes de um algoritmo uma única vez e deixar subclasses implementarem o comportamento variável } Quando comportamento comum entre subclasses deveria ser refatorado e localizado numa classe comum para evitar duplicação } É um passo frequente de "refactoring" de código } Primeiro identifique as diferenças } Coloque as diferenças em novos métodos } Substitua o código das diferenças por uma chamada a um dos novos métodos } Para controlar extensões de subclasses } Você pode definir um Template Method que chame operações-gancho (hook) e pontos específicos, permitindo extensões apenas nestes pontos } Faça com que apenas os métodos-gancho possam sofrer override
  • 36. Estrutura Genérica TemplateAbstrato templateMethod() #operacao1() #operacao2() TemplateConc reto #operacao1() #operacao2()
  • 37. Exemplo Prático Logi n logon() autentica(usuarioID : String, senha : String) : Object notif icaAutenticacao(objAutenticacao : Object) LoginAplicacao autentica(usuarioID : String, senha : String) : Object notif icaAutenticacao(objAutenticacao : Object) - Obtém Dados if (autentica(...)) notificaAutenticacao(..)
  • 38. Participantes } TemplateAbstrata (Login) } Define operações abstratas que subclasses concretas definem para implementar certas etapas do algoritmo } Implementa um Template Method (logon()) definindo o esqueleto de um algoritmo } O Template Method chama várias operações, entre as quais as operações abstratas da classe } TemplateConcreta (LoginAplicação) } Implementa as operações abstratas para desempenhar as etapas do algoritmo que tenham comportamento específico a esta subclasse
  • 40. } Mensagem } public String envia(Destinatario destinatario)throws Exception{ } this.verifica(); } return "Mensagem para "+destinatario.getNomeCompleto()+" "+this.getTxtMensagem(); } } }
  • 41. Email } public void verifica()throws Exception{ } if (this.getAssunto().isEmpty()){ } throw new Exception("Assunto não está preenchido!"); } } } } } public String getTxtMensagem(){ } return "EMAIL;"+super.getDataHora()+";"+super.getEmail()+";"+this.getAssunto() +";"+super.getConteudo(); } }
  • 42. SMS } public void verifica()throws Exception{ } if(!(this.conteudo.length()<=20)){ } throw new Exception("Conteúdo maior do que vinte caracteres!"); } } } } } public String getTxtMensagem(){ } return "SMS;"+this.getTelefone()+";"+super.getConteudo()+";"+super.getDataHora(); } } }
  • 43. main } Destinatario[] d = new Destinatario[2]; } } d[0]= new Destinatario(); d[0].setNome("emjorge"); d[0].setNomeCompleto("Eduardo M. F. jorge"); } } d[1]= new Destinatario(); d[1].setNome("camila"); d[1].setNomeCompleto("Camila S. P. Jorge"); } } Mensagem email = new Email("emjorge@gamil.com","Prova Tópicos II","03/10/2005","Aviso"); } Mensagem email1 = new Email("emjorge@gmail.com","Prova Tópicos II","03/10/2005",""); } Mensagem sms = new Sms("camila@gmail.com","A Prova de Tópicos II será na sala 36","03/10/2005","9129-2234"); } Mensagem sms1 = new Sms("camila@gmail.com","Prova Tópicos II","03/10/2005","9129-2234"); } }
  • 44. main } try{ } System.out.println(email.envia(d[0])); } }catch(Exception e){ System.out.println(e.getMessage()); } } try{ } System.out.println(email1.envia(d[1])); } }catch(Exception e){ System.out.println(e.getMessage()); } } try{ } System.out.println(sms.envia(d[0])); } }catch(Exception e){ System.out.println(e.getMessage()); } } try{ } System.out.println(sms1.envia(d[1])); } }catch(Exception e){ System.out.println(e.getMessage()); }
  • 45. Objetivo } Possibilitar que objetos registrados em um serviço sejam notificados da mudança de estado ou de outros eventos que ocorram no objeto que gerencia o serviço. } "Definir uma dependência um-para-muitos entre objetos para que quando um objeto mudar de estado, todos os seus dependentes sejam notificados e atualizados automaticamente." [GoF]
  • 46. Quando usar o padrão Observer? (fonte Jacques ) } Quando uma abstração tem dois aspectos, um dependente do outro. Encapsular este aspectos em objetos separados permite que variem e sejam reusados separadamente. } Quando uma mudança a um objeto requer mudanças a outros e você não sabe quantos outros objetos devem mudar. } Quando um objeto deve ser capaz de avisar outros sem fazer suposições sobre quem são os objetos. Em outras palavras, sem criar um acoplamento forte entre os objetos.
  • 47. Estrutura Genérica Fonte http://www.deinf.ufma.br/~vidal/Topicos/observer.pdf
  • 48. Participantes } Participantes } Subject – Classe abstrata que contempla a funcionalidade de registrar e notificar os Objetos (Observer) } Observer – Interface implementada por Objetos a serem notificados } ConcreteSubject - possui estados de interesse dos objetos notificados. Responsável pela notificação dos Objetos quando o estado muda. } ConcreteObserver - Implementa a interface Observer. Armazena o estado que deve estar consistente com base no ConcreteSubject
  • 49. Conseqüências } permite reusar Subjects sem reusar seus Observers e vice-versa; } suporte para comunicação em broadcast (a notificação é enviada pelo Subject automaticamente para todos os Observers subscritos); } atualizações inesperadas (cuidar dos critérios de dependência). } o custo de uma mudança ao estado de um Subject pode ser grande se houver muitos Observers Adaptado de Fonte http://www.deinf.ufma.br/~vidal/Topicos/observer.pdf e Jacques