curso de especializaÇÃo em tecnologia java design patterns parte 3: padrÃo mvc prof. cesar...
TRANSCRIPT
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
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
3
PADRÃO MVC
◊ MODEL, VIEW, CONTROLLER◊ Objetivo primordial é organizar uma aplicação em três
camadas para aumentar a flexibilidade e o reuso.
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
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.
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
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.
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.
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.
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
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
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
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
14
MVC: COLABORAÇÕES
Visão Controle Modelo do negócio
Eventos de interface, entrada de informações ações (a)
Notificações
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
16
JAVA.UTIL.OBSERVABLE
API DOC: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Observable.html
This class represents an observable object, or "data" in the model-view paradigm. It can be subclassed to represent an object that the application wants to have observed.
Alguns métodos de Observablevoid addObserver(Observer o) void notifyObservers(Object arg) protected void setChanged()
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.
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
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/
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()
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
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/
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.