Cours
d'Interfaces Homme-Machine
Polytech'Grenoble & UFR-IMA
F. Jambon - Université J. Fourier
TP
: Système de commande de Pizza en
Seeheim
Le but de ces travaux pratiques
est de réaliser un système de commande de pizzas
en implantant le modèle d'architecure logicielle Seeheim vu
en cours. D'après une idée
originale de
S. Laborie (INRIA Montbonnot).
Buts
pédagogiques :
Réalisation d'une interface homme-machine complexe
(gestion de plusieurs panels, groupes de boutons et une
ScrollBar), implantation du modèle d'architecture
Seeheim, utilisation de la classe Vector.
Sujet
Une
société souhaite disposer d'un système
de commande de pizza. Avec ce système, l'utilisateur choisit en
sélectionnant lui-même la ou les pizza(s) qu'il souhaite
commander. Il peut par exemple vouloir choisir un type de pizza
particulier (ex. Romaine, Reine, etc.), une taille
particulière (ex. Grande, Moyenne, Petite), des
suppléments particuliers (ex. Crème, Fromage). A
tout
moment, il peut aussi visualiser sa liste de commande (son panier),
le nombre de pizza(s) commandée(s) ainsi que le prix total
de sa
commande. Enfin, un bouton "Commander" lui permet de passer
effectivement sa commande.
Le système de
commande de Pizza
Découpage en
modules selon l'architecture Seeheim
Votre application doit
être réalisée selon le
modèle d'architecture logicielle Seeheim. Pour cela vous
devez répartir le code en quatre modules distincts :
- Le module Application
: ce module implante le noyau fonctionnel minimal de l'application. Ce
module est représenté par deux classes, une classe
"Pizza" qui encapsule le concept de pizza et permet de calculer son
prix. La seconde classe est la classe "Commande" qui gère la
liste des pizzas. Cette dernière est implantée à
l'aide d'un "Vector"
contenant des objets "Pizza".
- Le module Interface
Application : ce module implante
les méthodes permettant de mettre à disposition
du Contrôleur de Dialogue les fonctionnalités du
module Application. Il est implanté sous forme d'une seule
classe
et dispose de nombreuses méthodes permettant l'accès aux
informations de la commande et des actions sur cette commande. Ces
methodes permettront notamment d'ajouter une pizza à la
commande, d'effacer la commande, de retirer la dernière pizza
ajoutée, de calculer le prix de la commande, d'obtenir
l'ensemble de la commande (sous forme de chaîne de
caractères), mais aussi de calculer le prix d'une pizza afin de
remettre à jour l'affichage. Bien entendu, ce module fait appel
aux modules Pizza et Commande pour obtenir ces informations.
- Le module Contrôle
du Dialogue : ce module
gère le dialogue homme-machine. C'est ce module qui prend
l'initiative de déclencher, par exemple, la mise à
jour de la liste de commande à partir des données
fournies par la Présentation et de demander à
cette Présentation d'afficher le résultat. Ce
module ne doit en aucun cas faire appel à des objets de la
boîte à outils graphique, ni à ceux du noyau
fonctionnel. Il doit passer par
l'intermédiaire de la Présentation ou de l'Interface
Application pour cela. Il
dispose donc de méthodes qui sont appelées par la
Présentation suite aux actions de l'utilisateur :
- l'utilisateur fait un choix avec l'un des boutons radio :
demandeChoix()
l'utilisateur appuie sur
le bouton "Ajouter la pizza" : demandeSelection()
<> l'utilisateur appuie
sur le bouton "Effacer dernier" : demandeEffacerDernier()
> - l'utilisateur appuie sur
le bouton "Effacer liste" :
demandeEffacerListe()
- l'utilisateur appuie sur
le bouton "Commander" :
demandeCommander()
- l'utilisateur
désire quitter l'application :
demandeQuitter()
- Le module Présentation
: ce module gère l'affichage graphique et la
récupération des événements
déclenchés par l'utilisateur. Il met
également à disposition du Contrôleur
de Dialogue des méthodes d'accès et de
modification des données entrées par l'utilisateur ou
affichées vers l'utilisateur :
- lecture des
caractéristiques de la pizza :
getTypePizza(),
getTaillePizza(),
getSupplementCreme() et getSupplementFromage()
- écriture du prix de la pizza choisie, de
la liste des commandes, du nombre de pizza, du prix total et de
la conclusion de la commande :
setPrixPizza(...),
setListeDeCommande(...),
setNbPizza(...),
setPrixTotal(...) et afficheCommande()
Implantation de l'affichage
Implantez l'affichage de
l'interface homme-machine. Pour l'instant, ne vous souciez pas de la
réaction de l'interface aux événements
utilisateur. Avant de vous lancer dans l'écriture du code,
réfléchissez au placement relatif des divers
widgets dans la fenêtre : certains doivent être
alignés, d'autres placés les uns au-dessus des
autres, etc. En Java, il vous est nécessaire de
créer une hiérarchie de JPanels, avec, pour
chacun de ces JPanels un LayoutManager adapté à
la politique de placement des widgets à
l'intérieur ce celui-ci.
L'interface homme-machine de l'application est composée ainsi
:
- en haut sont situés les choix possibles de pizzas avec
leurs suppléments, le prix de la pizza choisie, ainsi qu'un
bouton permettant d'ajouter la pizza choisie à la commande
- au centre est situé le récapitulatif de la commande
avec deux boutons permettant d'effacer la dernière pizza
ajoutée ou toute la commande (cas de l'extension)
- en bas est situé le montant total de la commande avec le
nombre total de pizza commandées, ansi qu'un bouton permettant
d'envoyer effectivement la commande
Implantation de la
réaction aux événements
Dans un premier temps,
implantez la réaction aux événements
de manière à ce que l'utilisateur puisse simplement
ajouter
une pizza au panier et passer sa commande. Prenez également
en compte l'événement qui est
déclenché lorsque l'utilisateur clique sur le
bouton de fermeture de la fenêtre. En Java, il est possible
de quitter l'application par un appel système "System.exit(0)
".
C'est le module Contrôle du Dialogue qui est
chargé de quitter l'application.
Extension
Dans un second temps, modifiez
le programme pour que l'utilisateur puisse maintenant faire des
modifications sur la liste de commande, c'est-à-dire retirer la
dernière pizza ajoutée ou bien effacer l'ensemble de la
commande.
Documents à produire
- Le code source commenté
du logiciel réalisé
- Le Diagramme de Séquence selon la syntaxe UML des appels
entre les modules lorsqu'un
utilisateur effectue une commande de deux Pizzas différentes.