Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr ENSTA : cours IN204 Introduction à JAVA Olivier Sigaud LIP6/AnimatLab olivier.sigaud@lip6.fr 01.44.27.88.53 Page : 1
Plan Ecole Nationale Supérieure de Techniques Avancées du (ENSTA) -http://www.ensta.fr cours 3 Modularité et packages Encapsulation et contrôle d'accès CLASSPATH JAVADOC Page : 2
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Packages Page : 3
Modularité Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr La modularité est une propriété fondamentale de tous les langages orientés objets. Le découpage en module est une technique de structuration de la conception Le but est d'assurer le maximum d'indépendance entre des modules Un des moyens de programmer de façon modulaire est de découper le programme en packages Java offre des moyens de restreindre la visibilité des éléments entre les différents packages/classes Page : 4
Packages Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Le but de la modularisation est de découper les gros programmes en modules bien séparés La difficulté consiste à minimiser les interactions entre modules Bien identifier les interfaces (ce qui est visible) Les << paquetages >> ou << packages >> fournissent une représentation du découpage en modules qui permet d'exprimer ce qui est visible d'un module à l'autre Les packages peuvent être imbriqués Page : 5
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Module : Vue externe Volant Injecteur Pistons Bougies BoiteDeVitesse Embrayage Moteur Voiture demarrer() conduire() stopper() Page : 6
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Les packages : syntaxe Déclaration : package Vehicules; en début de tous les fichiers du package Tous ces fichiers doivent être rassemblés dans un répertoire Vehicules Si on ne déclare pas de package, il existe un package par défaut De l'extérieur, les classes publiques sont visibles sous le nom Vehicules.Voiture Les autres classes ne sont pas visibles Page : 7
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Exemple On dispose d un package Vehicules dans lequel est définie la classe voiture package Principal; Class Main { public static void main(string args[]) { Vehicules.Voiture mavoiture = new Vehicules.Voiture(); mavoiture.demarrer(); } } Page : 8
Import Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Utiliser Vehicules.Voiture partout où l'on a besoin d'une voiture n'est pas très pratique On peut déclarer au début d'un fichier que la classe Voiture provient du package Vehicules : import Vehicules.Voiture; Dès lors, la classe Voiture est connue comme si l'on était dans le package Vehicules (si elle est publique) Cas imbriqué : import NomPackage1. NomPackage2.*; Page : 9
Exemple Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr package Principal; import Vehicules.Voiture; // ou import Vehicules.*; Class Main { public static void main(string args[]) { Voiture mavoiture = new Voiture(); mavoiture.demarrer(); } } Pour importer toutes les classes publiques d'un package : import NomPackage.*; Page : 10
Conflit Ecole Nationale Supérieure de Techniques Avancées de (ENSTA) -http://www.ensta.fr noms Si on a une classe Vehicules.Voiture et une classe BienDeConsommation.Voiture import Vehicules.Voiture; import BienDeConsommation.Voiture; Quand on parle de la classe Voiture, on ne sait pas de laquelle des deux il s agit Dans ce cas, il ne faut importer que l une des deux Page : 11
Exemple Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr package Principal; import BienDeConsommation.Voiture; // ou import Vehicules.*; Class Main { public static void main(string args[]) { Voiture monepave = new Voiture(); // il s agit de BienDeConso.Voiture Vehicules.Voiture mavoiture = new Vehicules.Voiture(); monepave.vendre(); mavoiture.demarrer(); } } Page : 12
Packages Ecole Nationale Supérieure de Techniques imbriqués Avancées (ENSTA) -http://www.ensta.fr Il est fréquent d avoir des packages imbriqués les uns dans les autres Si Package1 contient Package2; import Package1.*; importe le contenu de Package1 mais pas celui de Package2 import Package1.Package2.*; importe le contenu de Package2 import Package1.*; import Package1.Package2.*; pour avoir les deux Exemple : java.awt.*, java.awt.event.* Page : 13
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Conventions de nommage Intérêt du nommage par package : permet de faire cohabiter deux classes de même nom ne provenant pas du même package : NomPackage.NomClasse Risque d'avoir deux classes de même nom dans deux packages de même nom Convention des noms de packages fournis sur internet : com.site.package.autrepackage Page : 14
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Quelques Packages java.io; Entrées/Sorties java.applet; Manipulation des applets java.math; Traitements mathématiques java.lang; Primitives du langage java.util; Utilitaires, structures de données java.awt; Interface graphique AWT java.awt.events; Evénements graphiques AWT javax.swing; Interface graphique SWING javax.swing.event;evénements graphique SWING Page : 15
Packages Ecole Nationale Supérieure de Techniques fréquents Avancées (ENSTA) -http://www.ensta.fr Interface graphique (IHM) Couche de communication Bases de données... Couches basses/supérieures Page : 16
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Encapsulation Page : 17
Encapsulation Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Outre les packages, le second élément pour réaliser modularité et encapsulation est l existence d un mécanisme de contrôle de la visibilité des données Consiste à ne laisser apparaître d'un code que ce qui doit être visible de l'extérieur On parle de contrôle d accès On peut masquer des membres d'une classe ou des classes d'un package Page : 18
Contrôle Ecole Nationale Supérieure d'accès de Techniques Avancées (ENSTA) -http://www.ensta.fr : package public : classes accessibles sans restriction par défaut : éléments visibles de la totalité du package, mais pas hors du package Eviter qu une classe porte le même nom que le package qui la contient Page : 19
Contrôle Ecole Nationale Supérieure de d'accès Techniques Avancées (ENSTA) -http://www.ensta.fr : classes public : éléments accessibles sans restriction private : éléments accessibles uniquement dans la classe locale. Membres non hérités protected : éléments accessibles uniquement dans la classe et ses sous-classes par défaut : équivalent de public Page : 20
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Module : Vue externe Volant Injecteur Pistons Bougies BoiteDeVitesse Embrayage Moteur Voiture demarrer() conduire() stopper() Page : 21
Membres Ecole Nationale Supérieure de Techniques Avancées privés (ENSTA) -http://www.ensta.fr Vue d'un conducteur : public class Voiture { public Embrayage public BoiteVitesse public Volant private Moteur private Bougies embrayage; boite; volant; moteur; bougies; } public void demarrer(){...} public void conduire(){...} public void stopper (){...} private void amortirchaos(){...} private void activerbougie(){...} Problème : pas la même vue pour un garagiste Page : 22
Accesseurs Ecole Nationale Supérieure de et Techniques Avancées (ENSTA) -http://www.ensta.fr modifieurs En général, il est bon que les attributs d'une classe ne soient modifiés que par les objets de cette classe Avoir des méthodes spécifiques pour lire et modifier les attributs : les accesseurs Les accesseurs sont des méthodes comme les autres Syntaxe : Type get + Nom de l'attribut () renvoie l'attribut void set + Nom de l'attribut (Type valeur) affecte l'attribut Page : 23
Exemple Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr public class Personne { private int age; public int getage() { return age; } public void setage (int a) { age = a; } } public class Medecin { public static void main(string args[]) { Personne jean = new Personne( ); jean.getage(); } } Page : 24
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Intérêt des accesseurs On peut modifier l'attribut sans renommer les accesseurs Exemple : Si int age; devient Date datedenaissance; Partout où l'on a utilisé l'attribut age, il faut modifier le code Si l'on a utilisé getage(); setage();, alors il suffit de changer le code de l'accesseur Page : 25
Ecole Nationale Supérieure de Techniques Avancées Classe (ENSTA) -http://www.ensta.fr interne Notion de inner class Exemple : class A { class B { methode1deb() {} methode2deb() {} } methodedea(){} } C est encore un moyen d encapsulation, mais c est à éviter autant que possible Page : 26
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Danger des classes internes Nom1.Nom2 peut désigner : La classe Nom2 dans le package Nom1 La classe Nom2 interne à la classe Nom1 Certains compilateurs s y perdent Eviter autant que possible d avoir une classe qui porte le même nom qu un package Page : 27
Réutilisation Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr L intérêt principal de la modularité et de l encapsulation est la possibilité de réutiliser les programmes Il est plus facile de réutiliser des morceaux de code en programmation orientée objets Si une classe correspond à un objet concret et si ses méthodes sont naturelles, tout programme qui la met en œuvre peut réutiliser ses méthodes Il est aussi plus facile d'interpréter ce que fait le programme si les noms de classe, d'attributs et de méthodes sont naturels Page : 28
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Le CLASSPATH (1) Javac est capable de compiler à la volée les classes nécessaires pour compiler d autres classes class Voiture { Moteur moteur; } La compilation de Voiture.java entraîne la compilation de Moteur.java Le CLASSPATH est une variable d'environnement qui décrit tous les chemins où Java doit aller chercher des packages Page : 29
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Le CLASSPATH (2) Quand les classes à compiler ne sont pas immédiatement accessibles, recherche à partir du CLASSPATH S il y a plusieurs classes identiques dans plusieurs répertoires différents, on peut choisir celle que le compilateur ira chercher Danger : si vous n avez pas bien positionné le CLASSPATH, java utilise peut-être une autre classe que celle que vous croyez Page : 30
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Positionner le CLASSPATH Un chemin est une suite de répertoires depuis la racine de la machine Le CLASSPATH donne une suite de chemins, qui désignent tous les répertoires dans lesquels java peut aller chercher des classes En csh, tsch... : setenv CLASSPATH chemin1:chemin2 En bash : export CLASSPATH=chemin1:chemin2 Page : 31
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Usage du CLASSPATH Le CLASSPATH doit pointer à la racine des packages de votre application Il est important que les packages portent le même nom que les répertoires qui les contiennent Compilation : à la racine des packages Exécution : n importe où Exemple : dans /home/moi/monpackage/maclasse.java CLASSPATH = /home/moi/ Compilez dans /home/moi/ Exécutez où vous voulez Page : 32
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr JAVADOC Outil de documentation automatique d un programme Produit un ensemble de fichiers HTML à partir des classes, attributs, méthodes et commentaires Respecte le découpage en packages, met des liens, option pour ne documenter que ce qui est public. Extrêmement utile pour diffuser son propre code Page : 33
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Commentaires On commente : Les classes Les attributs Les méthodes Les paramètres Les valeurs de retour Page : 34
Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr Syntaxe des commentaires /** * ici, un commentaire * autres éléments (@ ) */ @param nomvariable : rôle de la variable @return rôle de la valeur retournée @see classe, package : mise d un lien @deprecated : périmé @author nom de l auteur Page : 35
Conventions Ecole Nationale Supérieure de de Techniques Avancées (ENSTA) -http://www.ensta.fr notation class MaClasse : majuscule pour les classes et pour les premières lettres de chaque mot int mavariable : minuscule pour les variables, attributs et méthodes, mais majuscule pour les premières lettres de chaque mot accesseurs : get et set + NomAttribut + (params) Une seule classe par fichier, le fichier porte le nom de la classe Page : 36
La Ecole Nationale Supérieure de Techniques Avancées classe (ENSTA) System -http://www.ensta.fr Permet d accéder à différentes fonctionnalités du système, en particulier les entrées-sorties Les variables in, out et err permettent d accéder à l entrée standard, la sortie standard, et la sortie standard d erreur public static currenttimemillis() renvoie le nb de millisecondes depuis 01/01/1970 public static void exit(int status) permet de quitter le programme avec un code de sortie (status) Page : 37
Ecole Nationale Supérieure de Techniques Besoin Avancées (ENSTA) -http://www.ensta.fr d'évasion? Page : 38