Académique Documents
Professionnel Documents
Culture Documents
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
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]
Buts de MVC
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
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
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.
Controller
View
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
Rfrences
Controller
View Model
View
Controller Model
Model
Communication MVC
1. Entre utilisateur
Controller
View
2. Modifier aspect
4. Mettre jour
Model
3. Modification interne
View-Model (Observer) View-Controller (Strategy) View-View (Composite ) View-Controller (Factory Method) View-View (Decorator) Model (Adaptor)
Le secteur technologique ralentit, impliquent que les dot-com seffondrent, laissant de nombreux programmeurs sans travail ...
McDonalds
Exemples de code pour le Model, la View, le Controller, et la manire de les intgrer. McDonalds utilise Java
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);
}
}
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() }
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
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
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
View-Controller
Pas besoin dtre spars
Document-View Rduit la complexit
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()
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.
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.
Une classe qui implmente l interface Observer, dsire tre notifie des changements produits sur un objet observable.
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.
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)
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