padrÃo command joão paulo paschoal arnaldo correia eric carvalho

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

Upload: internet

Post on 22-Apr-2015

108 views

Category:

Documents


2 download

TRANSCRIPT

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.