La programmation Java consiste à créer des classes. Or, étant donné
qu'un programme est généralement développé par une équipe de
programmeurs, c'est-à-dire plusieurs personnes, le fait de concaténer (mettre bout à
bout) des classes dans un fichier est loin d'être satisfaisant. C'est pour cette raison
que Java propose l'utilisation de packages (comparables aux bibliothèques du langage C++/C)
Ainsi, un package est une unité (un fichier) regroupant des classes. Pour créer
un tel package, il suffit de commencer le fichier source contenant les classes à regrouper
par l'instruction package suivi du nom que l'on désire donner au package. dès
lors, toutes les classes contenues dans le fichier feront partie du package...
Les packages sont organisés sous forme de hiérarchie, c'est-à-dire
qu'il est possible de les imbriquer, pour cela Java impose que l'emplacement des
fichiers sources (donc des packages) correspondent à la hiérarchie
des packages, c'est pour cela qu'un package portant le nom MonPackage doit être
stocké dans un répertoire du même nom.
De plus, pour que le compilateur puisse trouver le package, il est essentiel qu'il
"connaisse" l'emplacement du package. Pour cela Java utilise une variable d'environnement
(dans le même ordre d'idée que la variable d'environnement PATH)
appelée classpath donnant la liste des chemins d'accès aux classes.
Par défaut le compilateur (ainsi que la machine virtuelle) recherchent les classes dans le
répertoire courant et le répertoire des classes standards.
Pour définir la variable d'environnement classpath
- sous Linux, il faut utiliser la commande suivante:
export CLASSPATH = <repertoire>:<repertoire>;...
par exemple:
export CLASSPATH = /home/jeff/java:/usr/lib/jdkx.x.x/lib/classes.zip:...
- sous Windows, il faut utiliser la commande suivante:
SET CLASSPATH = <repertoire>;<repertoire>;...
par exemple:
SET CLASSPATH = c:\java;c:\jdkx.x.x\lib\classes.zip;...
Pour pouvoir accèder aux classes d'un package à partir d'une classe
ne faisant pas partie du package, il suffit de donner le chemin d'accès relatif
à la classe lorsque vous faîtes appel à elle.
Ainsi, pour faire appel à la classe MaClasse du package MonPackage, il suffit
d'écrire:
MonPackage.MaClasse
Toutefois il s'avére vite embarrassant d'avoir à écrire constamment
le chemin d'une classe, ainsi il est généralement pratique d'utiliser l'instruction import,
suivie du chemin de la classe:
import MonPackage.MaClasse;
Il est également possible d'importer toutes les classes d'un package par
la syntaxe:
import MonPackage.*;
Voilà ce à quoi ressemble une application Java utilisant des packages
(c'est-à-dire tous ou presque car vous aurez à utiliser des packages
fournis avec le JDK):
import java.awt.Button; // On importe la classe Button
import java.rmi.*; // On importe toutes les classes RMI
class Exemple {
static void main(String argv[]){
Rect MonRect =new Rectangle();
...
}
}
|
Contrairement à ce que l'on pourrait croire, l'instruction import MonPackage.*; permet
de rendre accessible uniquement les classes contenues dans le package MonPackage et non à l'ensemble des packages
dont le nom commence par MonPackage, c'est-à-dire que la classe MonPackage.pack1.MaClasse ne sera pas accessible...
|
Etant donné la structure hiérarchique des packages et le nombre considérables
de packages créés par des développeurs du monde entier, il est essentiel
d'éviter de donner le même nom à des packages différents.
Ainsi Java propose une dénomination standard des packages. Cette appellation
standard consiste à donner un nom au package et de "l'allonger" par le nom de la société,
ou du concepteur des classes qu'il contient. Ainsi, un package soundstuffs développé par CCM
aurait pour dénomination net.commentcamarche.soundstuffs.
L'accessibilité des données membres et des méthodes d'une classe existe aussi
au travers des packages. Ainsi, une classe n'est par défaut visible qu'à partir
des classes faisant partie du même package. Or l'intérêt d'un package est
justement de pouvoir être utilisé à partir de classes déclarées
dans un autre fichier, c'est la raison pour laquelle les classes d'un package destinées à
être exportées doivent impérativement être déclarées publiques...
Java définit deux packages par défaut, c'est-à-dire un ensemble de classes
auxquel il est possible de faire référence sans spécifier le chemin d'accès
(que ce soit avec une instruction import ou en faisant précéder le nom
par la hiérarchie de packages).
Ces packages sont:
- Le package par défaut: il s'agit de toutes les classes ne faisant pas partie
explicitement d'un package et situées dans les répertoires accessibles (par défaut
ou dans la variable classpath)
- Le package java.lang contenant les classes standards telles que System ou Math
Avec la croissance des réseaux, les applications sont vouées à voyager,
il faut donc s'assurer:
- qu'elles restent intactes
- que tous les éléments (packages) de l'application sont présents
- de rendre l'application la moins gourmande en espace
Ainsi, Java propose l'utilitaire jar dans le JDK, un utilitaire
permettant de rassembler les différentes classes (fichiers .class) d'une application
au sein d'une archive compressée, appelé package, afin d'en assurer l'intégrité et la taille.
Grâce à cet utilitaire, il est possible d'appeler à partir d'une page Web
l'ensemble des classes d'une applet en faisant uniquement référence à
l'archive (dont l'extension est .jar).
La syntaxe de jar est proche de celle de tar sous Unix:
|
- Lorsque vous utilisez une archive Jar sur Internet, toutes les classes de celle-ci seront
téléchargées en même temps, veillez donc à y inclure uniquement
les classes nécessaires pour une application donnée
- L'utilitaire MoaJar permet de manipuler
les archives Jar à l'aide d'une interface graphique
|
|