Вы находитесь на странице: 1из 31

Module Java Expert

CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT

UV MVC

Module Java

         

Vue densemble du langage Java Le langage Java : syntaxe et smantique Programmation multi-tche : les threads Accder aux bases de donnes Composants rutilisables : le modle MVC Dveloppement Client/Serveur Prsentation dun IDE : WSAD / Fort / JBuilder Les serveurs dapplications J2EE Les Enterprise JavaBeans R-ingnierie dapplications Java

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 2 / 31

Vue globale de MVC

Dans le paradigme MVC lentre utilisateur, la modlisation du monde extrieur, laspect visuel prsent lutilisateur sont explictement spars et grs par trois types dobjet, chacun spcialis dans sa tche. [Burbeck 92]

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 3 / 31

Buts de MVC

L architecture Model-View-Controller a pour objectif d organiser une application interactive en sparant :


les donnes la reprsentation des donnes le comportement de l application

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 4 / 31

Historique de MVC

 

Cr dans la fin des annes 1970 par Trygve Reenskaug au Xerox PARC Applications aux GUI (Graphical User Interfaces) Premire version en 1980 utilise une sous classe pour chaque vue adapter au modle Vues en 1983 ont spcifi les messages envoyer au model avec des symboles

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 5 / 31

Historique de MVC (suite)

ObjectWorks en 1989 a utilis les dtenteurs de valeurs In 1992 VisualWorks a remplac ObjectWorks et a utilis de composants de fine granularit GUI spcifiant linterface MVC. Visualworks a ajout la gestion des vnements par des controllers en 1998

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 6 / 31

Structure de MVC


Le modle reprsente la structure des donnes dans l application et les oprations spcifiques sur ces donnes. Une Vue prsente les donnes sous une certaine forme l utilisateur, suivant un contexte d exploitation. Un Controller traduit les interactions utilisateur par des appels de mthodes (comportement) sur le modle et slectionne la vue approprie base sur ltat du modle.

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 7 / 31

Vue globale MVC


(suite)

Controllers grent les entres de lutilisateur

Controller

View

Views prsentent linformation lutilisateur

Model Models implmentent les fonctionnalits de lapplication


Deruelle Laurent Copyright 2002 Laurent Deruelle Module UV Java Page 8 / 31

MVC Avantages

Dsavantages

 

 

 

Structure O-O propre Vues Multiples dun mme modle Vues Synchronized views et controllers interchangeables Look and Feel modifiable Framework Potentiel

 

Complexit accrue mise jours potentiellement excessive View/Controller fortement lis au modle

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 9 / 31

Architecture du modle MVC

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 10 / 31

Rfrences

Controller
View Model

View
Controller Model

Model

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 11 / 31

Communication MVC

1. Entre utilisateur

Controller

View

2. Modifier aspect 4. Mettre jour

Model
3. Modification interne

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 12 / 31

MVC et les modles de conception

     

View-Model (Observer) View-Controller (Strategy) View-View (Composite ) View-Controller (Factory Method) View-View (Decorator) Model (Adaptor)

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 13 / 31

Cas dtude Hypothtique

Le secteur technologique ralentit, impliquent que les dot-com seffondrent, laissant de nombreux programmeurs sans travail ...

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 14 / 31

McDonalds

La dcision est prise de ne pas gaspiller ce talent ...

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 15 / 31

Nouveau systme pour la gestion des commandes




Les caissiers ont besoin dune nouvelle interface


entres les nouvelles commandes, rcuprer largent

Les cuisiniers ont besoin dune autre interface


Visualiser les commandes, supprimer celles qui sont ralises

Exemples de code pour le Model, la View, le Controller, et la manire de les intgrer. McDonalds utilise Java

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 16 / 31

Boot-strap

