Approche Objet - TD2 : Listes Circulaires

  1. Affichage

    On considère la classe CircularList ci-jointe.
    Modifier CircularList pour que l'instruction
    System.out.println(c);

    c est une instance de CircularList et n sa taille, affiche le résultat suivant sur la sortie standard : Circular list of size n
    Par exemple, l'exécution du code suivant
    CircularList cl = new CircularList(1, 2, 3); 
    System.out.print(cl);

    affichera sur la sortie standard :
    Circular list of size 3
  2. Encapsulation

    Le résultat des instructions suivantes
    Object [] a = {1, 2, 3};
    CircularList cl = new CircularList(a);
    System.out.print(cl.get(0) + " ");
    *** instruction cachée ***
    System.out.println(cl.get(0));
    est :
    1 4

    où l'instruction cachée ne contient aucune référence à la variable cl.
    Donner le contenu de l'instruction cachée et corriger le défaut d'encapsulation constaté.
  3. Méthode nextElement

    Ajouter une méthode Object nextElement() qui renvoie l'élément du tableau elements suivant l'élément retourné par l'appel précédent à nextElement.
    Le premier appel à nextElement renverra le premier élément de la liste circulaire, c'est à dire l'élément d'indice 0 dans elements. L'élément qui suit l'élément d'indice size() - 1 est également l'élément d'indice 0.
    Par exemple, l'exécution des instructions suivantes
    CircularList cl = new CircularList(1, 2, 3);
    for (int i = 0; i < 10; i++)
        System.out.print(cl.nextElement() + " ");

    affichera sur la sortie standard :
    1 2 3 1 2 3 1 2 3 1
  4. Exceptions

  5. Classe générique

    Modifier CircularList de telle façon que le type de ses éléments devienne générique.
  6. Égalité

    Pour les deux questions suivantes, il est recommandé de regarder les méthodes disponibles à partir de la classe java.util.Arrays.
  7. Listes circulaires modifiables, délégation

  8. Union

    Dans une classe CircularLists, écrire une méthode de classe  union qui retourne l'union de deux listes circulaires. Le type des éléments des listes passées en paramètre pourra être un sous-type du type des éléments de la liste créée par la méthode union.
    Par exemple, l'exécution des instructions suivantes
    CircularList<String> cls1 = new CircularList<String>("lundi", "4", "septembre", "2017");
    CircularList<String> cls2 = new CircularList<String>( "5", "septembre", "2017");
    CircularList<String> clsu = CircularLists.union(cls1, cls2);
    System.out.println(clsu);
    affichera sur la sortie standard :
    Circular List of size 7
    et l'exécution des instructions suivantes
    CircularList<Double> clf = new CircularList<Double>(2., 6.5, 14.);
    CircularList<Integer> cli = new CircularList<Integer>(2, 6, 14);
    CircularList<Number> cln = CircularLists.union(clf, cli);
    System.out.println(cln);
    affichera sur la sortie standard :
    Circular List of size 6
  9. Utilisation du modèle de conception décorateur

    Il s'agit d'utiliser un décorateur pour rendre non modifiable une liste circulaire modifiable.
    Tester la méthode
    static <T> List<T> unmodifiableList(List<? extends T> list) de la classe java.util.Collections.
    Sur le modèle de cette méthode, rajouter à la classe CircularLists une méthode unmodifiableCircularList qui renvoie une vue non modifiable d'une liste circulaire. En particulier, tout appel à une méthode modifiant la liste "décorée non-modifiable" devra lever une exception java.lang.UnsupportedOperationException.