UE Projet Logiciel Java 1.5
Transcription
UE Projet Logiciel Java 1.5
USTL Licence Informatique 2006–2007 UE Projet Logiciel Java 1.5 Utilisez java 1.5 : • Allez dans http://intranet.fil.univ-lille1.fr/INTRANET/LOGICIELS/java. html et lisez la remarque concernant l’utilisation de java 5 dans les salles de TP. • Sous Eclipse, allez dans Windows/Preferences.../Java/Installed JREs ajoutez la version 1.5 (si nécessaire) et sélectionnez la . Exercice 1 : Enum Q 1 . Créez le type énuméré ArcEnCiel dont les valeurs sont les couleurs de l’arc-en-ciel : rouge, orange, jaune, vert, bleu, indigo, violet. Q 2 . Test : créez un main qui • si un argument est fourni (chaı̂ne de caractères), initialise une référence a de type ArcEnCiel avec l’objet ArcEnCiel dont l’identificateur correspond à cette chaı̂ne si il existe, dans le cas contraire ou si aucun argument n’est fourni, on initialise a avec la valeur correspondant à orange. • initialise une référence avec la valeur qui suit a dans le type énuméré (avec violet suivi de rouge) • affiche toutes valeurs définies dans ce type Q 3 . Définissez un type énuméré Jour (lundi, mardi, etc.) dont les valeurs disposent d’un attribut travaille qui indique si ce jour est ou non un jour travaillé, sa valeur est à true pour samedi et dimanche et à false pour les autres jours. Les valeurs de ce type disposent de deux méthodes, l’une, appelée lendemain, renvoie le jour suivant dans la semaine, l’autre, appelée estTravaille, permet de savoir si le jour est ou non travaillé. Q 4 . Créez un main pour tester ce type : à partir d’un nom de jour passé en paramètre (dans le même esprit que la question 2) on affiche à partir de ce jour les 7 jours de la semaine en précisant si ils sont ou non travaillé. Exercice 2 : java.util.Scanner Q 1 . Ecrivez un main qui lit sur l’entrée standard une chaı̂ne qui respecte le motif suivant (Voir la documentation de next(Pattern).) : • commence par t ou T • est composée ensuite d’un nombre quelconque de caractères • termine par leon La chaı̂ne lue est alors affichée, si le motif n’est pas respecté un message l’indique. Q 2 . Ecrivez un méthode qui demande la saisie d’un entier compris entre 0 et n (passé en paramètre) sur l’entrée standard, si la saisie n’est pas correcte (pas un entier ou en dehors des bornes), la demande de saisie est répétée. La méthode renvoie la valeur de l’entier accepté saisi. NB : voir dans la javadoc de Scanner la remarque : When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method. et étudiez les méthodes skip. Q 3 . Utilisez ce qui vient d’être fait pour saisir un entier correspondant à un numéro de jour dans la semaine et afficher le symbole représentant ce jour (ainsi pour 2 on aura l’affichage de mercredi). Exercice 3 : Generics Avant de commencer, récupérez les quelques fichiers fournis sur le portail. Pour les questions 2 à 5, après avoir compléter le code des classes tel que demandé dans les exercices. Vous décommenterez les lignes précédées du commentaire "NE COMPILE PAS", vous vérifierez alors que votre programme ne compile effectivement pas et chercherez à comprendre pourquoi. Si il compile, c’est que la réponse à la question est incorrecte. Q 1 . Utilisation de java.util On considère des groupes d’étudiants. Les étudiants sont représentés par la classe Etudiant fournie et un groupe contient une liste d’étudiants. A chaque étudiant du groupe est associé une liste de notes (des doubles), cette information est gérée par une Map dont les clés sont le NIP des étudiants et les valeurs les listes de notes. On doit pouvoir ajouter un étudiant à un groupe, afficher la liste des étudiants du groupe, ajouter une note à un étudiant du groupe à partir de son NIP (une exception est levée si l’étudiant n’est pas dans le groupe), connaı̂tre la moyenne d’un étudiant et la moyenne du groupe, afficher la liste des étudiants avec leurs moyennes. Ecrivez la classe Groupe en exploitant les aspects génériques des collections et Map de la 1.5, ainsi que les facilités de l’auto-boxing et la syntaxe “à la for each”. Q 2 . Méthode générique Ecrire un objet ListChoser qui possède une méthode qui : • affiche la liste des valeurs des éléments de la liste en leur associant un numéro d’ordre, 0 correspodant à “aucun”, 1 au premier élément de la liste, 2 au second, etc. • demande de saisir une valeur entre 0 et le nombre d’éléments de la liste (inclus), et répète cette demande tant que la saisie est incorrecte, • renvoie l’élément de la liste choisi (pas son indice) ou null si 0 avait été choisi. Dans cet exercice, la liste est évidemment typée, mais son type n’est pas connu initialement, et le type de retour est du type des éléments de la liste. Il est donc nécessaire de rendre la méthode générique par rapport à ce type. Testez (vous pouvez utiliser et compléter les classes fournies, les classes de Legume et Fruit vous sont fournies pour les tests). Q 3 . Créez une classe au comportement similaire à la précédente mais qui ne permet de choisir que des objets de type Legume et donc pas les Pomme. Testez. Q 4 . Créez une classe au comportement similaire à la précédente mais qui ne permet de choisir que des objets de type Legume qui de plus sont Cloneable et donc pas les Rutabaga. Testez. Q 5 . Type générique On s’intéresse à la modélisation de “ramasseur/poseur”. Ces êtres étranges ne peuvent ramasser ou déposer que des objets d’un type donné. On trouve ainsi des ramasseurs de carottes (et exclusivement de carottes) ou de choux-fleurs ou encore de pommes. Ces êtres ne peuvent posséder qu’un seul objet du type qu’ils acceptent à la fois. Ils peuvent donc prendre un tel objet (passer en paramètre) ou le déposer ou encore le donner à un autre ramasseur, du même type qu’eux bien sûr. Il existe égalemetn un accesseur sur l’objet qu’il possède Créez cette classe Ramasseur et faites des tests. Il faut ici créer un type paramétré par le type des objets que le personnage peut ramasser, il aura un attribut de ce type et les opérations qu’il effectue dépendent de ce type.