Algorithmique & Programmation Orientée Objet Semestre 2 ST Créer une bibliothèque
Introduction Une bibliothèque de constantes, de types agrégés et/ou de fonctions Java peut être développée pour rendre possible la distribution de ces composants et donc leur utilisation. Une telle bibliothèque se présente basiquement comme un programme Java dans lequel il n'y a pas de fonction main. Ce programme n'est donc pas exécutable. En revanche, rien n'interdit qu'un autre programme utilise ce qui est défini à l'intérieur (d'où l'utilité des commentaires Javadoc pour permettre de générer la documentation d'utilisation). Création d'une bibliothèque Création d'un fichier MaBibliotheque.java dont le nom MaBibliotheque définit le nom de la bibliothèque (case sensitif) Développement normal des composants (constantes, types agrégés, fonctions) devant être présents dans la bibliothéque: item1, item2, ..., itemN item1, item2, ..., itemN: Noms "internes" des composants MaBibliotheque.item1, MaBibliotheque.item2, ..., MaBibliotheque.itemN: Noms "externes" des composants Noms "complets" Véritables noms (nom des fichiers .class issus de la compilation) Noms utilisés pour les appels externes Utilisation d'une bibliothèque Utilisation directe possible du fichier code source .java de la bibliothèque -> Compilation pour obtenir le(s) fichier(s) .class correspondants Possiblilité de ne distribuer que les fichiers .class -> Pas d'accès au code source de la bibliothèque de la part du développeur qui l'utilise -> Pas gènant car il n'a pas à savoir comment fonctionne les fonctions de la bibliothèque, mais seulement ce qu'elles font -> Modifications impossibles -> Propriété intellectuelle préservée Placer les fichiers .class dans le répertoire des fichiers .java qui les utilisent Utilisation des noms complets dans les fichiers .java utilisant la bibliothèque -> Lors de la compilation de ces fichiers .java, utilisation par le compilateur de la première partie du nom complet pour déterminer le fichier .class où trouver l'item utilisé -> Même principe lors de l'exécution: Utilisation par la machine virtuelle d'exécution (JRE, Java Runtime Environment) de la première partie du nom complet pour déterminer le fichier .class où trouver l'item utilisé Constantes Développement normal des constantes dans le code source de la bibliothéque Utilisation des noms complets des constantes dans le code source qui utilise la bibliothèque Exemple: Une bibliothèque de constantes mathématiques
/* Une bibliothèque de constantes */ /* définies avec 30 décimales */ public class Bibliotheque0 { /* Constante de définition de PI */ final static double PI = 3.141592653589793238462643383279; /* Constante de définition de racine de 2.0 */ final static double SQRT2 = 1.414213562373095048801688724209; /* Constante de définition du nombre d'or */ /* (1.0+sqrt(5.0))/2.0 */ final static double NOMBREDOR = 1.618033988749894848204586834365; }
Bibliotheque0.java
/* Utilisation de constantes définies */ /* dans une bibliothèque */ public class TestBibliotheque0 { public static void main(String [] args) { Ecran.afficherln("PI = ",Bibliotheque0.PI); Ecran.afficherln("SQRT(2) = ",Bibliotheque0.SQRT2); Ecran.afficherln("Nombre d'or = ",Bibliotheque0.NOMBREDOR); } }
TestBibliotheque0.java - Exemple d'exécution
Types agrégés Développement normal des types agrégés dans le code source de la bibliothéque Utilisation des noms complets des types agrégés dans le code source qui utilise la bibliothèque Exemple: Une bibliothèque des types agrégés de modélisation de positions et de directions à coordonnées 2D réelles
/* Une bibliothèque de types agrégés */ public class Bibliotheque1 { /* Un type agrégé position dans un espace */ /* deux dimensions à coordonnées réelles */ static class Pos2D { double x = 0.0; double y = 0.0; }; /* Un type agrégé direction dans un espace */ /* deux dimensions à coordonnées réelles */ static class Dir2D { double dx = 0.0; double dy = 0.0; }; }
Bibliotheque1.java
/* Utilisation de types agrégés définis */ /* dans une bibliothèque */ public class TestBibliotheque1 { public static void main(String [] args) { /* Utilisation du type Pos2D */ /* de la bibliotheque Bibliotheque1 */ Ecran.afficherln("Une position 2D"); Bibliotheque1.Pos2D p = new Bibliotheque1.Pos2D(); Ecran.afficherln(p.x," ",p.y); Ecran.sautDeLigne(); /* Utilisation du type Dir2D */ /* de la bibliotheque Bibliotheque1 */ Ecran.afficherln("Une direction 2D"); Bibliotheque1.Dir2D d = new Bibliotheque1.Dir2D(); Ecran.afficherln(d.dx," ",d.dy); } }
TestBibliotheque1.java - Exemple d'exécution
Fonctions Développement normal des fonctions dans le code source de la bibliothéque Utilisation des noms complets des fonctions dans le code source qui utilise la bibliothèque Exemple: Une bibliothèque de fonctions de manipulation de tableaux d'entiers
/* Une bibliothèque de fonctions */ public class Bibliotheque2 { /* Fonction d'affichage d'un tableau d'entiers */ static void affichage(int [] t) { int i; for ( i = 0 ; i < t.length ; i = i+1 ) { Ecran.formater("%3d",t[i]); } Ecran.sautDeLigne(); } /* Fonction de creation d'un tableau */ /* de n entiers tirés au sort */ /* dans l'intervalle [0,m[ */ static int [] creation(int n,int m) { int [] res = new int[n]; int i; for ( i = 0 ; i < n ; i = i+1 ) { res[i] =(int) (Math.random()*m); } return res; } }
Bibliotheque2.java
/* Utilisation de fonctions définies */ /* dans une bibliothèque */ public class TestBibliotheque2 { public static void main(String [] args) { int n; int m; int [] tab; Ecran.afficher("n = ? "); n = Clavier.saisirInt(); Ecran.afficher("m = ? "); m = Clavier.saisirInt(); tab = Bibliotheque2.creation(n,m); Bibliotheque2.affichage(tab); } }
TestBibliotheque2.java - Exemple d'exécution
Clavier.class - Ecran.class - Documentation