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