CentraleSupélecDépartement informatique
Plateau de Moulon
3 rue Joliot-Curie
F-91192 Gif-sur-Yvette cedex
Génie logiciel orienté objet - Cours : Bases de l'API Java





Tous les langages de programmation sont accompagnés d'une bibliothèque standard, ensemble de composants qui offrent des services utiles dans de nombreuses applications.

Pour Python, par exemple, elle s'appelle The Python Standard Library.

Pour Java, c'est le terme d'Application Programming Interface qui est utilisé.

L'ensemble de la documentation officielle sur Java 21 est disponible à partir de cette page.



Ces différentes classes sont bien sûr organisées en paquetages, eux mêmes répartis dans des modules.



Comme déjà dit, une chaîne de caractères (String, dans le paquetage java.lang dont le contenu est automatiquement importé par le compilateur) est une classe en Java, pas un type primitif.

Une instance de String est immutable. Pour une version mutable, il existe StringBuilder.



Pour tous les types primitifs, il existe une classe dont les instances immutables encapsulent une valeur de ce type.

Pour le type int, il s'agit de la classe Integer.

De telles classes sont nécessaires dans le cadre de la généricité, par exemple pour utiliser un entier comme clef ou valeur dans un dictionnaire.

Le langage Java autorise la conversion implicite entre instance d'une telle classe et valeur du type primitif correspondant, ce qui peut amener à des surprises (voir plus bas).



Il existe de nombreux types de conteneurs (classes dont la responsabilité principale est de donner accès à d'autres objets selon différentes méthodes) en Java, un panorama sera vu plus tard.

Tous ces conteneurs sont génériques, c'est-à-dire qu'il faut préciser le type des éléments que le conteneur manipule. La généricité sera vue plus en détail dans un cours ultérieur.

Nous en présentons rapidement ici deux, un tableau de taille variable et un dictionnaire.

Une instance d'ArrayList est un tableau dont la taille s'adapte au besoin.



ArrayList figure dans le paquetage java.util, il faut donc ajouter l'instruction

import java.util.ArrayList;

en début de fichier (mais les environnements de développement comme Eclipse vous offrent la possibilité de le faire en un seul clic).

Un paramètre de généricité est obligatoirement une classe, c'est pour cela qu'il faut utiliser Integer et pas int. Il n'est pas nécessaire d'indiquer ce paramètre de généricité dans l'expression qui suite le new si cette information est déjà présente dans le type de la variable.



La classe HashMap permet d'avoir des dictionnaires basés sur une table de hachage



Java permet d'utiliser n'importe quel type non primitif comme type de clef, nous verrons plus tard comment la valeur de hachage est calculée.



Quand la clef demandée ne figure pas dans le dictionnaire, null est retourné. La conversion implicite de ce null en int provoque donc une exception.





Le parcours des conteneurs se fait habituellement avec des itérateurs, nous les verrons plus tard.

Ici, nous utilisons une variante de la boucle for pour parcourir le dictionnaire soit à partir de ses clefs, soit en obtenant à chaque itération la clef et la valeur associée. On voit ici que le type d'objet permettant ce dernier parcours est plutôt long à écrire sans apporter d'information très utile, ce qui montre l'intérêt du typage par inférence.



© 2024 CentraleSupélec