curso de especializaÇÃo em tecnologia java design patterns parte 3: padrÃo mvc prof. cesar...

23
1 CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla http://www.dainf.ct.utfpr.edu.br/~ tacla UTFPR/Campus Curitiba U NIVERS ID AD E TECNO G IC A FED ERA L DO PARANÁ PR

Upload: wagner-lacerda-amorim

Post on 07-Apr-2016

234 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

CURSO DE ESPECIALIZAÇÃOEM TECNOLOGIA JAVA

DESIGN PATTERNSPARTE 3: PADRÃO MVC

Prof. Cesar Augusto Taclahttp://www.dainf.ct.utfpr.edu.br/~tacla

UTFPR/Campus Curitiba

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁPR

Page 2: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

2

◊ Para entender o modelo MVC, faremos um breve introdução ao padrão.

◊ Em seguida, implementaremos o modelo num programa simples de conversão de Celsius para Fahrenheit com duas visões.

◊ Finalmente, modificaremos o exercício acima para incluir uma nova visão. Para fixar, é interessante fazer diags. De classe e sequência.

◊ Tópicos relacionados: Observer será utilizado no exemplo, DAO no momento que persistimos os dados, Strategy para selecionar modo de visualizar dinamicamente

PLANO

Page 3: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

3

PADRÃO MVC

◊ MODEL, VIEW, CONTROLLER◊ Objetivo primordial é organizar uma aplicação em três

camadas para aumentar a flexibilidade e o reuso.

Page 4: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

4

“The essential purpose of MVC is to bridge the gap between the human user's mental model and the digital model that exists in the computer.

The ideal MVC solution supports the user illusion of seeing and manipulating the domain information directly. The structure is useful if the user needs to see the same model element simultaneously in different contexts and/or from different viewpoints.”

PADRÃO MVC/ORIGENS

Extraídos (texto e figura) do site do criador Trygve M. H. Reenskaug do padrão MVC http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html

Page 5: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

5

NOÇÕES SOBRE MVC

MVC possui três tipos de objetos (Gamma et al., 1995) MODEL = objeto(s) do domínio da aplicação VIEW = objeto(s) da apresentação CONTROLLER = objetos que definem como a interface do usuário reage a

uma entrada do usuário

MVC desacopla estes objetos para aumentar flexibilidade e reuso.

Page 6: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

6

NOÇÕES SOBRE MVC

IDÉIA CENTRAL DESACOPLAMENTO entre objetos das camadas de

visão e de modelo é obtido através de um protocolo de assinatura ou notificação (aí pode ser empregado o padrão OBSERVER)

MODELOVISÃO CONTROLE

Page 7: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

7

NOÇÕES SOBRE MVC

VISÃO deve garantir que sua aparência reflita o estado do modelo.

Toda vez que o modelo muda, notifica as visões que dependem dele. Assim, cada visão pode atualizar-se.

Isto permite que múltiplas visões sejam conectadas ao modelo para prover diferentes apresentações.

Novas visões podem ser criadas para o modelo sem a necessidade de reescrevê-lo.

Page 8: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

8

COLABORAÇÕES

A figura mostra um objeto modelo e três visões (controladores foram omitidos).O modelo possui alguns dados, mostrados diferentemente pelas três visões.Quando estes valores mudam, o modelo notifica as visões. As visões se comunicam com o modelo para refletirem estas mudanças.

Page 9: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

9

CONSEQUÊNCIAS POSITIVAS

Manutenção mais simples: Código organizado Depuração isolada de camadas; Alterações numa camada não afetam outras.

Facilita o reuso

Simplifica a inclusão de um novo elemento de visão

Possibilita desenvolvimento das camadas em paralelo, se forem bem definidas.

Page 10: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

10

CONSEQUÊNCIAS NEGATIVAS

Requer Análise mais aprofundada e mais tempo pessoal especializado

Desempenho do sistema pode cair Se houver muitas visões e Se o modelo for atualizado com muita freqüência,

Ineficiência uma visão pode ter que fazer inúmeras chamadas ao modelo,

dependendo de sua interface Se o padrão não for implementado com cuidado, podemos ter casos

como o envio de atualizações para visões que estão minimizadas ou fora do campo de visão de usuário

Page 11: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

11

PARTICIPANTES DO MVC

Modelo do negócio (model): os objetos desta camada contêm os dados do negócio e as regras do negócio que ditam como acessar e modificar os dados de maneira consistente.

