TP sur les exceptions - première approche des collections - chaînes de caractères

Page Home (contact) Retour TPs

Support de cours


Exceptions dans les étagères

Reprenez vos classes Livre et Etagere du paquetage bibliotheque (tp sur le paquetage bibliotheque).
  1. Dans la méthode de Etagere qui ajoute un livre sur l'étagère, enlevez les tests qui vérifient que l'étagère n'est pas pleine. Pour la suite, appelons cette méthode "ajouter". Dans la méthode main, provoquez la levée d'exception en ajoutant un livre dans une étagère pleine. Notez les noms des exceptions levées.
  2. Mettez dans des blocs "try ... catch" les appels à la méthode ajouter. Les messages d'erreurs seront affichés par ces blocs dans la méthode utilisatrice des étagères. Dans votre message d'erreur, faites afficher la pile des appels de méthodes qui a conduit à l'erreur (voir printStackTrace).
  3. Ecrivez votre propre classe d'exception EtagerePleineException pour ce type d'exception. La méthode ajouter devra utiliser cette nouvelle exception. Un attribut privé de cette classe sera une référence vers l'étagère qui a provoqué le problème. Les méthodes qui utiliseront Etagere (en dehors de Etagere) pourront ainsi afficher des messages du type "Impossible d'ajouter un livre à cette étagère car elle ne peut contenir que 6 livres", ou plus généralement, récupérer des informations sur l'étagère où il y a eu un problème (par exemple, afficher la liste des livres qu'elle contient déjà).
  4. Les exceptions doivent être traitées par la méthode qui en sait assez pour prendre la bonne décision. Par exemple, il serait mauvais de traiter l'exception par la méthode ajouter qui ne peut prendre la bonne décision. Pour illustrer cela, écrivez une classe Librairie qui possède une méthode ajouterLivre qui ajoute des livres dans des étagères. Si une étagère est pleine alors que l'on veut ajouter un livre, on n'affiche pas de message d'erreur mais on crée une nouvelle étagère dans laquelle on range le livre. Vous créerez des étagères qui peuvent contenir 3 livres et vous rangerez les étagères dans un ArrayList<Etagere>. Pour créer une instance d'une telle liste : listeEtageres = new ArrayList<Etagere>(); pour ajouter une étagère dans une telle liste : listeEtageres.add(etagere);
    Ajoutez à la classe Librairie une méthode qui affiche tous les livres qui ont été ajoutés.

Correction :

Classe Librairie
Classe Etagere
Classe EtagerePleineException


Une entreprise, collection d'employés

  1. A partir de maintenant, on va généraliser cet exercice en ajoutant la possibilité de travailler avec plusieurs entreprises. Ecrivez une classe Entreprise. Une entreprise aura un nom et aura des employés que vous enregistrerez à l'aide d'un ArrayList<Employe>. Il devra être possible d'ajouter et d'enlever des employés dans une entreprise. Utilisez une classe d'exception pour les cas où, par exemple, on veut enlever un employé dans une entreprise dans lequel il ne travaille pas.
    L'association entre une entreprise et ses employés sera bidirectionnelle : une entreprise connaît ses employés et un employé connaît son entreprise ; attention de bien gérer les 2 "bouts" de l'association. Par exemple, si vous ajoutez un employé dans une entreprise e, l'employé doit être ajouté à la liste des employés de l'entreprise mais l'entreprise de l'employé doit aussi être mise à la valeur e.
    Vous pouvez, si vous le voulez utiliser les classes d'employés sur lesquelles vous avez déjà travaillé dans les TPs précédents, ou récrire une nouvelle classe Employe. On n'utilisera pas les salaires pour cet exercice.
  2. Vous écrirez une méthode toString qui décrit une entreprise en affichant son nom et les noms de tous ses employés (parcourez l'ArrayList et utilisez un StringBuilder pour ajouter une description de chaque employé).
  3. Pour tester, ajoutez quelques employés dans 2 entreprises et faites afficher les noms des entreprises et de leurs employés.

Correction :

Classe Entreprise
Classe TestEntreprise
Classe EmployeException
Classe Employe

Palindromes (chaînes de caractères)

Élu par cette crapule.
Ésope reste ici et se repose.
Tu l'as trop écrasé, César, ce Port-Salut...
Ca vous dit quelque chose ? Ce sont des palindromes.

Écrivez une classe Palindrome qui sera utilisée pour savoir si une phrase est un palindrome. Cette classe comportera plusieurs méthodes qui indiqueront si une chaîne de caractères (String) donnée en paramètre est un palindrome ou pas :

  1. La méthode "boolean palindrome1(String)" prend en paramètre une chaîne constituée uniquement de lettres minuscules ou majuscules (pas d'espaces ni de lettres accentuées). Elle renvoie vrai si le paramètre est un palindrome. On tient compte de la casse des lettres (abBA n'est pas un palindrome). Vous comparerez les lettres une à une.
  2. La deuxième version de la méthode palindrome1, nommée palindrome2 utilise la méthode reverse() de la classe StringBuilder ou StringBuffer.
  3. La méthode palindrome3 généralise palindrome1: le paramètre peut comporter autre chose que des lettres (des signes de ponctuation par exemple) mais on n'en tient pas compte.
  4. La méthode palindrome4 généralise  palindrome3 : un deuxième paramètre indique si on tient compte de la casse des lettres. Ce deuxième paramètre devra être optionnel. Par défaut, les majuscules et minuscules ne seront pas considérées comme équivalentes.
  5. Généralisez palindrome4 en palindrome5 : en plus, les lettres accentuées sont considérées équivalentes aux lettres non accentuées ; par exemple, e, ê, è et é sont équivalentes. Comme palindrome4, palindrome5 a un paramètre optionnel pour ignorer la casse des lettres. Dans le cas où elle est ignorée, E, È, Ê et É sont équivalentes à e, è, ê et é.

Correction

Classe Palindrome


Pour ceux qui ont déjà fini....

Un problème de conception ; pattern singleton

  1. Reprenez l'exercice sur les employés. Ajoutez une classe Directeur. Un directeur a un nom et un salaire que l'on donne quand on crée le directeur. La difficulté vient de ce qu'il ne peut y avoir qu'un seul directeur. Il ne doit pas être possible de créer un directeur s'il en existe déjà un. Voici des indications que vous consulterez qu'après avoir cherché vous même une solution.
  2. On veut n'accepter qu'un seul directeur par entreprise (et pas un seul directeur toutes entreprises confondues comme avec l'ancienne classe Directeur). Un problème de conception se pose : comment faire pour empêcher la création de plusieurs directeurs dans une entreprise ? Voici des indications (à ne consulter qu'après avoir réfléchi au moins 5 minutes sur ce problème). Si vous avez trouvé une autre solution, faites-là valider par l'enseignant.

Un peu de lecture sur les exceptions dans le tutoriel d'Oracle (lisez en particulier cette page : http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html)


Classe Collator pour comparer des chaînes de caractères "localisées"

Reprenez l'exercice sur les palindromes en utilisant la classe java.text.Collator.


Retour TPs