TP11
API collection
Objectifs
- Savoir implémenter une classe sans être guidé.
- Utiliser la classe Calendar.
- Utiliser la classe ArrayList.
- Utiliser la classe LinkedList.
- Utiliser l'interface ListIterator
Mise en place
- Suivant la démarche habituelle, lancez Netbeans IDE
- Créez un nouveau projet appelé TP11 (File > New Project puis Java > Java Application)
- Pour chaque nouvel exercice créez un package appellé exerciceX où X est le numéro de l'exercice (sauf pour le premier exercice)
Exercices
Création des classes
Dans cet exercice, vous devez implémenter une classe
Monitor
permettant de représenter la classe UML
Monitor représentée ci-dessous,
ainsi que les classes intermédiaires nécessaires.
![]() |
Utiliser la classe java.util.Calendar pour l'attribut date. C'est-à-dire que l''attribut date sera déclarée par private Calendar date;.
La méthode size() permet de connaître le nombre d'éléments du tableau.
La méthode add(Object o) permet d'ajouter l'objet o à la fin du tableau.
La méthode set(int index, Object o) modifie l'objet en position index, en lui affectant o.
La méthode get(int index) retourne l'objet se trouvant en position index.
Test et nouvelles méthodes
On souhaite maintenant tester le code Java qui vient d'être écrit. Pour cela placez vous dans le package correspondant à cet exercice puis créez un nouveau fichier Test ( File>New File puis Java Classes>Java Class).
Ecrivez le code suivant dans ce nouveau fichier :
- vrai
- faux
- vrai
- faux
Attention ! ici, si l'on utilise le constructeur automatique de NetBeans, on obtient le code suivant:
qui ne tient pas compte de l'encapsulation des attributs room et age ! Il faut ajouter des tests sur ces 2 valeurs...
- ça ne compile pas
- une exception (erreur) à l'exécution
- le programme fait bien ce qu'on lui demande, mais ce n'est pas ce qu'on veut
Si vous avez répondu ça ne compile pas, reprenez les questions précédentes...
Le programme devrait afficher quelque chose comme monitoring.Monitor@1bc82e7 au nombre près après l'@. C'est la façon qu'à Java d'afficher une référence (i.e. le nom du package, point le nom de la classe, arobase l'adresse mémoire).
C'est bien ce qui est prévu quand on écrit System.out.println(m.toString());, mais ce n'est pas ce que l'on souhaite...
Surcharge de la méthode toString
Pour obtenir l'affichage du Monitoring souhaité, nous allons surcharger la méthode public String toString() pour qu'elle affiche le code suivant:
Tout objet Java possède par défaut une méthode public String toString() qui permet l'affichage de l'objet. Par défaut, cette méthode affiche le nom du package, suivi du nom de la classe, suivi de son adresse en mémoire (sauf pour les chaînes de caractères évidemment). Surcharger cette méthode, signifie la redéfinir dans votre classe pour que l'affichage soit correct.
Notez que get(Calendar.MONTH) renvoie la valeur 0 pour le mois de janvier et 11 pour le mois de décembre → il faut ajouter +1 au résultat pour obtenir un affichage correct du numéro du mois.
- oui
- non
Même si l'on ne surcharge pas la méthode toString, l'énumération Type affiche BENINE ou SEVERE.
Ordonner les alertes
On souhaite maintenant trier les alertes dans l'ordre chronologique puis par sévérité croissante. Pour cela, on vous demande de rajouter une méthode public void triSelection() aux classes concernées. Le principe du tri par sélection est expliqué dans le TD 8, exercice 3.
Pour trier/ordonner des alertes, nous allons avoir besoin de les comparer entre elle: Quelle alerte doit apparaître en premier ?. Pour cela, nous allons utiliser la méthode CompareTo (puisqu'on ne peut pas utiliser Alert a, b; a < b).
Le code suivant:
devra renvoyer:
- un nombre négatif si a doit apparaître avant b, c'est à dire si elle est plus récente que b ou si a et b ont lieu à la même date mais a est plus sévère que b.
- zéro si a et b ont lieu en même temps et on la même sévérité.
- un nombre positif si b doit apparaître avant a
- une structure de recherche avec la forme compacte
- une structure de recherche avec la forme historique
- une strucutre de parcours avec la forme compacte
- une structure de parcours avec la forme historique
Une structure de recherche n'a pas de forme compacte ou historique. Juste une form où l'on met 2 conditions après le while: la condition portant sur les bornes et la négation de la propriété recherchée.
Ici, on doit parcourir tout le tableau pour trouver le minimum. Par ailleurs, même si la strucutre de parcours avec la forme compacte paraît toute indiquée puisqu'on utilise un conteneur d'objet, elle ne nous permet pas de partir d'un indice donné (ici debut). Du coup, il nous faut utilier une structure de parcours avec la forme historique.
Si vous n'avez rien compris à cette explication, c'est le moment de relire votre cours sur le structures de parcours ainsi que celui sur les structures de recherche.
- vrai
- faux
Ces 2 alertes arrivent le 07/12/2007 à 12:05 et concernent les EEG, mais l'une est sévère et l'autre est bénine.
La liste chaînée est une structure de données que l'on retrouve fréquemment en informatique.
Elle nécessite de représenter chaque élément de la liste par un couple (valeur, suivant), désignant respectivement la valeur au point courant et la référence sur le chaînon suivant.
![]() |
Figure 2.1. Exemple de liste chaînée
|
En Java, cela s'écrit très aisément :
- vrai
- faux
On souhaite maintenant tester le code Java qui a vient d'être écrit. Pour cela, Ecrivez le code suivant dans une méthode main.
- valeur de l'élément a : 0 valeur de l'élément a : 8
- valeur de l'élément a : 0 valeur de l'élément a : 0
- valeur de l'élément a : 8 valeur de l'élément a : 8
Nous allons maintenant définir la classe Liste représentant une liste chaînée d'entiers.
Une liste est décrite par la connaissance du nombre d'éléments qu'elle contient et de son premier élément : en effet, à partir de celui-ci, il est possible de connaître tous les autres éléments.
Pour tester cette nouvelle méthode, nous voulons effectuer les opérations de la figure suivante:
![]() |
Figure 2.2. Scénario de test de la méthode ajouterDebut de la classe Liste
|
On considère les 3 codes suivants pour la méthode main
- à l'extrait N°1
- à l'extrait N°2
- à l'extrait N°3
- une structure algorithmique de parcours
- une structure algorithmique de recherche
Cette question est un peu sioux, en effet, même si on parcourt toute la liste chaînée, on ne connaît pas le nombre exact d'éléments.
On recherche donc le dernier élément qui a la propriété getSuivant() == null...
- sont affichés dans l'ordre dans lequel on les a entrés.
- sont affichés dans l'ordre inverse de l'ordre dans lequel on les a entrés.