Keyboard shortcuts

Touchez ← ou → pour naviguer les chapitres

Touchez S ou / pour chercher dans le livre

Touchez ? pour afficher ce message

Touchez Esc pour masquer ce message

Accueil > Collaboration et gestion de projet >

📚 Packages et modules Java

Survol et attentes

Il y a trois niveaux d’emballages dans Java : les classes, les packages et - depuis la version 9 - les modules. Les packages sont des collections de classes et de sous-packages. Les modules sont des collections de packages et de sous-modules. Les packages et les modules sont utilisĂ©s pour organiser les classes et pour contrĂŽler l’accĂšs aux classes.

Définitions

Un package est un dossier qui contient des classes et des sous-packages. Les packages sont dĂ©clarĂ©s au dĂ©but d’un fichier de classe avec le mot-clĂ© package. En crĂ©ant des packages manuellement, comme dans un explorateur de fichiers ou un Ă©diteur de code comme VS Code, on doit respecter la structure de dossiers. Certains EDI spĂ©cialisĂ©s, comme Eclipse et IntelliJ, reprĂ©sentent des packages comme une abstraction et on ne voit pas directement la structure des dossiers, mais elle existe toujours.

Les classes qui ne sont pas dans le mĂȘme package doivent toujours ĂȘtre importĂ©es avec le mot-clĂ© import. Les classes qui sont dans le mĂȘme package n’ont pas besoin d’ĂȘtre importĂ©es.

Un module est un ensemble de packages et de sous-modules. Les modules sont dĂ©clarĂ©s dans un fichier module-info.java avec le mot-clĂ© module. On ne verra pas beaucoup de dĂ©tails en lien avec les modules dans ce cours, mais l’accĂšs aux packages et aux modules spĂ©cifiques est dĂ©clarĂ© dans ce fichier avec les mots-clĂ©s requires, opens et exports.

Package par défaut

Si aucune dĂ©claration de package n’est fait au dĂ©but d’un fichier de classe, la classe est placĂ©e dans le package par dĂ©faut. Le package par dĂ©faut n’a pas de nom et ne peut pas ĂȘtre importĂ©. Si toutes les classes du projet sont dans le mĂȘme dossier et il n’y aucune dĂ©claration de package, elles sont toutes dans le package par dĂ©faut et elles peuvent toutes s’appeler les unes les autres.

Mais ces classes ne peuvent pas ĂȘtre importĂ©es dans d’autres packages (parce que le package par dĂ©faut n’a pas de nom).

Packages nommés

Le nom pour le package de base d’un projet Java suit souvent la convention d’un nom de domaine inversĂ©. Par exemple, les packages faits par Google sont nommĂ©s com.google et les packages faits par Oracle sont nommĂ©s com.oracle. Des sous-packages (sous-dossiers), comme com.google.maps et com.oracle.jdbc, sont utilisĂ©s pour organiser les classes selon leur fonctionnalitĂ©.

Pour ce cours, je vous recommande le nom de package de base edu.ics4u.[prĂ©nom] oĂč vous insĂ©rez votre prĂ©nom en minuscules. Par exemple, si votre prĂ©nom est Jenna, votre nom de package de base serait edu.ics4u.jenna. Vous aurez alors la dĂ©claration au format suivant comme premiĂšre ligne de chaque fichier de classe :

package [nom.du.package];

Si toutes vos classes sont dans le package de base, elles peuvent s’appeler les unes les autres sans les importer. Mais si vous organisez vos classes dans diffĂ©rents packages et/ou sous-packages, chaque classe qui n’est pas dans le mĂȘme package doit ĂȘtre importĂ©e avec une dĂ©claration au format :

import [nom.de.l'autre.package].[nomDeLaClasse];

Pour qu’une classe soit visible dans un autre package, elle doit ĂȘtre dĂ©clarĂ©e public. Si une classe n’est pas dĂ©clarĂ©e public, elle ne peut ĂȘtre utilisĂ©e que dans le mĂȘme package - la visibilitĂ© est privĂ©e au package par dĂ©faut. Ainsi, on peut Ă©tendre le concept d’encapsulation au niveau des packages.

Depuis Java 9, on peut aussi encapsuler un ensemble de packages dans des modules. Le JDK est lui-mĂȘme divisĂ© en modules depuis cette version, mais on ne verra pas les dĂ©tails dans ce cours.

Dossier racine

Le dossier racine de votre projet et le dossier racine de vos packages ne seront gĂ©nĂ©ralement pas les mĂȘmes avec les outils standard de dĂ©veloppement de projets Java.

Par exemple, avec Maven (dans n’importe quel EDI incluant VS Code), le dossier racine du projet contient un fichier pom.xml qui dĂ©crit la configuration du projet et le dossier racine de vos packages est, par dĂ©faut, src/main/java. Si votre package de base est edu.ics4u.nathan, alors le fichier App.java serait dans le dossier src/main/java/edu/ics4u/nathan. Notez que par dĂ©faut Maven dĂ©finit aussi un dossier src/test/java pour les tests unitaires, p. ex. dans un fichier AppTest.java.

Avec des EDI comme Eclipse et IntelliJ, la structure du dossier de projet est configurĂ© par l’EDI mĂȘme si ce n’est pas un projet Maven. Par exemple, avec Eclipse le dossier racine du projet contient des fichiers de configuration qui sont souvent masquĂ©s et le dossier racine de vos packages est src. Parce que ces EDI utilisent une abstraction pour les packages Java, un package, p. ex. edu.ics4u.mohammed, sera visible comme un objet dans le dossier src et on ajoute une nouvelle classe, p. ex. App, directement dans le package.

Objectifs d’apprentissage

À la fin de cette leçon vous devrez ĂȘtre en mesure de :

  • Expliquer le lien entre les packages Java et les dossiers sur le disque dur.
  • DĂ©clarer un package au dĂ©but d’un fichier de classes utilisant le format de nom conventionnel.
  • Importer des classes de vos propre sous-packages.

CritĂšres de succĂšs

  • Je peux dĂ©clarer et utiliser des packages nommĂ©s dans mes projets Java.
  • Je peux distinguer le dossier racine du projet et le dossier racine des packages dans un projet Java configurĂ© avec Maven.

Exercices

📚 VĂ©rification de la comprĂ©hension

đŸ› ïž Pratique

© 2022-2025 David Crowley