LOG2710   LOG2710, Analyse et conception d'interfaces utilisateurs
Automne 2006
format impression
 

Quiz

  1. Identifiez, décrivez et justifiez comment et pourquoi vous appliqueriez les trois méthodes énoncées ci-dessous pour un projet de conception interface de contrôle de magnétoscope pour bien préciser les exigences des utilisateurs :
    • Analyse de la tâche
    • Groupe de discussion
    • Sondage
  2. Votre association d'étudiants vous mandate pour refaire l'interface de leur site.  On pense, par exemple, à améliorer le service de vente et d'achats de livres usagés.  Quelles activités leur proposeriez-vous pour les aider à redéfinir les services du site et l'interface.  Justifiez votre réponse. 
  3. Luc et Jeanne ne s'accordent pas quant à l'avantage de fournir un "défaire" (undo) généralisé pour leur application de calendrier électronique.  Cette fonction serait très lourde à supporter pour toutes les actions possible.  Luc affirme que, comme le principal avantage est de permettre de préserver le travail de l'utilisateur, il serait préférable de ne l'offrir que pour quelques fonctions critiques seulement.  Jeanne affirme au contraire que si on doit l'offrir, il faut l'offrir partout pour être consistant, ou ne pas l'offrir et simplement avoir des confirmation pour les actions critiques.  Si c'est trop coûteux, elle propose de demander une confirmation pour chaque action critique.  Discutez du point de vue de chacun et de ce que vous proposeriez. 
  4. Lors de la conception d'une interface usager, est-il préférable d'utiliser un contraste de couleurs ou un contraste d'intensité? Pourquoi?
  5. Expliquez le principe de l'autonomie
  6. Décrivez et expliquez les information que l'on cherche à colliger à travers l'inspection cognitive, ainsi que les questions spécifiques à poser.
  7. Laquelle des deux fenêtres de Mapedit suivantes comporte la charge cognitive la plus importante (à compléter)?
  8. Votre entreprise veut tester son application de gestion des comptes clients. Elle vous demande de la conseiller quant au nombre d'utilisateurs à impliquer pour les tests.
  9. Quels sont les mesures qu'elle devrait prendre?

Volet développement

  1. Votre entreprise hésite à adopter une approche Web ou une approche Wimp pour le développement de la consultation des dossier clients. Donnez-lui les avantages et inconvénients de chaque approche selon les caractéristiques recherchées de l'application.
  2. Quels sont les avantages d'utiliser la technologie JAVAX dans une application web?
  3. Vous devez écrire une application client-serveur dont l'interface devra s'afficher sur une plate-forme sans-fil avec une résolution d'écran de 320x320 et sur une plate-forme de PC avec des écrans à plus haute résolution, typiquement 1280x1024.

    Expliquez les différentes approches et discutez des avantages et inconvénients de chacune :

    1. UIML (User Interface Markup Language)
    2. Génération de pages HTML avec XSL/XSLT
    3. Sous la forme d'une applet pour chaque plateforme
  4. Indiquez parmi les choix suivants lesquels représentent des entités pouvant générer des événements :
    1. Le système d'exploitation
    2. Le système de fenêtrage
    3. Des instruction du programme lui-même
  5. Pour chacune des situations suivantes, déterminez si le serveur graphique, le gestionnaire de fenêtres, ou si les deux interviennent.  Expliquez brièvement votre réponse. 
    1. Le tracage d'un cercle dans une fenêtre par l'application
    2. L'iconisation des fenêtres du "desktop" par une action de l'utilisateur
    3. La transmission d'un interruption matérielle (interrupt) comme un événement à l'application
    4. Le changement de "focus" lorsque la souris passe d'une fenêtre à l'autre (sans cliquer)
  6. Pratiquement la totalité des systèmes de fenêtrage modernes nécessitent que les fenêtres définissent une fonction de redessinage (redraw) ou (repaint)).  Toutefois, il existe une alternative à cette approche.  Quelle est-elle?
  7. Vrai ou faux? Expliquez au besoin. 
    • Avec X, le mécanisme des ressources permet de changer le nom des boutons lors de l'invoquation, sans avoir à recompiler l'application
    • Swing permet de développer des applications multi-plateformes par l'adoption de l'architecture client-serveur
    • La fonction d'aiguillage (dispatching) d'événement est associée au controlleur dans le modèle MVC
    • Par rapport au modèle MVC, le client dans l'architecture client-serveur de X représente le "view", tandis que le serveur représente le "controller"
    • X-Windows utilise une architecture client-serveur programmable
    • La technique de fonction de rappel (callback) permet d'implanter dynamiquement la communication entre objets
    • Une application peut garder le contrôle de la souris et du clavier même si celle-ci sort du rectangle de la fenêtre
    • Le gestionnaire de fenêtre contrôle le comportement du "focus" (entrées du clavier)
    • Un des avantages principaux de l'architecture client-serveur est la portabilité entre systèmes d'exploitation
    • Avec Java Swing, le filtrage des événements se fait par le mécanisme de surcharge des méthodes
    • Le mécanisme de "signals and slots" de Qt permet de remplacer celui des fonctions de rappel de différentes boîtes à outils. 
  8. Commentez le code suivant :
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class ComboBoxDemo extends JPanel
                              implements ActionListener {
        JLabel picture;
    
        public ComboBoxDemo() {
            super(new BorderLayout());
    
            String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
    
    
            // ****************
            // ****************
    
            JComboBox petList = new JComboBox(petStrings);
            petList.setSelectedIndex(4);
            petList.addActionListener(this);
            //Set up the picture. 
            picture = new JLabel();
            picture.setFont(picture.getFont().deriveFont(Font.ITALIC));
            picture.setHorizontalAlignment(JLabel.CENTER);
            updateLabel(petStrings[petList.getSelectedIndex()]);
            picture.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));
    
            //The preferred size is hard-coded to be the width of the
            //widest image and the height of the tallest image + the border. 
            //A real program would compute this. 
            picture.setPreferredSize(new Dimension(177, 122+10));
    
            //Lay out the demo. 
            add(petList, BorderLayout.PAGE_START);
            add(picture, BorderLayout.PAGE_END);
            setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
        }
    
    
        // ****************
        // ****************
    
        public void actionPerformed(ActionEvent e) {
            JComboBox cb = (JComboBox)e.getSource();
            String petName = (String)cb.getSelectedItem();
            updateLabel(petName);
        }
    
        protected void updateLabel(String name) {
            ImageIcon icon = createImageIcon("images/" + name + ".gif");
            picture.setIcon(icon);
            picture.setToolTipText("A drawing of a " + name.toLowerCase());
            if (icon != null) {
                picture.setText(null);
            } else {
                picture.setText("Image not found");
            }
        }
    
        /** Returns an ImageIcon, or null if the path was invalid.   */
        protected static ImageIcon createImageIcon(String path) {
            java.net.URL imgURL = ComboBoxDemo.class.getResource(path);
            if (imgURL != null) {
                return new ImageIcon(imgURL);
            } else {
                System.err.println("Couldn't find file: " + path);
                return null;
            }
        }
    
    
        // ****************
        // ****************
        // ****************
    
        private static void createAndShowGUI() {
    
            // ****************
    
            JFrame.setDefaultLookAndFeelDecorated(true);
    
    
            // ****************
    
            JFrame frame = new JFrame("ComboBoxDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    
            // ****************
    
            JComponent newContentPane = new ComboBoxDemo();
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane);
    
    
            // ****************
    
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
    
            // ****************
            // ****************
            // ****************
    
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }