SlideShare une entreprise Scribd logo
1  sur  31
Module Java Expert
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT

UV MVC
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

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 2 / 31
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]

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 séparant :
– les données
– la représentation des données
– 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 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

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 5 / 31
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

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 6 / 31
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.

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 7 / 31
Vue globale MVC
(suite)

Controllers
gèrent les
entrées de
l’utilisateur

Controller

View

Views
présentent
l’information à
l’utilisateur

Model
Models implémentent les fonctionnalités de l’application
Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 8 / 31
MVC
Avantages

Structure O-O propre
Vues Multiples d’un même
modèle
Vues Synchronized
views et controllers interchangeables
Look and Feel modifiable
Framework Potentiel

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Désavantages

Complexité accrue
mise à jours potentiellement
excessive
View/Controller fortement
liés au modèle

Module UV Java
Page 9 / 31
Architecture du modèle MVC

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 10 / 31
Références

Controller

View

View
Model

Controller
Model

Model

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 11 / 31
Communication MVC

1. Entrée
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 modèles 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 d’étude Hypothétique

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

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 14 / 31
McDonald’s

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

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 15 / 31
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

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 16 / 31
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);
}
}

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 17 / 31
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()
}

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

private void MiseAJourVue() {
//...model.getCommandeIterator()...
//...mettre à jour ce qui est vu à l’écran
}
}
Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Création du
contrôleur

Appelée par
notifyObservers()

Module UV Java
Page 19 / 31
Le Contrôleur

import java.util.Observer;
class CuisineControleur implements Observer{
CommandeModele model;
CuisineVue view;
//liste des contrôles
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 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()

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 21 / 31
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

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 22 / 31
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

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 23 / 31
View-Controller
Pas besoin d’être séparés
– Document-View
– Réduit la complexité

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 24 / 31
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()

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 25 / 31
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é.

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 26 / 31
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é.

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 27 / 31
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.

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 28 / 31
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.

Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 29 / 31
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)

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 Smalltalk80 System
by Glenn E. Krasner and Stephen T. Pope
http://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 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
Deruelle Laurent
Copyright © 2002 Laurent Deruelle

Module UV Java
Page 31 / 31

Contenu connexe

Tendances

Introduction à Android
Introduction à AndroidIntroduction à Android
Introduction à AndroidYoann Gotthilf
 
Spring par la pratique chap-7 - mvc
Spring par la pratique  chap-7 - mvcSpring par la pratique  chap-7 - mvc
Spring par la pratique chap-7 - mvcFlorent Breton
 
Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2teejug
 
Environnement java
Environnement javaEnvironnement java
Environnement javaInes Ouaz
 
Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.Mathias Seguy
 
Design patterns : résumé
Design patterns : résuméDesign patterns : résumé
Design patterns : résuméBoubker ABERWAG
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...ENSET, Université Hassan II Casablanca
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbcabderrahim marzouk
 

Tendances (19)

Introduction à Android
Introduction à AndroidIntroduction à Android
Introduction à Android
 
Spring par la pratique chap-7 - mvc
Spring par la pratique  chap-7 - mvcSpring par la pratique  chap-7 - mvc
Spring par la pratique chap-7 - mvc
 
Cours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observerCours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observer
 
Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Environnement java
Environnement javaEnvironnement java
Environnement java
 
Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.
 
Design patterns : résumé
Design patterns : résuméDesign patterns : résumé
Design patterns : résumé
 
Struts
StrutsStruts
Struts
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
Maven
MavenMaven
Maven
 
Tuto spring
Tuto springTuto spring
Tuto spring
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Support cours angular
Support cours angularSupport cours angular
Support cours angular
 

En vedette

La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et phpneuros
 
DDD17 - Web Applications Automated Security Testing in a Continuous Delivery...
 DDD17 - Web Applications Automated Security Testing in a Continuous Delivery... DDD17 - Web Applications Automated Security Testing in a Continuous Delivery...
DDD17 - Web Applications Automated Security Testing in a Continuous Delivery...Fedir RYKHTIK
 
Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)neuros
 
rapport_stage_issame
rapport_stage_issamerapport_stage_issame
rapport_stage_issameAMAL Issame
 
