31
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV MVC Module Java Expert

mvc (5).ppt

Embed Size (px)

Citation preview

Page 1: mvc (5).ppt

CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT

UV MVC

Module Java Expert

Page 2: mvc (5).ppt

Module UV JavaPage 2 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Module Java

Vue d’ensemble du langage Java Le langage Java : syntaxe et sémantique Programmation multi-tâche : les threads Accéder aux bases de données Composants réutilisables : le modèle MVC Développement Client/Serveur Présentation d’un IDE : WSAD / Forté / JBuilder Les serveurs d’applications J2EE Les Enterprise JavaBeans Ré-ingénierie d’applications Java

Page 3: mvc (5).ppt

Module UV JavaPage 3 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Vue globale de MVC

“Dans le paradigme MVC l’entrée utilisateur, la modélisation du monde extérieur, l’aspect visuel présenté l’utilisateur sont explictement séparés et gérés par trois types d’objet, chacun spécialisé dans sa tâche.” [Burbeck 92]

Page 4: mvc (5).ppt

Module UV JavaPage 4 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Buts de MVC

L ’architecture Model-View-Controller a pour objectif d ’organiser une application interactive en séparant :– les données – la représentation des données– le comportement de l ’application

Page 5: mvc (5).ppt

Module UV JavaPage 5 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Historique de MVC

Créé dans la fin des années 1970 par Trygve Reenskaug au Xerox PARC

Applications aux GUI (Graphical User Interfaces) Première version en 1980 utilise une sous classe pour

chaque vue à adapter au modèle Vues en 1983 ont spécifié les messages à envoyer au

model avec des symboles

Page 6: mvc (5).ppt

Module UV JavaPage 6 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Historique de MVC (suite)

ObjectWorks en 1989 a utilisé les détenteurs de valeurs

In 1992 VisualWorks a remplacé ObjectWorks et a utilisé de composants de fine granularité GUI spécifiant l’interface MVC.

Visualworks a ajouté la gestion des événements par des controllers en 1998

Page 7: mvc (5).ppt

Module UV JavaPage 7 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Structure de MVC

Le modèle représente la structure des données dans l ’application et les opérations spécifiques sur ces données.

Une Vue présente les données sous une certaine forme à l ’utilisateur, suivant un contexte d ’exploitation.

Un Controller traduit les interactions utilisateur par des appels de méthodes (comportement) sur le modèle et sélectionne la vue appropriée basée sur l’état du modèle.

Page 8: mvc (5).ppt

Module UV JavaPage 8 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Vue globale MVC (suite)

ModelModel

ControllerController ViewView

Models implémentent les fonctionnalités de l’application

Views présentent

l’information à l’utilisateur

Controllers gèrent les entrées de

l’utilisateur

Page 9: mvc (5).ppt

Module UV JavaPage 9 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

MVCAvantages Désavantages

Structure O-O propre Vues Multiples d’un même

modèle Vues Synchronized views et controllers inter-

changeables Look and Feel modifiable Framework Potentiel

Complexité accrue mise à jours potentiellement

excessive View/Controller fortement

liés au modèle

Page 10: mvc (5).ppt

Module UV JavaPage 10 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Architecture du modèle MVC

Page 11: mvc (5).ppt

Module UV JavaPage 11 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Références

ModelModel

ControllerController ViewViewViewView

Model Model ControllerController

ModelModel

Page 12: mvc (5).ppt

Module UV JavaPage 12 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Communication MVC

ModelModel

ControllerController ViewView

1. Entrée utilisateur

2. Modifier aspect

3. Modification interne

4. Mettre à jour

Page 13: mvc (5).ppt

Module UV JavaPage 13 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

MVC et les modèles de conception

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

Page 14: mvc (5).ppt

Module UV JavaPage 14 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Cas d’étude Hypothétique

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

Page 15: mvc (5).ppt

Module UV JavaPage 15 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

McDonald’s

La décision est prise de ne pas gaspiller ce talent ...

Page 16: mvc (5).ppt

Module UV JavaPage 16 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Nouveau système pour la gestion des commandes

Les caissiers ont besoin d’une nouvelle interface– entrées les nouvelles commandes, récupérer l’argent

Les cuisiniers ont besoin d’une autre interface– Visualiser les commandes, supprimer celles qui sont

réalisées

Exemples de code pour le Model, la View, le Controller, et la manière de les intégrer.

McDonald’s utilise Java

Page 17: mvc (5).ppt

Module UV JavaPage 17 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Boot-strap

