Chain of Responsibility

Slides:



Advertisements
Apresentações semelhantes
JAVA Orientação a Objetos
Advertisements

I/O Carlos Bazilio Depto de Ciência e Tecnologia
Soluções Iterativas com Laços
Programação Orientada a Objetos*
PADRÃO CHAIN OF RESPONSIBILITY
Programação em Java Prof. Maurício Braga
Sistemas distribuídos
Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Modificadores Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008.
Entrada e Saída Marco Antonio Arquiteto de Software Dezembro/2007.
Tratamento de Exceções
Projeto de Sistemas de Software
Projeto de Sistemas de Software
Projeto de Sistemas de Software
Padrão de Projeto Interpreter
Projeto de Sistemas de Software Trabalho de Padrões de Projeto
Elizabeth Suescún Monsalve
Chain of Responsibility
Juliana França Santos Aquino
Orientação a Objetos: Modificador Final para Métodos e Classes
Herança, sobrecarga e ligação dinâmica zHerança zReferência super zSobrecarga de métodos zSobreposição zLigação dinâmica de métodos zfinal.
Streams Java.
Chain of Responsibility
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
Exemplos de Refactoring Alguns exemplos e considerações sobre Refactoring.
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
CRIANDO OBJETOS EM JAVA
JAVA Orientação a Objetos
Chain of Responsibility
Interfaces.
Streams –input e output
Linguagem técnica de programação I Java
Chamada Remota de Procedimentos
1 Mobilidade de Código com μcode Projeto Giga Alexandre Lages
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Orientação a Objetos e Java Graduação em Ciência da Computação
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Tipos Especiais de Listas
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 12 – Overloading X Overriding Prof.a.
Programação Orientada a Objetos: Reuso
Pilhas Profa. Nádia Félix.
POO - I Prof.: Jean Carlo Mendes
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Linguagem II Exceções.
Listas Simplesmente Encadeadas
Tipos Especiais de Listas
Wagner Santos C. de Jesus
Tratamento de Exceções
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Polimorfismo.
1 Padrões de Software Padrões GoF (Parte 2) Eduardo Bezerra Outubro/2005.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Estrutura de Controle em JAVA
Classes Abstratas e Interface
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Exceções Profa. Patrícia A. Jaques Alterada por Leandro Tonietto abr-15.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Herança e Arquitetura em camadas
Aula Prática 5 05/05/2010. //Estrutura do método public int subtrair (int a, int b){ //Calcule a operação desejada. int resultado = a – b; //Retorne o.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Redes de Computadores I Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Socket em Java.
Associação. 2 Desafio – Aula class Aluno { 2. private String nome; 3. private float nota; 4. public Aluno(String nome, float nota){ 5. this.nome.
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Transcrição da apresentação:

Chain of Responsibility Eduardo Motta ed@eduardomotta.com

Propósito do Padrão Evitar o acoplamento entre o remetente de uma requisição aos seus receptores, dando a chance de mais de um objeto tratar a requisição Encadear os objetos receptores e passar a requisição ao longo da cadeia até que um objeto a trate

Motivação (1) Sistema de auxílio sensível ao contexto O objeto que fornece a informação de auxílio não é conhecido pelo que recebe a requisição (por exemplo, um botão) Uma cadeia de responsabilidade pode desacoplar os requisitantes dos receptores. A requisição passa através da cadeia até que um objeto a trate Cada objeto na cadeia compartilha uma interface comum para manipular as requisições e acessar seu sucessor na cadeia

Motivação (2)

Aplicabilidade Quando mais de um objeto pode tratar uma requisição e quem efetivamente a trata não é conhecido a priori Para emitir requisições para um ou mais objetos sem especificar o receptor explicitamente Quando o conjunto de objetos que pode tratar a requisição deve ser especificado dinamicamente

Estrutura

Participantes (1) Handler ConcreteHandler Define a interface para o tratamento das requisições Implementa a ligação com o sucessor (opcional) ConcreteHandler Trata as requisições pelas quais ele é responsável Pode acessar seu sucessor Se o ConcreteHandler pode tratar a requisição, ele o faz; se não, encaminha a requisição ao seu sucessor

Participantes (2) Client Inicia a requisição a um objeto ConcreteHandler da cadeia

Colaboração

Consequências Benefícios Acoplamento reduzido Flexibilidade na atribuição de responsabilidades aos objetos Desvantagem Tratamento da requisição não é garantido

Exemplos (1) import java.io.*; abstract class PurchasePower { protected final double base = 500; protected PurchasePower successor; public void setSuccessor(PurchasePower successor){ this.successor = successor; } abstract public void processRequest(PurchaseRequest request); class ManagerPPower extends PurchasePower { private final double ALLOWABLE = 10 * base; public void processRequest(PurchaseRequest request ) { if( request.getAmount() < ALLOWABLE ) System.out.println("Manager will approve $"+ request.getAmount()); else if( successor != null) successor.processRequest(request); } class DirectorPPower extends PurchasePower { private final double ALLOWABLE = 20 * base; public void processRequest(PurchaseRequest request ) { if( request.getAmount() < ALLOWABLE ) System.out.println("Director will approve $"+ request.getAmount()); else if( successor != null) successor.processRequest(request); } class VicePresidentPPower extends PurchasePower { private final double ALLOWABLE = 40 * base; public void processRequest(PurchaseRequest request) { if( request.getAmount() < ALLOWABLE ) System.out.println("Vice President will approve $" + request.getAmount()); else if( successor != null ) successor.processRequest(request); } class PresidentPPower extends PurchasePower { private final double ALLOWABLE = 60 * base; public void processRequest(PurchaseRequest request){ if( request.getAmount() < ALLOWABLE ) System.out.println("President will approve $" + request.getAmount()); else System.out.println( "Your request for $" + request.getAmount() + " needs a board meeting!"); }

Exemplos (2) class PurchaseRequest { private int number; private double amount; private String purpose; public PurchaseRequest(int number, double amount, String purpose){ this.number = number; this.amount = amount; this.purpose = purpose; } public double getAmount() { return amount; public void setAmount(double amt){ amount = amt; public String getPurpose() { return purpose; public void setPurpose(String reason) { purpose = reason; public int getNumber(){ return number; public void setNumber(int num) { number = num;

Exemplos (3) class CheckAuthority { public static void main(String[] args){ ManagerPPower manager = new ManagerPPower(); DirectorPPower director = new DirectorPPower(); VicePresidentPPower vp = new VicePresidentPPower(); PresidentPPower president = new PresidentPPower(); manager.setSuccessor(director); director.setSuccessor(vp); vp.setSuccessor(president); try{ while (true) { System.out.println("Enter the amount to check who should approve your expenditure."); System.out.print(">"); double d = Double.parseDouble(new BufferedReader(new InputStreamReader(System.in)).readLine()); manager.processRequest(new PurchaseRequest(0, d, "General")); } }catch(Exception e){ System.exit(1);

Dúvidas? Perguntas? Eduardo Motta ed@eduardomotta.com