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

Preview:

Citation preview

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.

Recommended