Contrôle Machine n°2

Les seuls documents papier autorisés sont vos notes de cours, de travaux dirigés et de travaux pratiques. Les documents électroniques autorisés sont les documents présents sur les machines de l'IUT et dont vous êtes l'unique auteur (ainsi que les éventuels documents de cours). En dehors de la machine qui vous est attribuée et de votre matériel de composition (crayons, stylos, feuilles de brouillon…), aucun matériel n'est autorisé.

La documentation de l'API Java doit être consultée uniquement en version locale.

Vos réponses doivent correspondre aux exemples d'exécution. Sauf indication contraire, vous pouvez supposer que les données fournies sur la ligne de commande ou l'entrée standard respectent les restrictions de l'énoncé et ne nécessitent donc pas de contrôle.

Toutes les réponses devront prendre la forme de fichiers source en langage Java ou de fichiers StarUML. Suivez scrupuleusement les instructions de ce sujet. Soyez rigoureux !

Dans le répertoire dédié au module (normalement, ~/DEV/DEV2.1/), créez un nouveau répertoire nommé CM2. Faites-en votre répertoire courant et placez-y tous les fichiers générés durant l'épreuve. Le contenu de ce répertoire peut être soumis dans votre dépôt git local, mais pas poussé vers votre dépôt global avant l'heure officielle de fin de l'épreuve.

Attention Votre nom complet devra être mentionné sur la première ligne de chaque fichier Java (en commentaire). Pour les fichiers StarUML, Il devra être indiqué dans la propriété author de la racine du modèle.

Effacez tous les fichiers temporaires et ne gardez que les fichiers d'extension .java (attention à ne pas effacer vos fichiers source !). Placez-vous ensuite dans le répertoire immédiatement au dessus de CM2 et archivez votre travail, par exemple par la commande :

bob@box:DEV2.1$ tar czvvf dummy_CM2.tar.gz CM2
Remplacez le mot dummy par votre login. Téléversez l'archive ainsi obtenue à cet endroit.

  1. Prototype. (5 points) Écrivez un programme qui prend sur sa ligne de commande un nom que l'on suppose formé de lettres latines non accentuées. Il devra créer et remplir un fichier portant le nom choisi avec l'extension .java. Vous choisirez le contenu de sorte que le fichier compile sans erreur (mais le résultat ne sera pas nécessairement exécutable).

    En cas de problème lors de l'accès au fichier, un message en français adapté aux circonstances devra être envoyé vers la sortie sur erreur. Spécifiquement dans le cas d'un refus d'écriture ou de fermeture, le programme devra réessayer 3 fois avant d'abandonner son objectif.

  2. Puzzle. (5 points) Une app sur téléphone permet de résoudre des puzzles et de comparer ses performances avec les autres joueurs.

    Le joueur a le choix de jouer avec un ancien puzzle ou avec le puzzle du jour. Comme son nom l'indique, le puzzle du jour n'est disponible qu'une fois par jour et il doit être obtenu auprès d'un serveur global.

    Lorsque le joueur termine un puzzle, son temps est envoyé au serveur. L'app affiche alors un graphe qui situe la performance parmi tous les temps enregistrés pour ce puzzle sur le serveur (tous joueurs confondus).

    Dessinez le diagramme de cas d'utilisation pour cette app.

  3. Prudence. (5 points) On considère la classe définie dans le fichier Prudence.java :

    import java.io.File;
     
    public class Prudence {
      public static void main(String[] args) {
        if (args.length == 0) {
          System.err.println("usage : java Prudence <path list>");
          System.exit(1);
        }
        String[] paths = args[0].split(":");
        for(String path : paths) {
          File f = new File(path);
          if (!f.exists() || !f.isDirectory()) {
            System.err.println("invalid path (" + path + ")");
          }
        }
      }
    }

    Faites le diagramme de classes de ce programme. Indiquez pour toutes les classes seulement les membres mentionnés dans le code. Les tableaux sont des classes, mais vous pouvez les ignorez dans cette question. N'oubliez pas de montrer les associations entre les classes.

  4. Processus. (5 points) Un programme contient les classes Modele.java,

    public class Modele {
      private static final int MAX = 5;
      private int compte;
      public void plus() {
        this.compte = Math.min(this.compte + 1, Modele.MAX);
      }
      public int getCompte() {
        return this.compte;
      }
    }

    Vue.java,

    import javax.swing.JComponent;
    import java.awt.Graphics;
     
    public class Vue extends JComponent {
      private Modele modele;
      public Vue() {
        this.modele = new Modele();
        this.addMouseListener(new Controleur(this.modele));
      }
      @Override
      protected void paintComponent(Graphics g) {
        int x = this.getWidth()/7;
        int y = this.getHeight()/3;
        g.drawRect(x, y, x*5, y);
        g.fillRect(x, y, x*this.modele.getCompte(), y);
      }
    }

    et Controleur.java.

    import java.awt.event.*;
     
    public class Controleur extends MouseAdapter {
      private Modele modele;
      public Controleur(Modele m) {
        this.modele = m;
      }
      @Override
      public void mouseClicked(MouseEvent e) {
        this.modele.plus();
        e.getComponent().repaint();
      }
    }

    Dessinez le diagramme de séquence qui décrit ce qui se passe quand l'utilisateur clique sur la vue. Vous pouvez vous baser sur le fichier processus.mdj qui contient déjà le diagramme de classes nécessaire.

    Attention On rappelle que la méthode repaint a pour conséquence (après un petit délai) de déclencher la méthode paintComponent.

retour à la page d'accueil

retour au sommet