PADRÃO COMMAND João Paulo Paschoal Arnaldo Correia Eric Carvalho.

Post on 22-Apr-2015

108 views 2 download

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.