Th�mes du TP :

Classes abstraites, interface, h�ritage
  • Le package java.util
    • java.util.AbstractCollection
    • java.util.AbstractSet
    • java.util.Set
    • java.util.TreeSet
    • java.util.Vector
    • java.util.HashMap
  • Les interfaces
    • Iterator
    • Comparator

Lecture pr�alable :

(L'�nonc� de la question 1 est inspir� du tutorial d'Oracle sur les collections.)



Une classe Ensemble
Compl�tez la classe "Ensemble", nomm�e Ensemble<T>
  • L'impl�mentation pr�conis�e utilise par d�l�gation une instance de la classe java.util.Vector<T>.
  • Seule une m�thode est � d�velopper ici :    public boolean add(T t)
  • Cette m�thode doit garantir la s�mantique de l'ajout d'un �l�ment dans un ensemble (au sens math�matique).
  • Questions � se poser : Que se passe-t-il si on utilise this.add(...) dans cette m�thode ? Et this.contains() ? Que d�clenche la m�thode addAll de la super-classe ?


Les tests unitaires
Proposez une classe de tests unitaires de la classe "Ensemble<T>" (pour la m�thode add())


La classe Ensemble<T> (suite)
Enrichissez la classe Ensemble<T> avec ces 4 op�rations :

Aide :

voir les m�thodes xxxAll sp�cifi�es dans l'interface java.util.Collection (aucune boucle n'est n�cessaire ! pour la r�alisation de ces 4 m�thodes). Dans la javadoc, "... adds each object ..." signifie "... calls add() for each object ..."
�� ((e union e1) - (e inter e1))
 

Aide au comportement attendu, une interface graphique est disponible � cette adresse

>appletviewer http://jfod.cnam.fr/progAvancee/tp5/tp5.html puis s�lectionnez la bonne applette

Attention chaque op�ration retourne un nouvel ensemble, comme le sugg�re cette signature de la m�thode "union"

   public Ensemble<T> unionEnsemble<? extends T>e1... 
Une utilisation possible :
   Ensemble e = ...
   System.out.println(" union de e et de e1 : " + e.union(e1))

 voir les m�thodes xxxAll spécifiées dans l'interface java.util.Collection (aucune boucle n'est nécessaire !, ce sera test� par jnews)
  Dans la javadocil est �crit, "... adds each object ..." signifie "... calls add() for each object ..." (pattern Template Method)
  Bien comprendre quelle méthode addAll et quelle méthode add sont appelées à chaque fois.
°° ((e union e1) - (e inter e1))
  On peut coder, (ce sera test� par jnews) cette méthode avec une seule instruction ! return ((e union e1) - (e inter e1)) ;


Les tests unitaires (suite)
Enrichissez la classe de tests unitaires demand�e en 1.2 (chaque m�thode doit avoir �t� test�e au moins une fois). L'interface graphique est compl�te, son comportement avec votre classe Ensemble doit �tre analogue � l'applette en ligne



Les listes et dictionnaires
Le texte de la fen�tre de l'interface ci-dessous est une liste constitu�e de mots extraits du chapitre 2 de CoreJava2 consacr� au "LinkedList" (les mots sont rassembl�s dans une constante de type "String", nomm�e CHAPITRE2 de la classe Chapitre2CoreJava2).

L'objectif est de pouvoir faire diff�rents traitements sur cette liste de mots.

 

>appletviewer http://jfod.cnam.fr/progAvancee/tp5/tp5.html puis s�lectionnez la bonne applette
 

Compl�tez la classe Chapitre2CoreJava2 en d�veloppant ces deux m�thodes de classe

  • Obtention d'une liste de mots � partir de la constante CHAPITRE2.
       public static List<String> listeDesMots()(utilisez une LinkedList)
  • Obtention d'une liste de couples <String,Integer>, � partir la liste des mots ci-dessus.
    public static Map<String,Integer> occurrencesDesMots(List<String> listeDesMots)(utilisez une HashMap)

 


la classe JPanelListe
Compl�tez la classe JPanelListe afin d'implanter, toutes les actions associ�es aux noms des boutons

  • rechercher : recherche du mot tap� dans la zone de saisie; le bool�en, le r�sultat de la recherche est affich�. la touche Entr�e du clavier a le m�me effet qu'une action effectu�e sur ce bouton.
  • retirer : retrait de tous les mots commen�ant par le pr�fixe de la zone de saisie; le bool�en, r�sultat du retrait est affich�.
  • croissant : tri du texte selon cet ordre, utilisez Collections.sort.
  • d�croissant : proposer une classe interne impl�mentant l'interface Comparator.
  • occurrence : obtention du nombre d'occurrences du mot pr�sent dans la zone de saisie
une IHM au comportement attendu :

>appletviewer http://jfod.cnam.fr/progAvancee/tp5/tp5.html

 

ATTENTION le retrait d'un �l�ment qui a d�j� �t� pr�sent dans la table retourne un nombre d'occurrences �gal � z�ro.

Demander le nombre d'occurrences d'un �l�ment qui n'a jamais �t� pr�sent dans la liste initiale doit retourner ???


la classe JPanelListe2
Compl�tez maintenant, la classe JPanelListe2 afin d'implanter la possibilit� d'annuler les actions de modification du texte comme le retrait ou le tri sur la liste.

L'id�e est de stocker l'�tat de la 'liste de String' � chaque action ('retirer' , 'croissant' , 'decroisssant') dans une Pile (java.util.Stack). Le dernier �tat de la 'liste de String' empil� est restitu� � chaque action 'annuler'. Quand la pile est vide le bouton 'annuler' est sans effet.

ATTENTION de mettre � jour la table des occurrences. Pour la fonctionnalit� annuler, Il est fortement encourag� d'utiliser le patron Memento, cette vid�o peut vous �tre utile.

>appletviewer http://jfod.cnam.fr/progAvancee/tp5/tp5.html puis s�lectionnez l'applette avec l'annulation possible

 

 

Soumettez en fin de question votre r�ponse


Le pattern fabrique
Selon la bibliographie habituelle (GoF95), l'objectif du Pattern Factory est de d�finir une interface pour la cr�ation d'un objet, en laissant aux classes impl�mentant cette interface le choix de la classe � instancier pour cet objet.

Interface Factory<T>, l'impl�mentation de la m�thode create est laiss�e aux "clients"
package question3;

   public interface Factory<T> {
      public T create();
   }
Exemple : TextFactory
public class TextFactory1 implements Factory<TextComponent> {
  public TextComponent create() {
    return new TextArea(100,50);
  }
}
public class TextFactory2 implements Factory<TextComponent> {
  public TextComponent create(){
    return new TextField(40);
  }
}
Un usage :
  public void utilisation(Factory fabrique){
        TextComponent tc = fabrique.create();
        tc.setText"essai" );
  }

  utilisation(new TextFactory1());
  utilisation(new TextFactory2());  
Proposez les fabriques d'ensembles HashSetFactory, (en utilisant la classe concr�te java.util.HashSet) et TreeSetFactory, (en utilisant la classe concr�te java.util.TreeSet, attention dans ce cas les �l�ments doivent �tre comparables...).


Les tests unitaires
Compl�tez les classes et la classe de Tests unitaires.