class McDonaldsViewController{ public static void main() { //notre modle est autonome OrderTracker model = new OrderTracker(); //ces rfrences dpendent du modle CashierGUI vc1 = new CashierGUI(model); CashierGUI vc2 = new CashierGUI(model); CookGUI vc3 = new CookGUI(model); CookGUI vc4 = new CookGUI(model); } }

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 17 / 31

Le Modle

import java.util.Observable; class CommandeModele extends Observable{ Vector orders; // liste de toutes les commandes //...CommandeModele()... //...getCommandeIterator()... public void ajouterCommande(Commande newOrder) { orders.add(newOrder); //modification du modle setChanged(); // le modle a chang (vecteur) notifyObservers(); //notification globale } //idem avec supprimerCommande() }

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 18 / 31

La Vue
import java.util.Observer; class CuisineVue implements Observer{ CommandeModele model; CuisineControleur controller; CuisineVue(CommandeModele newModel) { model = newModel; model.addObserver(this); controller = new CuisineControleur(model, this); initialiserVue(); } public void update(Observable changed, Object arg){ MiseAJourVue(); }

Cration du contrleur

private void MiseAJourVue() { //...model.getCommandeIterator()... //...mettre jour ce qui est vu lcran }


Deruelle Laurent Copyright 2002 Laurent Deruelle

Appele par notifyObservers()

Module UV Java Page 19 / 31

Le Contrleur

import java.util.Observer; class CuisineControleur implements Observer{ CommandeModele model; CuisineVue view; //liste des contrles JButton nextPageButton; JButton removeButton; CuisineControleur(CommandeModele inModel, CuisineVue inView){ model = inModel; model.addObserver(this); view = inView; //...
Deruelle Laurent Copyright 2002 Laurent Deruelle Module UV Java Page 20 / 31

Le Contrleur

nextPageButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { view.pagesuivante(); } }); removeButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { model.supprimerCommande(view.getCommandeSelectionnee()); } }); public void update(Observable changed, Object arg) { if (model.getNombreDeCommandes() == 0) removeButton.disable(); } Appele par }

notifyObservers()
Deruelle Laurent Copyright 2002 Laurent Deruelle Module UV Java Page 21 / 31

Les Rfrences

Le code du modle ninclut pas de rfrences aux classes GUI Lutilisation de lObserver permet de raliser le dcouplage GUI font une rfrence au Modle
GUI est spcifique au Modle rutilisation

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 22 / 31

Le Modle

Ncessite dtre orient mtier pour supporter le couplage des vues et des controllers Ne doit jamais contenir des informations concernant ltat de la GUI Ne doit pas proposer de services spcifiques des vues particulires et des controllers

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 23 / 31

View-Controller

Pas besoin dtre spars


Document-View Rduit la complexit

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 24 / 31

La classe Observable (java.util)

Cette classe reprsente un objet observable par d autres, au niveau du modle de donnes. Un objet observable possde un ou plusieurs observateur, ajouts par la mthode addObserver(Observer o) Lorsque l interface d un objet observable est modifi, la mthode notifyObservers()

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 25 / 31

La classe Observable (java.util)

La mthode notifyObservers permet de notifier les observateurs d une modification dans l tat. La modification est indique par la mthode hasChanged(). Une fois les observateurs notifis, la mthode clearChanged permet d indiquer que l objet n est plus dans l tat modifi.

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 26 / 31

La classe Observable (java.util)

La mthode deleteObservers() permet de supprimer l ensemble des observateurs associs l objet. Une modification est reflte par la mthode setChanged(). Une fois les observateurs notifis, la mthode clearChanged permet d indiquer que l objet n est plus dans l tat modifi.

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 27 / 31

L interface Observer (java.util)

Une classe qui implmente l interface Observer, dsire tre notifie des changements produits sur un objet observable.

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 28 / 31

L interface Observer (java.util)

L unique mthode devant tre implmente est update(Observable o, Object arg). La mthode update est appele automatiquement lorsque l objet est notifi de la modification de l observable.

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 29 / 31

L interface Observer (java.util)

 

Le premier paramtre est l objet qui notifie. Le second paramtre est un objet pass la mthode update, au moyen d un appel la mthode notifyObserver(Object o)

Deruelle Laurent Copyright 2002 Laurent Deruelle

Module UV Java Page 30 / 31

Liens vers MVC ...




Applications Programming in Smalltalk-80(TM): How to use Model-View-Controller (MVC) by Steve Burbeck, Ph.D. http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html A Description of the Model-View-Controller User Interface Paradigm in the Smalltalk-80 System by Glenn E. Krasner and Stephen T. Pope http://rain.create.ucsb.edu/~stp/CDROM/Documents/MVC%20Cookbook/mvc_cookbook_1.html TWISTING THE TRIAD: The evolution of the Dolphin Smalltalk MVP application framework by Andy Bower, Blair McGlashan http://www.object-arts.com/Papers/TwistingTheTriad.PDF MVP: Model-View-Presenter: The Taligent Programming Model for C++ and Java by Mike Potel ftp://www6.software.ibm.com/software/developer/library/mvp.pdf MVC meets Swing: Explore the underpinnings of the JFC's Swing components by Todd Sundsted www.javaworld.com/javaworld/jw-04-1998/jw-04-howto.html The Model-View-Controller (MVC) Framework Stingray Software http://www.stingray.com/products/objtoolkitpro/mvc.cfm ModelViewControllerHistory http://c2.com/cgi/wiki?ModelViewControllerHistory
Module UV Java Page 31 / 31

Deruelle Laurent Copyright 2002 Laurent Deruelle