Académique Documents
Professionnel Documents
Culture Documents
- Point centre
- int rayon
+ Cercle(Point, int)
+ void setRayon(int)
+ int getRayon()
+ double surface()
50
Les classes internes
• Dans une classe E, on peut trouver une ou plusieurs
références à des objets de type I.
class E
{ .....
class I
{ .....
}
private I i1, i2 ; /* les champs i1 et i2 de E sont des références
a des objets de type I */
}
• Ici, un objet de classe E contient deux membres de type I
51
Lien entre objet interne et objet
externe
• Un objet d’une classe interne est toujours associé, au
moment de sa création , à un objet d’un classe externe
dont on dit qu’il lui a donné naissance.
– Exemple, l’objet de référence i sera associé à l’objet de
type E auquel sera appliquée la méthode fe.
• Un objet d’une classe interne a toujours accès aux
champs et méthodes (même privés) de l’objet externe
lui ayant donné naissance
• Un objet de classe externe a toujours accès aux
champs et méthodes (même privés) d’un objet d’une
classe interne auquel il a donné naissance.
52
Déclaration et instanciation d’un objet
d’une classe interne
• En dehors de E, on peut toujours déclarer une
référence à un objet de type I, par:
E.I i ; // référence a un objet de type I (interne à E)
• La création d’un objet de type I ne peut se faire qu’en le
rattachant à un objet de sa classe englobante.
E e = new E() ;
i = e. new I() ; /* création d’un objet de type I, rattaché à l’objet e
et affectation de sa référence à i */
53
Classes internes locales
• Java permet de définir une classe interne I dans une méthode f d’une
classe E.
– Dans ce cas, l’instanciation d’objets de type I ne peut se faire que dans f.
– En plus des accès déjà décrits, un objet de type I a alors accès aux variables
locales finales de f.
public class E
{ .....
void f()
{ final int n=15 ; float x ;
class I // classe interne à E, locale à f
{ ..... // ici, on a accès a n, pas a x
}
I i = new I() ; // classique
}
}
54
Classes internes statique
• Java permet de créer des classes internes autonomes en
employant l’attribut static
public class E // classe englobante
{ .....
public static class I // définition (englobée dans celle de E)
{ ..... // d’une classe interne autonome}
}
• Depuis l’extérieur de E, on peut instancier un objet de classe I de
cette façon :
E.I i = new E.I() ;
• L’objet i n’est associé à aucun objet de type E.
• Bien entendu, la classe I n’a plus accès aux membres de E, sauf s’il
s’agit de membres statiques.
55
Droits d’accès pour les classes internes
compte tenu de l’imbrication de leur définition dans celle
d’une autre classe :
• avec public, la classe interne est accessible partout où sa
classe externe l’est ;
• avec private (qui est utilisable avec une classe interne, alors
qu’il ne l’est pas pour une classe externe), la classe interne
n’est accessible que depuis sa classe externe ;
• sans aucun mot-clé, la classe interne n’est accessible que
depuis les classes du même paquetage.
• Avec protected (qui est utilisable avec une classe interne,
alors qu’il ne l’est pas pour une classe externe), la classe
interne n’est accessible que depuis les classes du même
paquetage et les classe dérivée de sa classe externe.
La classe Object
• Classe fournie par java: c’est la classe mère de
toute les classe. Parmi les méthodes de cette
classe :
public String toString() {...}
protected native Object clone() throws
CloneNotSupportedException {...}
public equals(java.lang.Object) {...}
public native int hashCode() {...}
protected void finalize() throws Throwable {...}
La classe Scanner
• Permet le lecture des données sur l’entrée standard:
clavier ou fichier.
• D’abord l’importer :
import java.util.Scanner;
• Ensuite créer un objet de la classe Scanner :
Scanner sc = new Scanner(System.in);
String chaine= “une chaine de caracteres”
Scanner str = new Scanner(chaine);
75
Quelques paquetages du SDK
• java.lang : classes de base de Java
• java.util : collections
• java.io : entrées-sorties
• java.awt : interface graphique
• javax.swing : interface graphique avancée
• java.applet : applets
• java.net : réseau
• java.sql: accès aux bases de données
76
Nommer une classe
• Le nom complet d'une classe est le nom de la
classe préfixé par le nom du paquetage :
java.util.ArrayList
• Une classe du même paquetage peut être
désignée par son nom « terminal » (les classes
du paquetage java.util peuvent désigner la
classe cidessus par « ArrayList »)
• Une classe d’un autre paquetage doit être
désignée par son nom complet
77
Importer une classe d’un paquetage
• Pour pouvoir désigner une classe d'un autre
paquetage par son nom terminal, il faut
l’importer
import java.util.ArrayList;
public class Classe {
…
ArrayList liste = new ArrayList();
• On peut utiliser une classe sans l’importer ;
l’importation permet seulement de raccourcir le
nom d’une classe dans le code
78
Importer toutes les classes
d’un paquetage
• On peut importer toutes les classes d'un
paquetage :
import java.util.*;
• Les classes du paquetage java.lang sont
automatiquement importées
79
Importer des constantes static
• Depuis le JDK 5.0 on peut importer des variables ou
méthodes statiques d’une classe ou d’une interface avec
« import static »
• Example1:
import static java.lang.Math.*;
public class Machin {
...
x = max(sqrt(abs(y)), sin(y));
• Example 2:
import static java.lang.Math.PI;
...
x = 2 * PI;
80
Ajout d’une classe dans un paquetage
• package nom-paquetage;
• doit être la première instruction du fichier
source définissant la classe (avant même les
instructions import)
• Par défaut, une classe appartient au «
paquetage par défaut » qui n’a pas de nom, et
auquel appartiennent toutes les classes
situées dans le même répertoire (et qui ne
sont pas dans un paquetage particulier)
81
Fichier contenant plusieurs classes
• L’instruction package doit être mise avant la
première classe du fichier
• Toutes les classes du fichier sont alors mises
dans le paquetage
• De même, les instructions « import » doivent
être mises avant la première classe et
importent pour toutes les classes du fichier
• Rappel : il n’est pas conseillé de mettre
plusieurs classes dans un même fichier
82
Sous-paquetage
• Un paquetage peut avoir des sous-paquetages
• Par exemple, java.awt.event est un
souspaquetage de java.awt
• L’importation des classes d’un paquetage
n’importe pas les classes des sous-paquetages ;
• on devra écrire par exemple :
import java.awt.*;
import java.awt.event.*;
83
Nom d’un paquetage
• Le nom d’un paquetage est hiérarchique :
java.awt.event
84
Encapsulation d’une classe
dans un paquetage
• Si la définition de la classe commence par
public class la classe est accessible de partout
• Sinon, la classe n’est accessible que depuis les
classes du même paquetage
85
Deployment d’une application
Java
Fichiers archives de java
86
Archive java
• Une archive java (fichier jar) est un format
particulier permettant de regrouper dans un
seul fichier (l’archive) plusieurs autres fichiers
– Le fichier jar regroupe tous les fichier nécessaire
au fonctionnement de le l’application.
– Ils contiennent les .class et autres ressources
nécessaires (icones, etc.)
87
Avantage de l’archive
• Les fichiers archives peuvent être compressés afin
d’optimiser leurs stockage et leur transfert sur un
réseau
• Les applet peuvent être récupérées par le navigateur
avec une seule requêtes http
<applet
code=AppletClassName.class
archive="JarFileName.jar"
width=width height=height> </applet>
• la sécurité est améliorée par la signature l’archive.
• Le format des archives est standard et est donc
portable.
88
Manipulation d’une archive
• Creation d’une archive
jar cf nomDuFichier listeFichier
– c: indique à la commande jar que l’on souhaite créer une
archive.
– f: indique que la commande jar doit générer un fichier.
L’extension du fichier est .jar
• Si plusieurs fichiers sont à inclure dans l’archive, leurs
noms sont séparés par un espace.
• Si un nom de répertoire est présent dans la liste, son
contenu entier est ajouté à l’archive.
• Le caractère generique * est également autorisé dans
la liste.
89
Manipulation d’une archive
• L’archive est créer dans le répertoire courant
• Un fichier manifest par défaut est ajouté à
l’archive
• Les option suivantes sont également disponible:
– v: affiche le nom des fichier au fur et à mesure de
l’ajout dans l’archive.
– O: désactive la compression du fichier archive
– M: désactive la génération du manifest
– m: ajout le manifest indiqué à l’archive.
– -C : supprime le nom de répertoire dans l’archive.
90
Manipulation d’une archive
• Visualisation d’une archive
– Pour afficher sur la console le contenu de l’archive
ardoise : jar tf ardoise.jar
– Pou afficher des information supplémentaire sur
le fichier on utilise le paramètre v :
• jar tvf ardoise.jar
91
Manipulation d’une archive
• Extraction des fichiers:
– Les fichier peuvent être extraits par la commande
jar xvf ardoise.jar
– Le fichier extrait sera recrée alors sur le disque.
– L’extraction peut ne concerner que certains
fichiers: jar xvf ardoise.jar ClientArdoise.class
92
Manipulation d’une archive
• Mise à jour
– jar uf ardoise.jar connect.gif : le fichier sera
ajouté s’il n’existe pas déjà. S’il existe il sera
remplacé
– On peut ajouter ou modifier plusieurs fichiers à la
fois.
93
Manipulation d’une archive
• Exécution
– java –jar ardoise.jar : cette commande permet
d’exécuter l’application sans extraire l’archive.
– Dans ce cas, le fichier contenant main doit être
fourni à la machine virtuelle par le fichier manifest
de l’archive.
94
Le manifest
• Le manifest est un fichier texte contenant des
couples nom de paramètre et valeur de
paramètre.
• Ce fichier est toujours nommé MANIFEST.MF et
se trouve dans le répertoire MEFA-INF de
l’archive.
• A la création d’un fichier archive, un fichier
manifest est crée par défaut. Il contient les
information suivante:
– Manifest-Version: 1.0
– Created-By: 1.7.0
95
Le manifest
• Pour ajouter des informations au manifest, on
doit d'abord créer un fichier texte contenant
ces informations.
• Ensuite fusionner ce fichier texte avec le
manifest par défaut de l’archive en utilisant
l’option m de la commande jar.
96
Le manifest
• Exemple: Dans le fichier infos.txt on ajoute
l’information:
– Main-Class: ClientArdoise
• On fusionne avec la commande:
– jar cfm ardoise.jar infos.txt *
• Le fichier manifest contiendra alors les
information:
– Manifest-Version: 1.0
– Created-By: 1.7.0
– Main-Class: ClientArdoise
97