Padrões de Projeto Aula 15 – Padrão Command. PADRÃO COMMAND Encapsulando a chamada de métodos com o padrão Command. 2.

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 11 Criado por Frederick H. Colclough, Colorado Technical University Compilação Separada.
Advertisements

Programação em Java Prof. Maurício Braga
Eventos Marco Antonio, Arquiteto de Software – TJDF Novembro/2005
Padrão de Projeto Interpreter
Projeto de Sistemas de Software Leandra Mara da Silva
Polimorfismo e Acoplamento Dinâmico
1 Command. 2 Definição: encapsula uma requisição como um objeto, permitindo a parametrização de clientes com diferentes requisições. RemetenteReceptor.
Polimorfismo em C#.
Integração com Banco de Dados
Orientação a Objetos Parte I
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
PADRÃO COMMAND João Paulo Paschoal Arnaldo Correia Eric Carvalho.
SISTEMAS DISTRIBUIDOS Aula 4
Classes Abstratas e Interface
Diagrama de Colaboração. Diagramas de Interação Expressam informações bastante similares porém de maneira diferente Diagrama de seqüência: – Interação.
Análise e Projeto de Sistemas
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Trabalho Final de Padrões de Projeto
Faculdade Pitágoras – Campus Fadom.  Display  Cada MIDlet tem UMA referência para um objeto Display  Esse objeto pode recuperar informações sobre.
Factory.
STATE.
Introdução a Orientação a Objetos
2 – Revisão de Programação Orientada a Objetos
20/04/2017 Orientação a Objetos 1 1.
Padrões de Projetos Professora Lucélia. Conceitos É uma solução conhecida para um problema comum São técnicas que nos dão uma boa solução para determinados.
Padrões de Projetos Orientados a Objetos I Wolley W. Silva.
SPEM (Software Process Engineering Metamodel): Uma Linguagem para Modelagem de Processos de Software.
Aula 6 – Padrão Factory Method
Padrões de Projeto Aula 9 – Padrão Adapter.
Padrões de Projeto Aula 10 – Padrão Façade.
José Antônio da cunha IFRN Administração de Banco de Dados.
Introdução POO Thiago Medeiros Sistemas de Informação Definição: Sistemas de Informação é uma combinação de pessoas, dados, processos, redes de.
1. 2 Programação Orientada a Objetos Prof. Maurício Rodrigues de Morais
1 Introdução aos Padrões de Projetos (na prática) Créditos: Lúbia Vinhas Hazel Carvalho Crato Adaptações: Prof. Nécio de Lima Veras.
Guia de Referência para Fornecedores Visão Fornecedor.
Universidade Federal do Espírito Santo - UFES Laboratório de Computação de Alto Desempenho - LCAD Banco de Registradores e ALU Prof. Alberto F. De Souza.
Universidade Federal do Espírito Santo - UFES Laboratório de Computação de Alto Desempenho - LCAD Introdução ao Logisim Prof. Alberto F. De Souza LCAD/DI/UFES.
Glossário Autor: Skyup Informática. Atividade - Glossário A atividade glossário permite que o administrador crie páginas de definições, um dicionário.
Conhecendo o Tutorial support.ebsco.com. EBSCOhost é uma poderosa ferramenta de referência online que oferece uma variedade de bases de dados de texto.
GRASP: Projeto de Objetos com Responsabilidade. 2 Pauta Responsabilidades e métodos Responsabilidades e métodos Padrões Padrões GRASP: Padrões e princípios.
Noções de projeto orientado a objetos - camadas Prof. Gustavo Wagner (alterações) Prof. Tiago Massoni (Slides originais) Desenvolvimento de Sistemas FATEC-PB.
Programação para Internet Aula 06 Linguagem Java (Orientação a Objetos – Atributos e Métodos)
Classes Abstratas e Interface. 2 Classe Abstrata  Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos);
1 Interface (o termo) » Interface (a palavra reservada): Java estendeu o conceito de interfaces à um nível ainda mais flexível que permite construir entidades.
Polimorfismo com Interfaces Pacotes em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB.
Informática Industrial N8INF Prof. Dr. Cesar da Costa 4.a Aula: Rede ModBus.
Introdução a Padrões de Projeto Padrões de Projeto Orientado a Objetos Profa. Danielle Martin Universidade de Mogi das Cruzes.
Capítulo 5: SCRIPTS ALUNOS: CARLOS EDUARDO C. DESIDERIO / EDUARDO MATHEUS VOLANSKI JADER JEPSEN SCHMIELE / LINDOLFO.
Operações no Sistema e-Contas da Responsabilidade das Unidades Técnicas Maio/2015.
Normalização (4FN) Na literatura aparecem outras formas normais, como a forma normal de Boyce/Codd, a 4FN e a 5FN. Destas a única que tem importância na.
AULA Mais Herança Curso: Informática (Subseqüente) Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Padrões de Projeto Aula 14 – Padrão Abstract Factory.
Herança e Polimorfismo Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Lógica de Programação Aula 08 Prof. Marcelo Marcony.
INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Listas.
Lógica de programação Estruturas de seleção Estruturas de repetição Sub-Rotinas 1.
ASP.NET Passo a Passo Configuração Conteúdo do Capítulo 1. Aplicar configurações a aplicações ASP.NET 2. Gerenciar a configuração do ASP.NET usando suas.
Revisão de Conceitos Thiago Medeiros Barros. Algoritmos Qualquer problema de computação pode ser resolvido executando uma série de ações em uma ordem.
PERCEPÇÃO, ESTÉTICA E PLÁSTICA
Endereçamento IP Básico
Diagramas de Sequência e Comunicação
Fundamentos de Programação 1 Slides 7 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Funções” 1.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
PRS Manutenção Terceiros. PRS, Manutenção (Copyright Clariant. All rights reserved.) Página Avaliação Terceiros Terceiros Contratação.
Padrões de Projeto Aula 10 – Padrão Façade. Façade, em francês, significa fachada ◦ Fachada de prédio 2.
Calculo de Hoare Daniel Soares, Gabriel Alabarse Hernandez(150756) e Vanius Zapalowski(150843)
CLASSES EM JAVA Dilvan Moreira (baseado no livro Big Java)
Aula 5 - Métodos. Desenvolvimento de Programas A melhor forma de construir programas grandes é dividi-los em programas menores que executam tarefas específicas.
Padrão Command Encapsulando a chamada de métodos com o padrão Command.
Transcrição da apresentação:

