MVC (Model View Controller) =============================================================================== -> Jusqu'à maintenant, dans nos programmes avec interface graphique, on place tout (ou à peu près) dans la même classe (éléments graphiques, données, listeners). -> Cette technique rend la gestion des programmes avec interface graphique rapidement lourde et confuse. -> Exemple où une classe fait tout le travail : class AppTP1 extends Frame implements KeyListener, MouseListener, etc.. { Vector v; etc... } -> En programmation OOP, on veut généralement qu'une classe fasse une et une seule tâche. La technique MVC établit un cadre de programmation pour une gestion efficace des interface graphique. -> Un programme est divisé en 3 modules (une classe pour chaque module). o Model : Contient les données du programme et les traitements associés à ces données. o View : Module qui s'occupe de l'affichage du GUI o Controlleur : Gestion des événements de l'interface graphique. ----> View ----------- / | | / | v / | Controller / | | | <--------- | Model | <---------------------- -> Init : - Le programme démarre toujours à partir de la class View - La classe View crée les différents éléments graphique du programme - La class View crée une instance du Model - Le Model initialise les données du programme - La class View crée une instance du Controller - La class View établit les liens d'écoute -> Exec : - Le Controller reçoit un événement - Le Controller appel des méthodes de Model pour modifier les données en conséquences - Si la modification des données demande un réaffichage, le Model appel des méthodes de la vue pour forcer un réaffichage. -> Un exemple : import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class CompteurView extends Applet{ // instance variables private Compteur aModel; private CompteurController aController; private Button bumpButton,razButton; public void init(){ bumpButton = new Button("++"); add(bumpButton); razButton = new Button("RAZ"); add(razButton); aModel = new Compteur(this); aController = new CompteurController(aModel,bumpButton,razButton); } public void paint(Graphics g) { g.drawString("Valeur="+aModel.getValue(),20,50); } } class Compteur { private int valeur = 0; CompteurView myView; Compteur(CompteurView aView) { myView = aView; } public void bump() { valeur++; myView.repaint(); } public void reset() { valeur=0; myView.repaint(); } public int getValue() { return valeur; } } class CompteurController implements ActionListener{ Compteur model; private Button bumpButton,razButton; CompteurController(Compteur model, Button bumpButton,Button razButton){ this.bumpButton = bumpButton; this.razButton = razButton; bumpButton.addActionListener(this); razButton.addActionListener(this); this.model = model; } public void actionPerformed(ActionEvent event) { String actionCommand = ((Button)event.getSource()).getActionCommand(); if(actionCommand.equals(bumpButton.getActionCommand())) model.bump(); if(actionCommand.equals(razButton.getActionCommand())) model.raz(); } } -> Plus d'exemples : http://www.iro.umontreal.ca/~nie/IFT1020/MVC/