Buscar

Oswaldo Borges Peres PADRÕES DE PROJETO Aula 07

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

PADRÕES DE PROJETO DE SOFTWARE
Aula 7 – Padrões Comportamentais GoF 
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
O que veremos nesta sétima aula
Finalizar o estudo da família de padrões comportamentais GoF;
Conhecer os últimos padrões comportamentais Observer, State, Strategy e Visitor;
Aprender as principais aplicações e funcionalidades destes padrões;
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Classificação dos padrões GoF segundo Metsker [2]
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Visitor
"Representar uma operação a ser realizada sobre os elementos de uma estrutura de objetos. Visitor permite definir uma nova operação sem mudar as classes dos elementos nos quais opera “ 
[GoF]
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Problema
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 1
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 2
...
Visitor gravidade = new Gravidade(); //esse é o nosso visitor, responsável pelo comportamento de queda.
Solido solido = new Solido("caixa"); //solido que recebera o comportamento
solido.accept(gravidade); //recebe o comportamento Gravidade
...
...
public void accept(Visitor visitor) {
visitor.visitSolido(this);
}
...
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 3
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Observer
"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]
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
public interface Sirene {
 
 	public void adicionarObservador( Operario o );
	 	public void removerObservador( Operario o );
 
}
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
public interface Operario {
 
		public void atualizar(Sirene s);
 
}
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
import java.util.ArrayList;
import java.util.Iterator;
 public class SireneConcreta implements Sirene {
 	private Boolean alertaSonoro = false;
	 	private ArrayList observadores = new ArrayList();
 	public void alterarAlerta(){
	 	 if(alertaSonoro) alertaSonoro = false;
		 else 	alertaSonoro = true;
		 notificarObservadores();
	 }
 
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
		public Boolean getAlerta(){
	 	 	return alertaSonoro;
	 	}
 	public void adicionarObservador(Operario o) {
			observadores.add(o);
		}
 	public void removerObservador(Operario o) {
			observadores.remove(o);
		}
 	
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
		private void notificarObservadores(){
	 		Iterator i = observadores.iterator();
			while(i.hasNext()){
				Operario o = (Operario) i.next();
				o.update(this);
			}
		}
}
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
	public class OperarioConcreto implements Operario {
 	private SireneConcreta objetoObservado;
 	public OperarioConcreto(SireneConcreta o){
			this.objetoObservado = o;
			objetoObservado.adicionarObservador(this);
		}
 	public void atualizar(Sirene s) {
			if(s == objetoObservado){
				System.out.println("[INFO] A Sirene mudou seu
				estado para: " + objetoObservado.getAlerta());
			}
		}
}
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
public class GerenciadorSirene {
 
 	public static void main(String[] args) {
 	 SireneConcreta sirene = new SireneConcreta();
	 	 OperarioConcreto obs1 = new OperarioConcreto(sirene);
		 OperarioConcreto obs2 = new OperarioConcreto(sirene);
		 sirene.alterarAlerta();	
		 sirene.alterarAlerta();
		}
}
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
State
"Permitir a um objeto alterar o seu comportamento quanto o seu estado interno mudar. O objeto irá aparentar mudar de classe." 
[GoF]
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Problema
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
public class Conectado implements ConexaoState {
 public void conectar(Conexao conexao) {
 	System.out.println("Estado inválido, já conectado"); 	}
	 public void desconectar(Conexao conexao) {
 // Muda estado da conexão para desconectado, instanciando nova 	classe
		conexao.setState(new Desconectado()); }
 public void enviarRequisicao(Requisicao requisicao, Conexao conexao) {
 // Enviar requisição e mudar estado para aguardando resposta
 conexao.setState(new AguardandoResposta()); }
 public Resposta receberResposta(Conexao conexao) {
 System.out.println("Estado inválido,preciso estar no estado AguardandoResposta");
 } 
}
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Strategy
"Definir uma família de algoritmos, encapsular cada um, e fazê-los intercambiáveis. Strategy permite que algoritmos mudem independentemente entre clientes que os utilizam." 
[GoF]
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Problema
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 1
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
 public enum Cargo {
 ATENDENTE,
 VENDEDOR,
 GERENTE;
 }
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
 public class Funcionario {
 private long id;
 private enum cargo;
 // Construtor, getters e setters
 . . .
 }
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
 public interface Strategy {
 
 // Calcula comissão.
 double calcularComissao(double valorVenda);
 }
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
public class Venda {
 private double valorVenda;
 private Funcionario funcionario;
 private Strategy calculoComissao;
	 public Venda() {// Construtor [Implementa STRATEGY].
 switch (funcionario.getCargo()) {
 case ATENDENTE :
 this.setCalculoComissao(new Strategy() {
		 public double calcularComissao(double valorVenda) {
 return (valorVenda * 0.01); 
 }
 });
 break;
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
 case VENDEDOR :
 this.setCalculoComissao(new Strategy() {
 		public double calcularComissao(double valorVenda) {
 return (valorVenda * 0.02); 
 }
 });
 break;
 case GERENTE :
 this.setCalculoComissao(new Strategy() {
 	 public double calcularComissao(double valorVenda) {
 return (valorVenda * 0.03); 
 }
});
 break;
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
		}
 }
 private void setCalculoComissao(Strategy calculoComissao) {
 this.calculoComissao= calculoComissao;
 }
 private Strategy getCalculoComissao() {
 return (this.calculoComissao);
 }
PADRÕES COMPORTAMENTAIS GOF – AULA 7
PADRÕES DE PROJETO DE SOFTWARE
Exemplo 
 public void save() {
 //. . .
 /* 
 * Calcula o valor da comissão de venda sem que haja a necessidade de
 * verificar qual o tipo cargo toda vez que o metodo <b>save</b> for 
 * executado. 
 */
 final double valorComissao = 
 this.getCalculoComissao().calcularComissao(this.valorVenda);
 // . . .
 }
 }
}
PADRÕES COMPORTAMENTAIS GOF – AULA 7
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]
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando