Buscar

Aula 04 padrão de projetos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PADRÕES DE PROJETO DE SOFTWARE
Aula 4 – Padrões estruturais GoF 
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
O que veremos nesta terceira aula
Continuar estudando padrões estruturais;
Conhecer os padrões de estruturais Façade, Proxy e Flyweight;
Aprender as principais aplicações e funcionalidades destes padrões.
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Classificação dos padrões GoF segundo Metsker [2]
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Proxy
"Prover um substituto ou ponto através do qual um objeto possa controlar o acesso a outro." 
[GoF]
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Problema
Sistema quer utilizar objeto real...
Mas ele não está disponível (remoto, inaccessível, ...)
Solução: arranjar um intermediário que saiba se comunicar com ele eficientemente
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Prós e contras
Vantagens
Transparência: mesma sintaxe usada na comunicação entre o cliente e sujeito real é usada no proxy
Permite o tratamento inteligente dos dados no cliente
Permite maior eficiência com caching no cliente
Desvantagens
Possível impacto na performance
Transparência nem sempre é 100% (fatores externos como queda da rede podem tornar o proxy inoperante ou desatualizado)
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 2
import java.util.*;
 public interface Imagem {
 public void mostrarImagem();
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Continuação Exemplo 2 
// no Sistema A
public class ImagemReal implements Imagem {
 private String nomeDoArquivo;
 public ImagemReal(String nomeDoArquivo) {
 this.nomeDoArquivo = nomeDoArquivo;
 carregarImagemDoDisco();
 }
 private void carregarImagemDoDisco() {
 System.out.println("Carregando " + nomeDoArquivo); }
 public void mostrarImagem() {
 System.out.println("Mostrando " + nomeDoArquivo); }
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Continuação Exemplo 2
// no Sistema B
public class ImagemProxy implements Imagem {
 private String nomeDoArquivo;
 private Imagem imagem;
 
 public ImagemProxy(String nomeDoArquivo) {
 this.nomeDoArquivo = nomeDoArquivo;
 }
 public void mostrarImagem() {
 imagem = new ImagemReal(nomeDoArquivo);
 imagem.mostrarImagem();
 }
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Continuação Exemplo 2
public class ExemploProxy {
 public static void main(String[] args) {
 Imagem imagem1 = new ImagemProxy("ResOi_10MB_Foto1");
 Imagem imagem2 = new ImagemProxy("ResOi_10MB_Foto2");
 
 imagem1.mostrarImagem(); // necessário o carregamento
 imagem2.mostrarImagem(); // necessário o carregamento
 }
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Façade
"Oferecer uma interface única para um conjunto de interfaces de um subsistema. Façade define uma interface de nível mais elevado que torna o subsistema mais fácil de usar."
[GoF]
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Quando usar?
Sempre que for desejável criar uma interface para um conjunto de objetos com o objetivo de facilitar o uso da aplicação
Permite que objetos individuais cuidem de uma única tarefa, deixando que a fachada se encarregue de divulgar as suas operações
Façades e Singletons
Fachadas frequentemente são implementadas como singletons
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 2
/* Complex parts */
 public class CPU {
 public void freeze() { ... }
 public void jump(long position) { ... }
 public void execute() { ... }
}
public class Memory {
 public void load(long position, byte[] data) { ... }
}
 public class HardDrive {
 public byte[] read(long lba, int size) { ... }
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 2
/* Facade */
 public class Computer {
 private CPU cpu;
 private Memory memory;
 private HardDrive hardDrive;
 public Computer() {
 this.cpu = new CPU();
 this.memory = new Memory();
 this.hardDrive = new HardDrive(); }
 public void startComputer() {
 cpu.freeze();
 memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));
 cpu.jump(BOOT_ADDRESS);
 cpu.execute(); }
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 2
/* Client */
 
public class You {
 public static void main(String[] args) {
 	Computer facade = new Computer();
 	facade.startComputer();
 }
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Flyweight
"Usar compartilhamento para suportar grandes quantidades de objetos refinados eficientemente." 
[GoF]
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Problema
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Prós e contras
Quando usar Flyweight
Quando o tamanho do conjunto de objetos for significativamente menor que a quantidade de vezes em que eles são usados na aplicação
Quando objetos podem ser usados em diferentes contextos ao mesmo tempo (agindo sempre como um objeto independente)
Quando não usar
Quando o estado dos objetos não for imutável (é preciso passar o estado mutável como parâmetro e isto pode ser impraticável se o estado consistir de vários objetos)
Quando for necessário elaborar um algoritmo ou algo complicado para separar objetos mutáveis de imutáveis
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
//Flyweight
public abstract class Flyweight {
		public abstract void Operation(int extrinsicstate);
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
//ConcreteFlyweight
 public class ConcreteFlyweight extends Flyweight {
		public void Operation(int extrinsicstate) {
			System.out.println("ConcreteFlyweight :" + extrinsicstate );
 }
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
//FlyweightFactory
import java.util.ArrayList;
public class FlyweightFactory {
 ArrayList flyweights = new ArrayList();
 public Flyweight GetFlyweight(int key) {
 if (flyweights.contains(key)){
 return ((Flyweight) flyweights.get(key));
 }else {
 Flyweight fly = new ConcreteFlyweight();
 flyweights.add(key, fly);
 return fly;
 }
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
//UnsharedConcreteFlyweight
public class UnsharedConcreteFlyweight extends Flyweight {
 public void Operation(int extrinsicstate) {
 System.out.println("UnsharedConcreteFlyweight: " + extrinsicstate);
 }
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
public class MainApp {//Main
 public static void main(String[] args) {
 int extrinsicstate = 22; // Estado extrínseco
 FlyweightFactory f = new FlyweightFactory();
 Flyweight fx=f.GetFlyweight(0); //Trabalhando com diferentes intâncias flyweight
 fx.Operation(--extrinsicstate);
 Flyweight fy = f.GetFlyweight(1);
 fy.Operation(--extrinsicstate);
 Flyweight fz = f.GetFlyweight(2);
 fz.Operation(--extrinsicstate);
 Flyweight fw = f.GetFlyweight(3);
 fw.Operation(--extrinsicstate);
 UnsharedConcreteFlyweight uf = new UnsharedConcreteFlyweight();uf.Operation(--extrinsicstate); }
}
PADRÕES ESTRUTURAIS GOF – AULA 4
PADRÕES DE PROJETO DE SOFTWARE
Bibliografia
Utilizando UML e Padrões: uma introdução à análise e ao projeto orientados a objetos - 3ª Edição
Autor: Larman, Craig
Padrões de Projeto: soluções reutilizáveis de software orientado a objetos
Autor: Gamma, Erich ... [et al]
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Outros materiais