Padrões de Projeto Aula 15 – Padrão Command

PADRÃO COMMAND Encapsulando a chamada de métodos com o padrão Command. 2

Descrição do problema - Motivação Automação domiciliar – Construa um controle remoto que controlará uma variedade de dispositivos de sua casa – Dispositivos exemplo: luz da sala, TV, ar condicionado, banheira, luz do jardim, ventilador de teto, portão da garagem, … 3

Controle Remoto Sete slots programáveis Podemos associar um dispositivo diferente para cada slot Cada slot possui botões de ligar e desligar Existe um botão global para “desfazer” uma ação Recebemos um CD com algumas classes implementadas que comandam os dispositivos 4

CD com classes implementadas 5

O que varia? O que permanece igual? O que varia: – O dispositivo atribuído em um dado slot – As instruções para ligar um dispositivo específico – As instruções para desligar um dispositivo específico O que permanece igual: – O controle remoto propriamente dito: Dispositivo com os sete slots Capacidade de mudar um slot Capacidade de ligar/desligar Capacidade de desfazer a última ação 6

As classes dos dispositivos As classes que nos foram providas (CD): – CelingLight (Luz) – TV – Hottube (Banheira) Toda classe precisa saber ligar e desligar, pois são essas as ações que o nosso controle remoto realizará. – Porém, cada classe do dispositivo (TV, banheira, etc) pode ter uma maneira única de ligar e desligar, até os nomes dos métodos podem ser diferentes 7