class McDonaldsViewController{

public static void main() {

//notre modèle est autonome OrderTracker model = new OrderTracker();

//ces références dépendent du modèle CashierGUI vc1 = new CashierGUI(model); CashierGUI vc2 = new CashierGUI(model); CookGUI vc3 = new CookGUI(model); CookGUI vc4 = new CookGUI(model); }

}

Page 18: mvc (5).ppt

Module UV JavaPage 18 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le Modèle

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 modèle setChanged(); // le modèle a changé (vecteur) notifyObservers(); //notification globale }

//idem avec supprimerCommande()}

Page 19: mvc (5).ppt

Module UV JavaPage 19 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

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();

}

private void MiseAJourVue() {

//...model.getCommandeIterator()...

//...mettre à jour ce qui est vu à l’écran

}

}

Appelée par notifyObservers()

Création du contrôleur

Page 20: mvc (5).ppt

Module UV JavaPage 20 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le Contrôleur

import java.util.Observer;

class CuisineControleur implements Observer{CommandeModele model;CuisineVue view;

//liste des contrôlesJButton nextPageButton;JButton removeButton;

CuisineControleur(CommandeModele inModel, CuisineVue inView){ model = inModel; model.addObserver(this);

view = inView;

//...

Page 21: mvc (5).ppt

Module UV JavaPage 21 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le Contrôleur

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();}} Appelée par

notifyObservers()

Page 22: mvc (5).ppt

Module UV JavaPage 22 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Références

Le code du modèle n’inclut pas de références aux classes GUI

L’utilisation de l’Observer permet de réaliser le découplage

GUI font une référence au Modèle– GUI est spécifique au Modèle– réutilisation

Page 23: mvc (5).ppt

Module UV JavaPage 23 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le Modèle

Nécessite d’être orienté métier pour supporter le couplage des vues et des controllers

Ne doit jamais contenir des informations concernant l’état de la GUI

Ne doit pas proposer de services spécifiques à des vues particulières et à des controllers

Page 24: mvc (5).ppt

Module UV JavaPage 24 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

View-Controller

Pas besoin d’être séparés– Document-View– Réduit la complexité

Page 25: mvc (5).ppt

Module UV JavaPage 25 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

La classe Observable (java.util)

Cette classe représente un objet observable par d ’autres, au niveau du modèle de données.

Un objet observable possède un ou plusieurs observateur, ajoutés par la méthode addObserver(Observer o)

Lorsque l ’interface d ’un objet observable est modifié, la méthode notifyObservers()

Page 26: mvc (5).ppt

Module UV JavaPage 26 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

La classe Observable (java.util)

La méthode notifyObservers permet de notifier les observateurs d ’une modification dans l ’état.

La modification est indiquée par la méthode hasChanged().

Une fois les observateurs notifiés, la méthode clearChanged permet d ’indiquer que l ’objet n ’est plus dans l ’état modifié.

Page 27: mvc (5).ppt

Module UV JavaPage 27 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

La classe Observable (java.util)

La méthode deleteObservers() permet de supprimer l ’ensemble des observateurs associés à l ’objet.

Une modification est reflétée par la méthode setChanged().

Une fois les observateurs notifiés, la méthode clearChanged permet d ’indiquer que l ’objet n ’est plus dans l ’état modifié.

Page 28: mvc (5).ppt

Module UV JavaPage 28 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

L ’interface Observer (java.util)

Une classe qui implémente l ’interface Observer, désire être notifiée des changements produits sur un objet observable.

Page 29: mvc (5).ppt

Module UV JavaPage 29 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

L ’interface Observer (java.util)

L ’unique méthode devant être implémentée est update(Observable o, Object arg).

La méthode update est appelée automatiquement lorsque l ’objet est notifié de la modification de l ’observable.

Page 30: mvc (5).ppt

Module UV JavaPage 30 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

L ’interface Observer (java.util)

Le premier paramètre est l ’objet qui notifie. Le second paramètre est un objet passé à la méthode

update, au moyen d ’un appel à la méthode notifyObserver(Object o)

Page 31: mvc (5).ppt

Module UV JavaPage 31 / 31

Deruelle LaurentCopyright © 2002 Laurent Deruelle

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. Popehttp://rain.create.ucsb.edu/~stp/CD-ROM/Documents/MVC%20Cookbook/mvc_cookbook_1.html

TWISTING THE TRIAD: The evolution of the Dolphin Smalltalk MVP application framework by Andy Bower, Blair McGlashanhttp://www.object-arts.com/Papers/TwistingTheTriad.PDF

MVP: Model-View-Presenter: The Taligent Programming Model for C++ and Javaby 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 Sundstedwww.javaworld.com/javaworld/jw-04-1998/jw-04-howto.html

The Model-View-Controller (MVC) FrameworkStingray Software

http://www.stingray.com/products/objtoolkitpro/mvc.cfm ModelViewControllerHistory

http://c2.com/cgi/wiki?ModelViewControllerHistory