POO TD/TP 5

Transcription

POO TD/TP 5
POO TD/TP 5
Exercice 2
Exercice 1
1. Modiez 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 :
void ensureCapacity(int c)
void resize(int s)
int size()
boolean isEmpty()
void add(T i)
void set(int i, T e)
T get(int i)
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 ) :
ForumComposite
# elements : List<ForumElement>
+ ForumComposite()
+ addElement(e : ForumElement)
+ getElements() : List<ForumElement>
+ afficher(decalage : int)
*
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.
Topic
- title : String
+ Topic(title : String)
+ afficher(decalage : int)
3. Modiez la classe VectorIterator enn d'en faire une classe interne et privée
à la classe Vector.
Forum
+ Forum()
+ afficher(decalage : int)
+ afficher()
4. Ajoutez une méthode void addAll(Vector< ? extends T> v) à la classe
Vector. Pourquoi est-il préférable de mettre ? extends T à la place de T ?
«interface»
ForumElement
+ afficher(decalage : int)
Message
- message : String
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 ?
+ Message(message : String)
+ afficher(decalage : int)
1. Implémentez le diagramme de classe précédent. La méthode acher(int n)
ache sur la console l'élément avec un décalage sur la gauche de n espaces.
Le code de gauche doit générer la sortie de droite :
6. Ajoutez une méthode boolean isSorted(Comparator< ? super T>
comparator) qui fournit la même fonctionnalité que la méthode précédente
en prenant, ici, un comparateur en paramètre. Pourquoi est-il préférable de
mettre ? super T au lieu de T ?
Forum f = new Forum() ;
Topic t = new Topic("Premier topic") ;
t.addElement(new Message("Message 1")) ;
t.addElement(new Message("Message 2")) ;
f.addElement(t) ;
t = new Topic("Deuxième topic") ;
t.addElement(new Message("Message 3")) ;
f.addElement(t) ;
f.acher() ;
7. Ajoutez une méthode statique boolean isSorted(Vector<E> vector)
qui retourne true si les éléments du vecteur vector sont triés. Comment
dénir correctement le paramètre E ?
1
Forum :
Topic : Premier topic
Message 1
Message 2
Topic : Deuxième topic
Message 3