Solução 1 8 if (slot1 instanceof Light) light.on(); else if (slot1 instanceof Hottub){ hottub.prepareJets(); hottub.jetsOn(); } else if (slot1 == TV) tv.on(); //etc Problemas? Quebra de encapsulamento 1. O controle remoto tem que estar ciente dos detalhes para ligar/desligar algum dispositivo. Alto acoplamento 2. Se o algoritmo de ligar/desligar mudar o controle remoto deve mudar. Viola o princípio aberto- fechado 3. Se um novo dispositivo é adicionado, temos que mudar o código.

Responsabilidades As classes dos dispositivos – Definição dos métodos on/off As classes de Comando – Enviar as mensagens para os dispositivos (on/off) – Enviar mensagem para desfazer última tarefa (undo) O controle remoto lida com um ou mais comandos. O controle remoto não precisa saber detalhes das classes dos dispositivos que estão sendo usadas (nem como elas são implementadas). 9

A interface Command 10 public interface Command { public void execute(); } A interface Command (neste exemplo) faz apenas uma coisa: executa um comando.

11 public interface Command { public void execute(); } O que devemos fazer agora?

LightOnCommand 12 public class LightOnCommand implements Command { Light light; public LightOnCommand(Light light) { this.light = light; } public void execute() { light.on(); } Composição com a classe do dispositivo. Construtor recebe o objeto Light como parâmetro. Aqui o command delega a execução para classe do dispositivo (Light). Nota: este é um exemplo simples. Em outros casos pode ser preciso chamar mais métodos.

SimpleRemoteControl public class SimpleRemoteControl { Command slot; public SimpleRemoteControl() {} public void setCommand(Command command) { slot = command; } public void buttonWasPressed() { slot.execute(); } Esta versão do controle remoto tem apenas um slot. setCommand atribui um Command a um slot. Diga ao Command que execute! Note que qualquer command funcionaria aqui (polimorfismo). O controle remoto não sabe nada sobre o dispositivo sendo executado. 13

RemoteControlTest (main) SimpleRemoteControl remote = new SimpleRemoteControl(); Light light = new Light(); GarageDoor garageDoor = new GarageDoor(); LightOnCommand lightOn = new LightOnCommand(light); GarageDoorOpenCommand garageOpen = new GarageDoorOpenCommand(garageDoor); remote.setCommand(lightOn); remote.buttonWasPressed(); remote.setCommand(garageOpen); remote.buttonWasPressed(); Instanciando dois objetos – dispositivos. Instanciando dois comandos baseado nos dipositivos. Atribua os comandos e aperte o botão do controle. 14

Definição O padrão Command encapsula uma solicitação como um objeto, o que lhe permite parametrizar outros objetos com diferentes solicitações, enfileirar ou registrar solicitações e implementar recursos de cancelamento de operações. 15

Command Pattern - Diagrama de Classe ClientInvoker setCommand() > Command execute() undo() Receiver action() ConcreteCommand execute() undo() 16

Command Pattern – Diagrama de Classs para ControleRemoto RemoteControlTest RemoteControl onCommands offCommands setCommand() onButtonPushed() offButtonPushed() > Command execute() undo() Light on() off() LightOnCommand execute() undo() LightOffCommand execute() undo() Controle remoto para automação de casas. 17

Lab - Parte I Recebemos uma nova classe para o DVD. Para ligá-lo, chame o método turnPowerOn(). Para desligá-lo chame o método turnPowerOff(). Crie classes de Command para ligar e desligar o DVD player. 18

Lab - Parte II Suponha que você queira ser capaz de ligar/desligar o DVD e a TV ao mesmo tempo. Crie um Command que resolverá estes problemas com um único botão. 19

Lab - Parte III Note que as classes DvdOnCommand e DvdOffCommand têm código duplicado. Crie uma classe abstrata que ajude a remover esta duplicação. 20

Há semelhanças entre o padrão Command e os padrões Adapter, Façade e Strategy... – O que diferencia esses padrões? 21

Lab - Parte IV (Desafio!) Para casa: como implementar o método undo() no controle remoto? 22

Referências – [1] Capítulo 6 do livro “Padrões de Projeto – Use a Cabeça!” 23