# ATELIER PROFESSIONNEL JSP [NOV-DEC 2003] --- SUJET D'EXERCICE # # INNER CLASSES, COLLECTIONS, DESIGN PATTERNS: SINGLETON, FACTORY, LAZY # ---------------------------------------------------------------------------- MODALITES DE RENDU ---------------------------------------------------------------------------- - Répertoire : ~/rendu/ap/jsp/1120-ic-col-dp - Fichiers : User.java - Droits : 700 pour les répertoires, 600 pour les fichiers - Date : vendredi 21/11/2003 à 14:00 ---------------------------------------------------------------------------- Conseils ---------------------------------------------------------------------------- - Prenez le temps de lire *tout* le sujet avant de commencer. - La Javadoc ainsi que les PDF de référence JSP/Servlet sont vos amis. ---------------------------------------------------------------------------- Description générale ---------------------------------------------------------------------------- L'objectif du mini-projet consiste à réaliser une classe User, déclarée comme appartenant au paquet org.insia.workshop.mp, qui dispose des caractéristiques suivantes : - Champs : prénom, nom, login, mot de passe. Tous de type String. - Accès aux champs uniquement via des accesseurs. Ces derniers interdissent l'utilisation de chaînes vides pour le login, le nom et le prénom. - Classe non extensible. - User implémente un ordre naturel, qui trie de façon insensible à la casse par nom, et en cas d'égalité par prénom. Il est donc possible de stocker des instances de User dans une List, et d'appeler Collections.sort(...) sur celle-ci sans fournir de comparateur. - User permet également de fournir au développeur des comparateurs localisés (dépendant de la langue) utilisant la même séquence de tri (nom puis prénom). User doit s'assurer que le code extérieur ne peut pas créer deux objets comparateurs pour une même langue. La méthode fournissant un comparateur doit être appelable sous la forme : "User.getComparator(objet_Locale)". - La classe comparateur est une classe interne accessible via le nom court "User.Comparator". - BONUS #1 : les comparateurs exploitent non seulement la langue, mais un ordre variable : nom avant prénom, ou prénom avant nom. Pour toute combinaison (Langue x ordre) il existe au plus une instance de comparateur en mémoire. On altère alors la méthode factory d'origine, en fournissant des versions overloadées de confort. - BONUS #2 : le comparateur pour la langue par défaut est instancié et mémorisé en interne dès l'initialisation de la classe User. ---------------------------------------------------------------------------- Pour l'implémentation ---------------------------------------------------------------------------- Pour User : - Classes : Collator, HashMap, Locale, String. - Interfaces : Comparator, Map. Pour tester ça dans une classe avec un main : - Classes : ArrayList, Collections. - Interfaces : List. --Fin du Sujet--