POO – TP 5

Transcription

POO – TP 5
POO – TP 5
Exercice 2 – Forum
Nous souhaitons réaliser un forum. Notre forum est composé de message (classe
Message) qui peuvent être regroupés en topics (classe Topic). Les topics peuvent
contenir d’autres topics (en plus des messages). Tous les éléments du forum implémentent l’interface ForumElement. Nous obtenons l’organisation suivante (qui
respecte le patron de conception Composite) :
Exercice 1 – Vecteur paramétré
1. Modifiez le vecteur d’objets que vous avez écrit dans les TD précédents
en un vecteur générique Vector<T> où T représente le type des objets que
l’utilisateur peut placer dans le vecteur. Le constructeur prend en paramètre la capacité initiale du vecteur. Vous devez implémentez les méthodes
suivantes :
—
—
—
—
—
—
—
ForumComposite
# elements : List<ForumElement>
+ ForumComposite()
+ addElement(e : ForumElement)
+ getElements() : List<ForumElement>
+ afficher(decalage : int)
void ensureCapacity(int capacity)
void resize(int size)
int size()
boolean isEmpty()
void add(T element)
void set(int index, T element)
T get(int index)
*
Topic
- title : String
+ Topic(title : String)
+ afficher(decalage : int)
Forum
+ Forum()
+ afficher(decalage : int)
+ afficher()
2. Faites en sorte que la classe Vector<T> implémente l’interface Iterable<T>.
L’itérateur retourné par la méthode iterator() est une instance de la classe
VectorIterator externe à la classe Vector.
«interface»
ForumElement
+ afficher(decalage : int)
Message
- message : String
+ Message(message : String)
+ afficher(decalage : int)
3. Modifiez la classe VectorIterator enfin d’en faire une classe interne et
privée à la classe Vector.
1. Implémentez le diagramme de classe précédent. La méthode afficher(int
decalage) affiche sur la console l’élément avec un décalage sur la gauche
de decalage espaces. Le code de gauche doit générer la sortie de droite :
4. Ajoutez une méthode void addAll(Vector<T> elements) à la classe Vector ?
5. Ajoutez une méthode boolean isSorted() qui retourne true si les éléments présents dans le vecteur sont triés. Cette méthode suppose que les
objets présents dans le vecteur implémentent l’interface Comparable. La
méthode compareTo de cette interface est utilisée pour comparer les éléments deux à deux. Que se passe-t-il si des éléments n’implémentent pas
l’interface Comparable ?
Forum forum = new Forum() ;
Topic topic1 = new Topic(”Premier topic”) ;
topic1.addElement(new Message(”Message 1”)) ;
topic1.addElement(new Message(”Message 2”)) ;
forum.addElement(topic1) ;
Topic topic2 = new Topic(”Deuxième topic”) ;
topic2.addElement(new Message(”Message 3”)) ;
forum.addElement(topic2) ;
forum.afficher() ;
6. Ajoutez une méthode boolean isSorted(Comparator<T> comparator)
qui fournit la même fonctionnalité que la méthode précédente en prenant,
ici, un comparateur en paramètre.
Forum :
Topic : Premier topic
Message 1
Message 2
Topic : Deuxième topic
Message 3
2. Nous souhaitons pouvoir parcourir l’ensemble des messages du forum à
l’aide d’un itérateur. Pour ce faire, modifiez l’interface ForumElement de
sorte qu’elle étende l’interface Iterable<String>. Ensuite, modifiez en
conséquence les classes Message et ForumComposite.
7. Ajoutez une méthode statique boolean isSorted(Vector<E> vector) qui
retourne true si les éléments du vecteur vector sont triés.
1