WIDLOCHER Antoine GREYC CNRS UMR 6072 1 Java Utilisation des packages Antoine WIDLÖCHER Master MI3 - M2 Université de Caen 17 janvier 2008
WIDLOCHER Antoine GREYC CNRS UMR 6072 2 Plan Problématique Intérêt des packages Cas d'utilisation Notation et organisation physique Syntaxe (déclaration) Conventions de nommage Organisation physique Utilisation des packages Accessibilité Méthodes d'accès Règles d'emploi Dépendance et interdépendance
WIDLOCHER Antoine GREYC CNRS UMR 6072 3 Définition Un package est une collection de types classes interfaces... en relation permettant la gestion des espaces de noms des protections d'accès
WIDLOCHER Antoine GREYC CNRS UMR 6072 4 Plan Intérêts et cas d'utilisation
WIDLOCHER Antoine GREYC CNRS UMR 6072 5 Intérêts Organiser son code Pour une application d'une certaine taille rendre l'organisation plus lisible plus arborescente Rassembler des classes (ou des ressources) appartenant à une même «catégorie» visant à fournir une même fonctionnalité Séparer des classes étant «conceptuellement» séparables ex: séparer Modèle, Vue et Contrôleur
WIDLOCHER Antoine GREYC CNRS UMR 6072 6 Intérêts Protéger son code Certaines parties d'une application n'ont pas à être connues d'autres parties Certains objets n'ont pas à être visibles par d'autres objets Ex: une vue connaît son modèle, mais un modèle doit être pensé sans référence à sa vue Eviter les erreurs en étant aussi peu permissif que possible en tirant avantage des «protections» proposées par java un package correspond à une «zone de visibilité» Eviter les conflits de nommage
WIDLOCHER Antoine GREYC CNRS UMR 6072 7 Intérêts Partager, distribuer son code Entre programmes isoler ce qui est réuilisable ex: penser à l'api de base, aux parsers XML... Entre développeurs on pourrait certes s'échanger des classes que chacun devrait intégrer à son propre code... :-( Rendre ce code utilisable sélectionner, désigner ce que l'on souhaite utiliser, importer utiliser des classes extérieures en les laissant être telles
WIDLOCHER Antoine GREYC CNRS UMR 6072 8 Plan Notation et organisation physique
WIDLOCHER Antoine GREYC CNRS UMR 6072 9 Déclaration Pour inclure un élément dans un package et «créer» le package s'il n'existe pas package lenomdupackage; public class LaClasse { } La classe laclasse fait partie du package lenomdupackage Plusieurs éléments auront la même déclaration s'ils appartiennent au même package
WIDLOCHER Antoine GREYC CNRS UMR 6072 10 «Sous» packages Différents packages peuvent être organisés hiérarchiquement et rassemblés par fonctions, catégories... un package peut comporter des sous-packages package general; public class LaClasse {} package general.moinsgeneral.encoremoinsgeneral; public class LaClassePatriculiere {} Attention! cette hiérarchie n'a de sens que pour la lisibilité pas de «privilège» d'accès pour un «sous» package
WIDLOCHER Antoine GREYC CNRS UMR 6072 11 Nommage Dans deux packages distincts deux classes peuvent avoir le même nom Mais risque de collision (lors du partage) si différents packages portent le même nom Convention pour garantir l'unicité du nommage d'un package on se base sur le nom de domaine inversé de l'institution qui a à charge la résolution des conflits internes qui pourraient intervenir sur les «sous» packages package fr.unicaen.mi3.m2.lepackagequivabien; public class LaClasse {}
WIDLOCHER Antoine GREYC CNRS UMR 6072 12 Nommage Par convention les noms de package sont en minucules contrairement aux «habitudes» de notation java package fr.unicaen.mi3.m2.lepackagequivabien; package fr.unicaen.mi3.m2.lepackagequivabien; Certains domaines peuvent poser problème dans ce cas, on remplace par un underscore «_» s'ils contiennent un mot clef java blabla.int int_.blabla un tiret «-» bla-bla bla_bla s'ils commencent par un chiffre bla.4.bla bla._ 7. bla
WIDLOCHER Antoine GREYC CNRS UMR 6072 13 Organisation physique L'organisation physique doit refléter l'organisation en packages package fr.unicaen.mi3.m2.lepackage; public class LaClasse {} fr unicaen mi3 m2 lepackage LaClasse.java
WIDLOCHER Antoine GREYC CNRS UMR 6072 14 Plan Utilisation des packages
WIDLOCHER Antoine GREYC CNRS UMR 6072 15 Accessibilité Sont visibles par défaut pour un élément les autres éléments du même package les éléments du «package par défaut» les éléments du package java.lang Pour que les éléments des autres packages soient visibles ils doivent être déclarés public ils doivent être dans le classpath on doit soit faire référence au nom complet du membre soit importer le membre soit importer le package dont il est issu
WIDLOCHER Antoine GREYC CNRS UMR 6072 16 Nom complet Au moment du code où le membre intervient on le désigne simplement par son nom complet package fr.unicaen.mi3; public class ObjetRare {} package fr.unicaen.autrepackage; public class LaClasse {... fr.unicaen.mi3.objetrare obj = new fr.unicaen.mi3.objetrare() ;... } Avantage permet de désambiguïser dans certains cas
WIDLOCHER Antoine GREYC CNRS UMR 6072 17 Import ciblé On peut importer le membre exigé pour l'ensemble de la classe d'accueil pour éviter d'éventuelles redondances et alléger significativement le code package fr.unicaen.mi3; public class ObjetRare {} package fr.unicaen.autrepackage; import fr.unicaen.mi3.objetrare; public class LaClasse {... ObjetRare obj = new ObjetRare() ;... }
WIDLOCHER Antoine GREYC CNRS UMR 6072 18 Import global On peut importer le package du membre exigé pour l'ensemble de la classe d'accueil pour éviter d'éventuelles redondances dans les imports package fr.unicaen.mi3; public class ObjetRare {} package fr.unicaen.mi3; public class AutreObjetRare {} package fr.unicaen.autrepackage; import fr.unicaen.mi3.*; public class LaClasse { ObjetRare obj = new ObjetRare() ; AutreObjetRare obj = new AutreObjetRare() ;... }
WIDLOCHER Antoine GREYC CNRS UMR 6072 19 Attention Les imports ne sont pas «récursifs» package fr.unicaen.mi3; public class ObjetRare {} package fr.unicaen.mi3.m2; public class AutreObjetRare {} package fr.unicaen.autrepackage; import fr.unicaen.mi3.*; public class LaClasse { ObjetRare obj = new ObjetRare() ; AutreObjetRare obj = new AutreObjetRare() ;... }
WIDLOCHER Antoine GREYC CNRS UMR 6072 20 Plan Règles d'utilisation des packages
WIDLOCHER Antoine GREYC CNRS UMR 6072 21 Règles Comment procéder au découpage en packages? règle fondamentale: les packages peuvent bien entendu être dépendants mais pas interdépendants bien garder à l'esprit le découpage proposé en standard par exemple par J2SE que deviendrions-nous si java.util devait connaître fr.unicaen.mi3.m2.lepackagevitefait?
WIDLOCHER Antoine GREYC CNRS UMR 6072 22 Plan Rappels: classpath, compilation, exécution...
WIDLOCHER Antoine GREYC CNRS UMR 6072 23 Le ClassPath Classpath désigne l'ensemble des «lieux» ou java pourra trouver des classes nécessaires à la compilation et ou à l'exécution À la compilation on précise au compilateur le classpath fournissant les classes nécessaires à la compilation javac -classpath.:rep1/:rep2/:archive.jar *.java À l'exécution on précise à la machine virtuelle le classpath fournissant les classes nécessaires à l'exécution... peuvent n'être pas les mêmes qu'à la compilation java -classpath classes/ fr.unicaen.classeaexcecuter
WIDLOCHER Antoine GREYC CNRS UMR 6072 24 Organisation On sépare les sources: conventionnellement répertoire src/ les classes: conventionnelement répertoire classes/ On ajuste les paramètres de compilation javac -sourcepath src/ -d classes/ src/fr/unicaen/*.java Et les paramètres d'exécution java -classpath classes/ fr.unicaen.classeaexcecuter