20
MVC Counter ex. LOG2420 — Analyse et conception d’interfaces utilisateur Mod` ele MVC Michel C. Desmarais enie informatique et logiciel ´ Ecole Polytechnique de Montr´ eal Automne, 2017 (version 29 octobre 2017) LOG2420 — Analyse et conception d’interfaces utilisateur — Mod` ele MVC 1/20

LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

LOG2420 — Analyse et conception d’interfacesutilisateur

Modele MVC

Michel C. Desmarais

Genie informatique et logicielEcole Polytechnique de Montreal

Automne, 2017(version 29 octobre 2017)

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 1/20

Page 2: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Modele MVC

1 Modele MVC

2 Un exemple en Java – Le “Counter exemple”

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 2/20

Page 3: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Architecture modele-vue-controleur

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 3/20

Page 4: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Exemple en gestion de projetVue Gantt

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 4/20

Page 5: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Exemple en gestion de projetVue Taches

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 5/20

Page 6: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Exemple en gestion de projetVue Ressources

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 6/20

Page 7: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Architecture modele-vue-controleurDetails

Vue

● Rendu du modèle● Demande mise à jour du modèle● Transmets au contrôleur actions de 

l'utilisateur

● Établit la correspondance des actions utilisateur à la mise à jour du modèle

● Sélectionne la vue

Contrôleur

Modèle● Encapsule l'état de l'application● Répond aux requêtes d'état● Expose la fonctionnalité de 

l'application● Avertit la vue de changements

Sélectionner la vue

Actions de l'utilisateur

Changer l'état

Interrogation d'état

Avis de changement

http://java.sun.com/blueprints/patterns/MVC­detailed.htmlInvocation de méthode

Événement

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 7/20

Page 8: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Modele MVC

1 Modele MVC

2 Un exemple en Java – Le “Counter exemple”

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 8/20

Page 9: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Le “Counter Example”

Le programme Java CounterDemo 1 illustre deux vues dumodele du compteur

une vue “console”une seconde ou le compteur s’affiche dans une fenetre

1. Cet exemple est adapte de http://courses.csail.mit.edu/6.170/

old-www/2006-Fall/lectures/lectures.html.LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 9/20

Page 10: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Modele-vue-controleur de l’exemple “Counter demo”

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 10/20

Page 11: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Counter.java

public class Counter {int value = 0 ;CounterObserver observer ;

public void setObserver(CounterObserver co) {observer = co ;co.value() ;

}public void increment() {

value++ ;observer.incremented() ;

}public void decrement() {

value– – ;observer.decremented() ;

}public int value() { return value ; }

}LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 11/20

Page 12: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Modele-vue-controleur de l’exemple “Counter demo”

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 12/20

Page 13: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Control.javaInitialisation

public class Control extends JPanel implements ActionListener {protected JButton b1, b2, b3, b4 ;CounterObserver screen, console ;protected Counter counter ;Worker worker ;

public void initialize() {b1 = new JButton("Incremente") ;b1.setActionCommand("increment") ;b1.addActionListener(this) ;b1.setToolTipText("Incremente le compteur") ;

//Ajouter les composants a ce conteneur en utilisant lesFlowLayout par defaut

add(b1) ;}

}}LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 13/20

Page 14: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Control.javaGestion des evenements

public class Control extends JPanel implements ActionListener {protected JButton b1, b2, b3, b4 ;CounterObserver screen, console ;protected Counter counter ;Worker worker ;

(...)public void actionPerformed(ActionEvent e) {

if ("increment".equals(e.getActionCommand())) {counter.increment() ;} else if ("decrement".equals(e.getActionCommand())) {counter.decrement() ;} else if ("screen".equals(e.getActionCommand())) {counter.setObserver(screen) ;} else if ("console".equals(e.getActionCommand())) {counter.setObserver(console) ;}

}(...)}LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 14/20

Page 15: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Modele-vue-controleur de l’exemple “Counter demo”

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 15/20

Page 16: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

CounterObserver.java

interface CounterObserver {public void value() ;public void incremented() ;public void decremented() ;

}

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 16/20

Page 17: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

ConsoleObserver.java

class ConsoleObserver implements CounterObserver {Counter counter ;ConsoleObserver(Counter c) {

counter = c ;}public void value() {

System.out.print("Counter Value = ") ;System.out.print(counter.value()) ;System.out.print("\n") ;

}public void incremented() {

System.out.print("Counter Incremented, New Value =") ;System.out.print(counter.value()) ;System.out.print("\n") ;

}public void decremented() {

System.out.print("Counter Decremented, New Value =") ;System.out.print(counter.value()) ;System.out.print("\n") ;

}}

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 17/20

Page 18: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

ScreenObserver.java

class ScreenObserver implements CounterObserver {Screen screen ;Counter counter ;... /* constructeur */public void value() {

String text = Integer.toString(counter.value()) ;screen.setText(text) ;

}public void incremented() {

String text = Integer.toString(counter.value()) ;screen.setText(text) ;

}public void decremented() {

String text = Integer.toString(counter.value()) ;screen.setText(text) ;

}}

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 18/20

Page 19: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Le MVC et la realite

Tire d’un article sur l’architecture de Swing :

“We quickly discovered that this split didn’t work well in practical termsbecause the view and controller parts of a component required a tightcoupling (for example, it was very difficult to write a generic controllerthat didn’t know specifics about the view). So we collapsed these twoentities into a single UI (user-interface) object,” (Java SwingArchitecture,www.oracle.com/technetwork/java/architecture-142923.html)

La solution appliquee en pratique :

Le controleur et la vue sont souvent regroupes

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 19/20

Page 20: LOG2420 | Analyse et conception d’interfaces utilisateurcours.polymtl.ca/MDesmarais/log2420/Seances/GUI/mvc.pdf · MVC Counter ex. Rappel des concepts L’architecture MVC vise

MVC Counter ex.

Rappel des concepts

L’architecture MVC vise a separer le modele de la vue et ducomportement

Le patron “observateur” (observer, apparente au listener enJava) est a la base de la modularite et permet de changer devue dans l’exemple presente

LOG2420 — Analyse et conception d’interfaces utilisateur — Modele MVC 20/20