III. Le langage JAVA Page
4
Page 4
II. Utilisation de la classe Object prédéfinie
Sources: Ateliers/Atelier1/V.2_ListeGeneriqueObject
Les traitements génériques de la classe abstraite précédente ObjetListe sont les méthodes toString et equals. Or ces
méthodes existent dans la classe Object.
En Java, il n'est pas obligatoire que les traitements génériques soient définis dans une classe générique. Toute
méthodes héritée peut être utilisée génériquement. Le langage Java est un langage objet à liaison dynamique. C'est à
dire que ce n'est qu'à l'exécution que le lien est fait entre la référence d'un traitement générique et le traitement réel.
Cela induit des erreurs possibles lors de l'exécution, Java ne trouvant pas dans une classe le traitement générique
utilisé.
Toutes les classes Java héritent par défaut de la classe prédéfinie Object. On peut donc corriger notre précédent
exemple en utilisant la référence de la classe Object dans la classe Liste, uniquement et tout simplement.
Par contre, si on veut définir des traitements génériques supplémentaires qui ne sont pas définis dans la classe
Object, il indispensable de ne pas se limiter à la classe Object car il est impossible de compléter la classe Object
(nous n'avons pas les sources des APIs de Java). De toute façon, cette solution ne serait pas acceptable: on ne peut
pas changer la classe Object à chaque fois que l'on définit des traitements génériques.
Il faut donc trouver un autre moyen aussi efficace mais plus simple que la création de classe abstraite.
D'autant plus que l'on ne peut pas hériter à la fois de 2 classes abstraites, Java ne pratique pas l'héritage multiple des
classes.
Par contre, il existe la notion d'interface. Une classe Java peut utiliser autant d'interface que nécessaire et peut
implémenter autant d'interface que nécessaire. De plus, les interfaces comme les classes peuvent s'hériter les unes des
autres.
III. Utilisation d'une interface Java
Une interface Java permet de déclarer des prototypes de méthodes. Elle définit un nom d'interface qui peut être
utilisé pour créer des références d'objet Java. Ces références ne sont pas créées par instanciation (new) mais par
conversion de classe.
Dans notre cas, au lieu d'utiliser la méthode equals pour comparer si deux éléments sont identiques, on veut utiliser
une méthode de nom comparer. Cette méthode n'existant pas dans la classe Object, on l'a défini dans l'interface
InterfaceListe.
Sources: Ateliers/Atelier1/V.3_ListeGeneriqueInterface
Une interface, à l'opposé d'une classe abstraite, ne peut pas contenir d'attribut mais que des prototypes de méthodes.
VI. La dérivation de la classe Liste
La classe que l'on veut créer est une classe de liste d'éléments générique dont les éléments sont uniques (suivant une
méthode de comparaison spécifique à chaque type d'élément) et toujours ordonnés.
Pour cela, on crée une classe qui hérite de la classe Liste. On redéfinit la méthode addElement pour tester l'unicité et
on crée la méthode trier afin de trier les éléments. On crée une nouvelle interface dans laquelle on définit la méthode
compareTo qui retourne 0 si deux éléments sont uniques, -1 si ils ont inférieurs et +1 si ils sont supérieurs.
On appelle cette classe Ensemble.
Sources: Ateliers/Atelier1/VI_Ensemble
Il a fallu modifier la classe Liste pour définir la méthode setElementAt qui permet de changer un élément de la liste.