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 :

  1. 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".
  2. 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.
  3. 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 :
  4. 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 :

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 :

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