PADRÃO COMMAND João Paulo Paschoal Arnaldo Correia Eric Carvalho.
Transcript of PADRÃO COMMAND João Paulo Paschoal Arnaldo Correia Eric Carvalho.
PADRÃO COMMAND
João Paulo Paschoal
Arnaldo Correia
Eric Carvalho
DEFINIÇÃO
"Encapsular uma requisição como um objeto, permitindo que clientes parametrizem diferentes requisições, filas ou requisições de log, e suportar operações reversíveis." [GoF]
OBJETIVO
• Encapsular solicitações em um objeto e utilizar suas ações sem conhecer sua implementação;
• Possibilitar operações de fazer e desfazer;
• Geração de logs;
MOTIVAÇÃO
• Algumas vezes é necessário solicitar uma operação sem nenhum conhecimento de como esta será implementada;
• Podemos simplesmente não conhecer o objeto que vai receber a delegação para executar aquela operação;
MOTIVAÇÃO
• Imagine a situação de um item de menu: "colar" (Ctrl + V);o Ele não sabe a natureza da informação
que está na Área de Transferência;o Pode ser uma Imagem, um Texto, etc.
MOTIVAÇÃO
• Solução: encapsular esta tarefa num objeto (um Command) e através dele delegar esta tarefa para outra classe, que por sua vez sabe como executar a operação propriamente dita (o Receiver);
DIAGRAMA DE SEQUÊNCIA
CONSEQUÊNCIAS
• Promove o desacoplamento do objeto que solicita uma operação do objeto que vai realizar esta operação propriamente dita;
• Solicitações em alto nível: o objeto não precisa ter nenhum conhecimento sobre a implementação da operação;
CONSEQUÊNCIAS
• Encapsulamento do Comando em um Objeto, podendo portanto serem manipulados e refinados como tal;
DIAGRAMA DE CLASSE
PARTICIPANTES
• Command: Interface para execução de uma operação;
• ConcreteCommand: Vincula um objeto Receiver a uma ação e implementa os métodos abstratos da classe Command;
• Client: Cria um objeto ConcreteCommand e estabelece o seu Receiver;
PARTICIPANTES
• Invoker: Envia solicitações ao Command;
• Receiver: Implementa as ações que serão utilizadas pelo ConcreteCommand;
EXEMPLO REAL
• Observe o exemplo real:
• Trata-se de um “simulador” de carro de Formula 1;
• Um Piloto pode executar as ações “acionarPedal” e “mudarMarcha”;
• O Carro faz o papel do Invoker, gerenciando as ações do piloto;
EXEMPLO REAL
• Para as ações “acionarPedal” existem dois comandos: • AcelerarCommand, e • FreiarCommand;
• Para as ações de “mudarMarcha” existem dois comandos:• SubirMarcha, e • DescerMarcha;
EXEMPLO REAL
EXEMPLO REAL
• Piloto (Client)
•
EXEMPLO REAL
• Carro (Invoker)
EXEMPLO REAL
• Carro (Invoker) continuação…
EXEMPLO REAL
• AcelerarCommand (Concrete Command)
EXEMPLO REAL
• DescerMarchaCommand (Concrete Command)
EXEMPLO REAL
• Rodas (Receiver)
EXEMPLO REAL
• Cambio (Receiver)
EXEMPLO REAL
• Main (Dentro de Piloto)
EXEMPLO REAL
• Saída do Main
APLICAÇÕES
• Realizar operações de fazer e desfazer;• Realizar operações de log;• Reduzir acoplamento entre requisição e execução
de uma operação;• Projetar um sistema baseado em operações de alto
nível, como operações de transações;
PRÁTICA CALCULADORA
Esta atividade simula uma calculadora com duas operações possíveis: Multiplicação ou MultiplicaçãoPorSoma . A calculadora envia comandos diferentes de acordo com a operação selecionada, encapsulando as solicitações como objeto. Com base no exemplo demonstrado, e nas classes parcialmente fornecidas, implemente o que falta para o funcionamento da calculadora.