Encapsula os dados e os comportamentos do negócio e persiste os mesmos sem se preocupar em como serão mostrados.

Alguns autores preferem o termo modelo do domínio, pois nem todos os sistemas são comerciais . Por exemplo, simulador de oleodutos as regras não são de negócio, são leis da física.

Mais detalhadamente

Page 12: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

12

PARTICIPANTES DO MVC

Visão (view): é responsável pela interação com o usuário e por apresentar as diversas visões dos dados do negócio. Não se preocupa em como os dados foram obtidos, apenas em apresentá-los.

Mais detalhadamente

Page 13: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

13

PARTICIPANTES DO MVC

Controle (controller): comanda o fluxo de apresentação das informações fazendo a intermediação entre as camadas de visão e de modelo.

Escolha da apresentação em função da língua do usuário, permissões de acesso, dados a serem mostrados…

Mais detalhadamente

Page 14: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

14

MVC: COLABORAÇÕES

Visão Controle Modelo do negócio

Eventos de interface, entrada de informações ações (a)

Notificações

Page 15: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

15

MVC: IMPLEMENTAÇÃO

Visão Controle Modelo do negócio

Eventos de interface, entrada de informações ações (a)

java.util.Observable

notifyObservers()

mutators()

setChanged()

java.util.ObserverCada objeto da visão implementa a interfaceObserver e seu método update(). Devem se registrar junto aoObservable

Objetos do modelo podemestender Observable que possui a infraestrutura pararegistro e notificação.

Métodos que provocammudanças no estadodo modelo

Controle é um observer deeventos da visão

update()

java.util.Observable java.util.Observer

Page 17: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

17

JAVA.UTIL.OBSERVER

API DOC: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Observer.html

A class can implement the Observer interface when it wants to be informed of changes in observable objects.

Método de Observer void update(Observable o, Object arg) This method is called whenever the observed object is changed.

Page 18: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

18

EXERCÍCIO 1

PLEBISCITO

Baixar o código JPlebiscito disponível em:http://www.dainf.ct.utfpr.edu.br/~tacla/JAVARepositorio/JMVCObserver/JPlebiscito/

1. Esboçar o diagrama de classes

2. Observar o desacoplamento entre a camada Model e as demais prestando atenção aos atributos de cada classe e às construtoras em Main.java

Page 19: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

19

EXERCÍCIO 2

PLEBISCITO COM NOVA INTERFACE

1. Criar uma nova GUI que mostra os percentuais de cada opção do plebiscito. Observar que a criação de uma nova GUI não altera o model.

2. Montar um diagram de sequência para o cenário onde usuário clica no botão [sim]

PS. Uma variação do código pode ser feita implementando-se a parte de controle nas GUIs.

Solução em http://www.dainf.ct.utfpr.edu.br/~tacla/JAVARepositorio/JMVCObserver/JPlebiscitoComPercent/

Page 20: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

20

COLABORAÇÕES NO JPlebiscito

Visão Controle Modelo do negócio

Eventos de interface, entrada de informações ações (a)

java.util.Observable

notifyObservers()

votar(int op)

setChanged()

java.util.Observer

Controle é um listener deeventos da visão’

update()

PlebiscitoGUI

PercentuaisGUI update()

Page 21: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

21

EXERCÍCIO 3

CONVERSOR CELSIUS > FAHRENHEIT

Implemente, seguindo os padrões MVC e OBSERVER, um programa que permita ao usuário converter graus Celsius em Fahrenheits e que mostre o histórico dos 10 últimos valores convertidos.

Utilize o código do tutorial JPlebiscito como ponto de partida>> continua

Page 22: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

22

EXERCÍCIO 3

Exercício (cont.)Há dois objetos na camada de visão: um para realizar a conversão e outro, para mostra o histórico.

Na camada do modelo, deve haver um objeto para cada conversão realizada e um para armazenar o histórico.

Solução em http://www.dainf.ct.utfpr.edu.br/~tacla/JAVARepositorio/JMVCObserver/JConversorCelsiusFahrGrafico-v3/

Page 23: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 3: PADRÃO MVC Prof. Cesar Augusto Tacla tacla UTFPR/Campus

23

EXERCÍCIO 4

MODIFICAÇÃO DO CONVERSOR

Inclua uma nova visão para mostrar a média dos valores do histórico (visão sempre ativa).

Faça um diagrama de classes.

Faça um diagrama de sequência para um cenário que inicie na conversão de um valor em Celsius.