Buscar

Padrões Estruturais GoF - Aula 5

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 32 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 32 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 32 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 5 – Padrões estruturais GoF 
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
O que veremos nesta terceira aula
▪ Iniciar o estudo da família de padrões 
comportamentais GoF;
▪ Conhecer os padrões comportamentais 
Chain of Responsability, Interpreter e 
Template Method;
▪ Aprender as principais aplicações e 
funcionalidades destes padrões;
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Classificação dos padrões GoF segundo Metsker [2]
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Interpreter
"Dada uma linguagem, definir uma representação para sua gramática junto
com um interpretador que usa a representação para interpretar sentenças
na linguagem.“
[GoF]
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Interpreter
• Descreve como projetar um conjunto de classes para representar e
interpretar uma gramática para linguagens simples
• Sua aplicação é recomenda naquelas situações em que há necessidade de
interpretar uma linguagem qualquer e ao mesmo tempo quando se quer
representar sentenças da linguagem como árvores abstratas sintáticas
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo padrão Interpreter
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo padrão Interpreter
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo padrão Interpreter
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo padrão Interpreter
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo padrão Interpreter
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo padrão Interpreter
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo padrão Interpreter
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Template Method
"Definir o esqueleto de um algoritmo dentro de uma operação, deixando
alguns passos a serem preenchidos pelas subclasses. Template Method
permite que suas subclasses redefinam certos passos de um algoritmo sem
mudar sua estrutura."
[GoF]
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Template Method
• Fornece uma estrutura fixa, de um algoritmo, esta parte fixa deve estar
presente na superclasse, sendo obrigatório uma classeAbstrata que possa
conter um método concreto, pois em uma interface só é possível conter
métodos abstratos que definem um comportamento, esta é a vantagem de
ser uma Classe Abstrata porque também irá fornecer métodos abstratos às
suas subclasses, que por sua vez herdam este método, por Herança
(programação), e devem implementar os métodos abstratos fornecendo um
comportamento concreto aos métodos que foram definidos como abstratos.
Com isso certas partes, do algoritmo, serão preenchidos por
implementações que irão variar, ou seja, implementar um algoritmo em um
método, postergando a definição de alguns passos do algoritmo, para que
outras classes possam redefiní-los
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Problema
• O que é um Template Method
• Um Template Method define um algoritmo em termos de operações
abstratas que subclasses sobrepõem para oferecer comportamento
concreto
• Quando usar?
• Quando a estrutura fixa de um algoritmo puder ser definida pela
superclasse deixando certas partes para serem preenchidos por
implementações que podem variar
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Estrutura 
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
public abstract class AbstractClass {
public final void templateMethod() {
System.out.println("AbstractClass.templateMethod() called");
primitiveOperation1();
primitiveOperation2();
}
public abstract void primitiveOperation1();
public abstract void primitiveOperation2();
}
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
public class Concrete1 extends AbstractClass {
public void primitiveOperation1() {
System.out.println("Concrete1.primitiveOperation1() called");
}
public void primitiveOperation2() {
System.out.println("Concrete1.primitiveOperation2() called");
}
}
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
public class Concrete2 extends AbstractClass {
public void primitiveOperation1() {
System.out.println("Concrete2.primitiveOperation1() called");
}
public void primitiveOperation2() {
System.out.println("Concrete2.primitiveOperation2() called");
}
}
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
public class TestTemplateMethod {
public static void main(String[] args) {
System.out.println("Test TemplateMethod");
System.out.println("-------------------------");
AbstractClass class1 = new Concrete1();
AbstractClass class2 = new Concrete2();
class1.templateMethod();
class2.templateMethod();
}
}
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Chain of Responsability
"Evita acoplar o remetente de uma requisição ao seu destinatário ao dar a
mais de um objeto a chance de servir a requisição. Compõe os objetos em
cascata e passa a requisição pela corrente até que um objeto a sirva."
[GoF]
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Chain of Responsability
• representa um encadeamento de objetos receptores para o processamento de uma
série de solicitações diferentes. Esses objetos receptores passam a solicitação ao
longo da cadeia até que um ou vários objetos a tratem.
• Cada objeto receptor possui uma lógica descrevendo os tipos de solicitação que é
capaz de processar e como passar adiante aquelas que requeiram processamento
por outros receptores.
• fornece um acoplamento mais fraco por evitar a associação explícita do remetente
de uma solicitação ao seu receptor e dar a mais de um objeto a oportunidade de
tratar a solicitação.
• exemplo da aplicação é o mecanismo de herança nas linguagens orientadas a
objeto: um método chamado em um objeto é buscado na classe que implementa o
objeto e, se não encontrado, na superclasse dessa classe, de maneira recursiva.
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Quando utilizar
• mais de um objeto pode tratar uma solicitação e o objeto que a tratará
não é conhecido a priori;
• o objeto que trata a solicitação deve ser escolhido automaticamente;
• deve-se emitir uma solicitação para um dentre vários objetos, sem
especificar explicitamente o receptor;
• o conjunto de objetos que pode tratar uma solicitação deveria ser
especificado dinamicamente.
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Problema
• Permitir que vários objetos possam servir a uma requisição ou repassá-la
• Permitir divisão de responsabilidades de forma transparente
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 2
public abstract class Logger {
public static int ERR = 3; public static int NOTICE = 5;
public static int DEBUG = 7; protected int mask;
// The next element in the chain of responsibility
protected Logger next;
public Logger setNext(Logger log) { next = log; return log; }
public void message(String msg, int priority) {
if (priority <= mask) {
writeMessage(msg); }if (next != null) { next.message(msg, priority); }
}
protected abstract void writeMessage(String msg);
}
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 2
class StdoutLogger extends Logger {
public StdoutLogger(int mask) { this.mask = mask; }
protected void writeMessage(String msg) {
System.out.println("Writing to stdout: " + msg);
} }
class EmailLogger extends Logger {
public EmailLogger(int mask) { this.mask = mask; }
protected void writeMessage(String msg) {
System.out.println("Sending via email: " + msg);
} }
class StderrLogger extends Logger {
public StderrLogger(int mask) { this.mask = mask; }
protected void writeMessage(String msg) {
System.err.println("Sending to stderr: " + msg);
} }
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 2
public class ChainOfResponsibilityExample {
public static void main(String[] args) {
// Build the chain of responsibility
Logger logger, logger1;
logger1 = logger = new StdoutLogger(Logger.DEBUG);
logger1 = logger1.setNext(new EmailLogger(Logger.NOTICE));
logger1 = logger1.setNext(new StderrLogger(Logger.ERR));
// Handled by StdoutLogger
logger.message("Entering function y.", Logger.DEBUG);
// Handled by StdoutLogger and EmailLogger
logger.message("Step1 completed.", Logger.NOTICE);
// Handled by all three loggers
logger.message("An error has occurred.", Logger.ERR);
}
}
PADRÕES ESTRUTURAIS GOF – AULA 5
PADRÕES DE PROJETO DE SOFTWARE
Estratégias de chain of responsibility
• Pode-se implementar um padrão de várias formas diferentes. Cada forma
é chamada de estratégia
• Chain of Responsibility pode ser implementada com estratégias que
permitem maior ou menor acoplamento entre os participantes
• Usando um mediador: só o mediador sabe quem é o próximo participante
da cadeia
• Usando delegação: cada participante conhece o seu sucessor
PADRÕES ESTRUTURAIS GOF – AULA 5
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]

Continue navegando