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

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

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

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

PADRÃO COMMAND

João Paulo Paschoal

Arnaldo Correia

Eric Carvalho

Page 2: 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]

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

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;

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

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;

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

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.

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

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);

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

DIAGRAMA DE SEQUÊNCIA

 

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

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;

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

CONSEQUÊNCIAS

• Encapsulamento do Comando em um Objeto, podendo portanto serem manipulados e refinados como tal;

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

DIAGRAMA DE CLASSE

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

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;

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

PARTICIPANTES

• Invoker: Envia solicitações ao Command;

• Receiver: Implementa as ações que serão utilizadas pelo ConcreteCommand;

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

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;

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

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;

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

EXEMPLO REAL

 

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

EXEMPLO REAL

• Piloto (Client)

•  

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

EXEMPLO REAL

• Carro (Invoker)

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

EXEMPLO REAL

• Carro (Invoker) continuação…

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

EXEMPLO REAL

• AcelerarCommand (Concrete Command)

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

EXEMPLO REAL

• DescerMarchaCommand (Concrete Command)

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

EXEMPLO REAL

• Rodas (Receiver)

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

EXEMPLO REAL

• Cambio (Receiver)

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

EXEMPLO REAL

• Main (Dentro de Piloto)

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

EXEMPLO REAL

• Saída do Main

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

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; 

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

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.