Introduction au webmapping au-dela de google maps
Introduction au webmapping  au-dela de google mapsIntroduction au webmapping  au-dela de google maps
Introduction au webmapping au-dela de google mapsVisionGÉOMATIQUE2012
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVCNathaniel Richand
 
Click and deploy - Continuous delivery avec Zend Server et Jenknins
Click and deploy - Continuous delivery avec Zend Server et JenkninsClick and deploy - Continuous delivery avec Zend Server et Jenknins
Click and deploy - Continuous delivery avec Zend Server et JenkninsSophie Beaupuis
 
Zf2++ Quelques idées sur l'avenir proche de ZF2
Zf2++ Quelques idées sur l'avenir proche de ZF2Zf2++ Quelques idées sur l'avenir proche de ZF2
Zf2++ Quelques idées sur l'avenir proche de ZF2Sophie Beaupuis
 
How Much Further Will Internet Stocks Fall? (Share Price Performance)
How Much Further Will Internet Stocks Fall? (Share Price Performance)How Much Further Will Internet Stocks Fall? (Share Price Performance)
How Much Further Will Internet Stocks Fall? (Share Price Performance)Mahesh Vellanki
 
Alphorm.com Formation le langage SQL
Alphorm.com  Formation le langage SQLAlphorm.com  Formation le langage SQL
Alphorm.com Formation le langage SQLAlphorm
 
Meetup CakePHP Amiens / 25 mars 2015
Meetup CakePHP Amiens / 25 mars 2015Meetup CakePHP Amiens / 25 mars 2015
Meetup CakePHP Amiens / 25 mars 2015Benjamin Lampérier
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging ChallengesAaron Irizarry
 

En vedette (15)

La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et php
 
DDD17 - Web Applications Automated Security Testing in a Continuous Delivery...
 DDD17 - Web Applications Automated Security Testing in a Continuous Delivery... DDD17 - Web Applications Automated Security Testing in a Continuous Delivery...
DDD17 - Web Applications Automated Security Testing in a Continuous Delivery...
 
Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)
 
MVC / Frameworks PHP
MVC / Frameworks PHPMVC / Frameworks PHP
MVC / Frameworks PHP
 
Client base de données en PHP5
Client base de données en PHP5Client base de données en PHP5
Client base de données en PHP5
 
rapport_stage_issame
rapport_stage_issamerapport_stage_issame
rapport_stage_issame
 
Introduction au webmapping au-dela de google maps
Introduction au webmapping  au-dela de google mapsIntroduction au webmapping  au-dela de google maps
Introduction au webmapping au-dela de google maps
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Click and deploy - Continuous delivery avec Zend Server et Jenknins
Click and deploy - Continuous delivery avec Zend Server et JenkninsClick and deploy - Continuous delivery avec Zend Server et Jenknins
Click and deploy - Continuous delivery avec Zend Server et Jenknins
 
Zf2++ Quelques idées sur l'avenir proche de ZF2
Zf2++ Quelques idées sur l'avenir proche de ZF2Zf2++ Quelques idées sur l'avenir proche de ZF2
Zf2++ Quelques idées sur l'avenir proche de ZF2
 
How Much Further Will Internet Stocks Fall? (Share Price Performance)
How Much Further Will Internet Stocks Fall? (Share Price Performance)How Much Further Will Internet Stocks Fall? (Share Price Performance)
How Much Further Will Internet Stocks Fall? (Share Price Performance)
 
REX Devops Docker
REX Devops DockerREX Devops Docker
REX Devops Docker
 
Alphorm.com Formation le langage SQL
Alphorm.com  Formation le langage SQLAlphorm.com  Formation le langage SQL
Alphorm.com Formation le langage SQL
 
Meetup CakePHP Amiens / 25 mars 2015
Meetup CakePHP Amiens / 25 mars 2015Meetup CakePHP Amiens / 25 mars 2015
Meetup CakePHP Amiens / 25 mars 2015
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging Challenges
 

Similaire à Mvc (5)

Similaire à Mvc (5) (20)

Pattern MVVM avec MVVM Light Toolkit
Pattern MVVM avec MVVM Light ToolkitPattern MVVM avec MVVM Light Toolkit
Pattern MVVM avec MVVM Light Toolkit
 
