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 :
- Les notes de cours
- Ce tutorial sur les collections
- Le chapitre 2 de ce livre
- Revoir �galement les classes internes (Nested Classes)
(L'�nonc� de la question 1 est inspir� du tutorial d'Oracle sur les collections.)
- 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 ?
� 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
Attention chaque op�ration retourne un nouvel ensemble, comme le sugg�re cette signature de la m�thode "union"
public Ensemble<T> union( Ensemble<? extends T>e1) ...
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)) ;
L'objectif est de pouvoir faire diff�rents traitements sur cette liste de mots.
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)
- 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
>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 ???
L'id�e est de stocker l'�tat de la 'liste de String' � chaque action ('retirer' , 'croissant' , 'decroisssant') dans une Pile (java.util.Stack
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
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();
}
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);
}
}
public void utilisation(Factory fabrique){
TextComponent tc = fabrique.create();
tc.setText( "essai" );
}
utilisation(new TextFactory1());
utilisation(new TextFactory2());