2 ModéLe Mvc
2 ModéLe Mvc2 ModéLe Mvc
2 ModéLe Mvc
 
Cours spring
Cours springCours spring
Cours spring
 
Prezentare ASP.Net.pptx
Prezentare ASP.Net.pptxPrezentare ASP.Net.pptx
Prezentare ASP.Net.pptx
 
Introducthion mvvm avec wpf
Introducthion mvvm avec wpfIntroducthion mvvm avec wpf
Introducthion mvvm avec wpf
 
Spring Ioc.pdf
Spring Ioc.pdfSpring Ioc.pdf
Spring Ioc.pdf
 
Chapitre_11-_React-Redux.pdf
Chapitre_11-_React-Redux.pdfChapitre_11-_React-Redux.pdf
Chapitre_11-_React-Redux.pdf
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
 
AngularJS
AngularJSAngularJS
AngularJS
 
MVVM de A à Z
MVVM de A à ZMVVM de A à Z
MVVM de A à Z
 
les style d'architecture
les style d'architecture les style d'architecture
les style d'architecture
 
Modele mvc
Modele mvcModele mvc
Modele mvc
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
 
Developpement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfDeveloppement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdf
 
Developpement dun site_web_developpement
Developpement dun site_web_developpementDeveloppement dun site_web_developpement
Developpement dun site_web_developpement
 
Technologies sur angular.pptx
Technologies sur angular.pptxTechnologies sur angular.pptx
Technologies sur angular.pptx
 
Cours 2 les composants
Cours 2 les composantsCours 2 les composants
Cours 2 les composants
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
Marzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvcMarzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvc
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 

Mvc (5)

  • 1. Module Java Expert CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV MVC
  • 2. 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 Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 2 / 31
  • 3. 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] Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 3 / 31
  • 4. 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 Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 4 / 31
  • 5. 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 Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 5 / 31
  • 6. 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 Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 6 / 31
  • 7. 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. Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 7 / 31
  • 8. Vue globale MVC (suite) Controllers gèrent les entrées de l’utilisateur Controller View Views présentent l’information à l’utilisateur Model Models implémentent les fonctionnalités de l’application Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 8 / 31
  • 9. MVC Avantages Structure O-O propre Vues Multiples d’un même modèle Vues Synchronized views et controllers interchangeables Look and Feel modifiable Framework Potentiel Deruelle Laurent Copyright © 2002 Laurent Deruelle Désavantages Complexité accrue mise à jours potentiellement excessive View/Controller fortement liés au modèle Module UV Java Page 9 / 31
  • 10. Architecture du modèle MVC Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 10 / 31
  • 12. Communication MVC 1. Entrée 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
  • 13. 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) Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 13 / 31
  • 14. Cas d’étude Hypothétique Le secteur technologique ralentit, impliquent que les dot-com s’effondrent, laissant de nombreux programmeurs sans travail ... Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 14 / 31
  • 15. McDonald’s La décision est prise de ne pas gaspiller ce talent ... Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 15 / 31
  • 16. 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 Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 16 / 31
  • 17. 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); } } Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 17 / 31
  • 18. 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() } Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 18 / 31
  • 19. 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 } } Deruelle Laurent Copyright © 2002 Laurent Deruelle Création du contrôleur Appelée par notifyObservers() Module UV Java Page 19 / 31
  • 20. Le Contrôleur import java.util.Observer; class CuisineControleur implements Observer{ CommandeModele model; CuisineVue view; //liste des contrôles 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
  • 21. 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() Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 21 / 31
  • 22. 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 Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 22 / 31
  • 23. 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 Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 23 / 31
  • 24. View-Controller Pas besoin d’être séparés – Document-View – Réduit la complexité Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 24 / 31
  • 25. 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() Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 25 / 31
  • 26. 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é. Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 26 / 31
  • 27. 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é. Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 27 / 31
  • 28. 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. Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 28 / 31
  • 29. 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. Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 29 / 31
  • 30. 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) Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 30 / 31
  • 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 Smalltalk80 System by Glenn E. Krasner and Stephen T. Pope http://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 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 Deruelle Laurent Copyright © 2002 Laurent Deruelle Module UV Java Page 31 / 31