Beruflich Dokumente
Kultur Dokumente
1
Le code source du premier
programme point dentre
public class HelloWorld { dexcution
public static void main(String[] args){
System.out.println("Hello world");
Premier programme Java }
}
Un code source ne peut tre excut En Java, le code source nest pas traduit
directement par un ordinateur directement dans le langage de lordinateur
Il faut traduire ce code source dans un langage Il est dabord traduit dans un langage appel
que lordinateur (le processeur de lordinateur) bytecode , langage dune machine virtuelle
peut comprendre (langage natif) (JVM ; Java Virtual Machine) dfinie par
Un compilateur est un programme qui effectue Oracle
cette traduction Ce langage est indpendant de lordinateur qui
va excuter le programme
R. Grin Introduction Java 9 R. Grin Introduction Java 10
2
Excution du bytecode Excution avec java
Le bytecode doit tre excut par une JVM Oracle fournit le programme java qui simule une
Cette JVM nexiste pas ; elle est simule par Nom dune classe
JVM
(pas dun fichier) ;
un programme qui interprte le bytecode : java HelloWorld pas de suffixe .class !
lit les instructions (en bytecode) du excute le bytecode de la mthode main de la
programme .class, classe HelloWorld
les traduit dans le langage natif du HelloWorld est un nom de classe et pas un nom
processeur de lordinateur de fichier. Donc
lance leur excution on ne peut pas donner un chemin
pas de suffixe .class
R. Grin Introduction Java 13 R. Grin Introduction Java 14
3
Une certaine lenteur... Java et les autres langages
Les vrifications effectues sur le bytecode et Java est devenu en quelques annes un des
ltape dinterprtation de ce bytecode (dans le langages de dveloppement les plus utiliss,
langage natif du processeur) ralentissent surtout pour les applications qui ont besoin
lexcution des classes Java dune grande portabilit ou dune grande
Mais les techniques Just In Time (JIT) ou souplesse sur Internet
Hotspot rduisent ce problme : elles Pour les applications qui ncessitent une trs
permettent de ne traduire quune seule fois en grande rapidit dexcution, on peut prfrer
code natif les instructions qui sont (souvent encore les langages C, C++, ou le bon vieux
pour Hotspot) excutes Fortran (qui a des bibliothques trs utilises pour le
calcul scientifique)
R. Grin Introduction Java 19 R. Grin Introduction Java 20
4
Votre environnement de
Version couverte par le cours
dveloppement
diteur de texte (emacs, avec JDE)
Java SE 7
Compilateur (javac)
Attention, Java est pass directement de la Interprteur de bytecode (java)
version 1.4 la version 5.0 Aide en ligne sur le JDK (sous navigateur Web)
En effet, lancienne numrotation des Gnrateur automatique de documentation (javadoc)
diffrentes versions (1.0, 1.1, 1.2,) ne Testeur pour applet (appletviewer)
refltaient pas les importantes modifications Dbogueur (jdb) Integrated Development
Environment
effectues ; elles auraient plutt d sappeler ...
1, 2, Aprs ltude des paquetages, un IDE tel que
NetBeans ou Eclipse
R. Grin Introduction Java 25 R. Grin Introduction Java 26
Variables denvironnement
PATH : doit inclure le rpertoire qui contient
les utilitaires Java (javac, java, javadoc,)
Complments sur la compilation CLASSPATH : indique le chemin de
et lexcution recherche des classes de lutilisateur
vitez la variable CLASSPATH
5
Compilation et excution de la 2 classes dans 2 fichiers
/** Modlise un point de coordonnes x, y */
classe Point public class Point {
private int x, y; Fichier Point.java
public Point(int x1, int y1) {
x = x1; y = y1;
La compilation du fichier Point.java }
public double distance(Point p) {
javac Point.java return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y));
}
fournit 2 fichiers classes : Point.class et }
TestPoint.class
/** Pour tester la classe Point */
On lance lexcution de la classe TestPoint class TestPoint {
qui a une mthode main() public static void main(String[] args) {
Point p1 = new Point(1, 2);
java TestPoint Point p2 = new Point(5, 1);
System.out.println("Distance : " + p1.distance(p2));
}
} Fichier TestPoint.java
R. Grin Introduction Java 31 R. Grin Introduction Java 32
Architecture dun
programme source Java Chargement dynamique des classes
Durant lexcution dun code Java, les classes
Programme source Java = ensemble de fichiers
(leur bytecode) sont charges dans la JVM au
.java
fur et mesure des besoins
Chaque fichier .java contient une ou
Une classe peut tre charge
plusieurs dfinitions de classes
depuis la machine locale (le cas le plus
Au plus une dfinition de classe public par
frquent)
fichier .java (avec nom du fichier = nom de la
classe publique) depuis une autre machine, par le rseau
par tout autre moyen (base de donnes,)
R. Grin Introduction Java 33 R. Grin Introduction Java 34
Applications indpendantes
Applets rfrence par une page HTML et
Applications indpendantes excute dans la JVM dun navigateur Web
et applets
6
Application indpendante Mthode main
Le profil dune mthode est donn par son en-
Lancement de lexcution de la classe de tte de dfinition ; celui de main() doit tre :
lancement de lapplication (dite classe public static void main(String[] args)
principale ; main en anglais) ; par exemple :
java TestPoint Signature dune mthode : nom de la mthode et
ensemble des types de ses paramtres
java lance linterprtation du code de la
mthode main() de la classe TestPoint Signature de la mthode main() :
main(String[])
En Java, le type de la valeur de retour de la mthode ne
fait pas partie de sa signature (au contraire de la
dfinition habituelle dune signature)
R. Grin Introduction Java 37 R. Grin Introduction Java 38
7
Excution de lapplet Utilit des applets
Le navigateur a sa propre machine virtuelle Les applets permettent de faire des pages Web
plus riches (grce aux possibilits offertes par Java)
Un programme Java spcial dmarr par le
navigateur va lancer certaines mthodes La page Web peut contenir
hrites de la classe Applet : init(), des animations ou des mises en forme complexes
start(), stop(), destroy(), paint() pour mettre en valeur certaines informations
init() est excut seulement quand lapplet des rsultats de calculs complexes
est lance pour la premire fois des informations dynamiques (pas connues au
moment o la page Web statique est cre)
paint() dessine lapplet dans la page Web trouves en interrogeant une base de donnes
...
R. Grin Introduction Java 43 R. Grin Introduction Java 44
8
Un objet Interactions entre objets
Les objets interagissent en senvoyant des
messages synchrones
Comportement Arrte-toi Dmarre Les mthodes de la classe dun objet
vitesse
correspondent aux messages quon peut lui
tat envoyer : quand un objet reoit un message, il
direction
(cach) ... excute la mthode correspondante
Objet qui reoit
Exemples : Message envoy
(interface publique) va le message
x km/h objet1.decrisToi();
employe.setSalaire(20000);
voiture.demarre(); Paramtre
Un objet Une voiture du message
voiture.vaAVitesse(50);
R. Grin Introduction Java 49 R. Grin Introduction Java 50
9
Regrouper les objets Elments dune classe
Les objets qui collaborent dans une application Les constructeurs (il peut y en avoir plusieurs)
sont souvent trs nombreux servent crer les instances (les objets) de la
classe
Mais on peut le plus souvent dgager des types
dobjets : des objets ont une structure et un Quand une instance est cre, son tat est
conserv dans les variables dinstance
comportement trs proches, sinon identiques
Les mthodes dterminent le comportement
Par exemple, tous les livres dans une des instances de la classe quand elles reoivent
application de gestion dune bibliothque un message
La notion de classe correspond cette notion Les variables et les mthodes sappellent les membres
de types dobjets de la classe
R. Grin Introduction Java 55 R. Grin Introduction Java 56
10
Classes et instances Constructeurs dune classe
Une instance dune classe est cre par un des Chaque classe a un ou plusieurs constructeurs
constructeurs de la classe
qui servent
Une fois quelle est cre, linstance
crer les instances
a son propre tat interne (les valeurs des
variables dinstance) initialiser ltat de ces instances
partage le code qui dtermine son Un constructeur
comportement (les mthodes) avec les autres a le mme nom que la classe
instances de la classe
na pas de type retour
11
Accesseurs
Deux types de mthodes servent donner accs
aux variables depuis lextrieur de la classe :
les accesseurs en lecture pour lire les valeurs
Les mthodes des variables ; accesseur en lecture est
souvent abrg en accesseur ; getter en
anglais
les accesseurs en criture, ou modificateurs,
ou mutateurs, pour modifier leur valeur ;
setter en anglais
R. Grin Introduction Java 67 R. Grin Introduction Java 68
12
Surcharge dune mthode Surcharge dune mthode (2)
En Java, on peut surcharger une mthode, En Java, il est interdit de surcharger une
cest--dire, ajouter une mthode qui a le mme mthode en changeant seulement le type de
nom mais pas la mme signature quune autre retour
mthode : Autrement dit, on ne peut diffrencier 2
calculerSalaire(int)
calculerSalaire(int, double) mthodes par leur type retour
Par exemple, il est interdit davoir ces 2
indice dans prime accordes mthodes dans une classe :
la grille des aux commerciaux int calculerSalaire(int)
salaires
double calculerSalaire(int)
R. Grin Introduction Java 73 R. Grin Introduction Java 74
toString() Exemple
Il est conseill dinclure une mthode public class Livre {
toString dans toutes les classes que lon crit ...
Cette mthode renvoie une chane de caractres public String toString() {
return "Livre [titre=" + titre
qui dcrit linstance + ",auteur=" + auteur
Une description compacte et prcise peut tre + ",nbPages=" + nbPages
trs utile lors de la mise au point des + "]";
programmes }
}
System.out.println(objet) affiche la
valeur retourne par objet.toString()
Richard Grin Classes et objets page 75 Richard Grin Classes et objets page 76
Types de variables
Les variables dinstances
sont dclares en dehors de toute mthode
conservent ltat dun objet, instance de la classe
sont accessibles et partages par toutes les mthodes
Les variables de la classe
Les variables locales
sont dclares lintrieur dune mthode
conservent une valeur utilise pendant lexcution de
la mthode
ne sont accessibles que dans le bloc dans lequel elles
ont t dclares
R. Grin Introduction Java 77 R. Grin Introduction Java 78
13
Variable locale Dclaration des variables
ou variable dinstance ? Toute variable doit tre dclare avant dtre
utilise
Il arrive dhsiter entre rfrencer un objet
Dclaration dune variable : on indique au
par une variable locale dune mthode compilateur que le programme va utiliser une
ou par une variable dinstance de la classe variable de ce nom et de ce type
double prime;
Si lobjet est utilis par plusieurs mthodes de Employe e1;
la classe, lobjet devra tre rfrenc par une Point centre;
variable dinstance
Dclaration / cration
Initialisation dune variable (2) public static void main(String[] args) {
Employe e1;
e1.setSalaire(1200); provoque une erreur
NullPointerException
On peut initialiser une variable en la dclarant
OK ?
}
La formule dinitialisation peut tre une
Il ne faut pas confondre
expression complexe :
double prime = 200.0; dclaration dune variable
Employe e1 = new Employe("Dupond", "Jean"); cration dun objet rfrenc par cette variable
double salaire = prime + 500.0; Employe e1;
dclare que lon va utiliser une variable e1 qui
rfrencera un objet de la classe Employe,
mais aucun objet nest cr
R. Grin Introduction Java 83 R. Grin Introduction Java 84
14
Dclaration / cration (2) Dsigner les variables dune instance
Il aurait fallu crire :
Soit un objet o1 ; la valeur dune variable v de
public static void main(String[] args) {
o1 est dsigne par o1.v
Employe e1;
e1 = new Employe("Dupond", "Pierre"); Par exemple,
e1.setSalaire(1200); Cercle c1 = new Cercle(p1, 10);
. . . System.out.println(c1.rayon); // affiche 10
}
Remarque : le plus souvent les variables sont private
et on ne peut pas y accder directement en dehors de
leur classe
Degrs dencapsulation
lhritage
R. Grin Introduction Java 89 R. Grin Introduction Java 90
15
Protection de ltat interne dun objet Exceptions pour les protections
Encore
Autant que possible ltat dun objet (les des variables ( viter) plus rare !
variables dinstance) doit tre private
Dans de rares cas, on peut autoriser laccs au
Si on veut autoriser la lecture dune variable paquetage, ou tous (public)
depuis lextrieur de la classe, on lui associe un
accesseur, avec le niveau daccessibilit que si la variable ne risque pas de recevoir des
lon veut valeurs aberrantes
Si on veut autoriser la modification dune si lon veut un accs rapide pour amliorer
variable, on lui associe un modificateur, qui les performances
permet la modification tout en contrlant la pour simplifier lcriture du code qui accde
validit de la modification la variable
R. Grin Introduction Java 91 R. Grin Introduction Java 92
this
Le code dune mthode dinstance dsigne
linstance qui a reu le message (linstance
Dsigner linstance qui reoit le courante), par le mot-cl this
message, this donc, les membres de linstance courante
en les prfixant par this.
Lorsquil ny a pas dambigut, this est
optionnel pour dsigner un membre de
linstance courante
16
Autre exemple de this explicite
public class Document {
Interdit de modifier this
...
public void imprimer(Imprimante imprimante) {
imprimante.ajouterRequete(this); this se comporte comme une variable final
} (mot-cl tudi plus loin), cest--dire quon ne
...
peut le modifier ; le code suivant est interdit :
public class Imprimante {
this = valeur;
...
public void ajouterRequete(Document doc) {
// Ajoute le fichier associ au document
// dans la file dattente dimpression
fileAttente.ajouter(doc.getFichier());
...
Variables de classe
Certaines variables sont partages par toutes
les instances dune classe. Ce sont les
variables de classe (modificateur static)
Mthodes et variables de classe Si une variable de classe est initialise dans
sa dclaration, cette initialisation est excute
une seule fois quand la classe est charge en
mmoire
17
Dsigner une mthode de classe Mthodes de classe
Depuis une autre classe, on la prfixe par le Comme une mthode de classe excute une
nom de la classe : action indpendante dune instance particulire
int n = Employe.getNbEmploye(); de la classe, elle ne peut utiliser de rfrence
Depuis sa classe, le nom de la mthode suffit une instance courante (this)
On peut aussi la prfixer par une instance quelconque Il serait, par exemple, interdit dcrire
de la classe ( viter car cela nuit la lisibilit : on ne static double tripleSalaire() {
voit pas que la mthode est static) : return this.salaire * 3;
int n = e1.getNbEmploye(); }
18
Reprsentation graphique dune
Exemple
classe en notation UML (Unified
class UneClasse {
private int[] tab = new int[25]; Modeling Language)
{
for (int i = 0; i < 25; i++) { Cercle Cercle
tab[i] = -1; private Point centre - Point centre
}
private int rayon - int rayon
}
. . . public Cercle(Point, int) + Cercle(Point, int)
public void setRayon(int) + void setRayon(int)
public int getRayon() + int getRayon()
public double surface() + double surface()
19
Commentaires
Sur une seule ligne :
// Voici un commentaire
int prime = 1500; // prime fin de mois Rappels :
Sur plusieurs lignes :
/* Premire ligne du commentaire Quelques principes de
suite du commentaire */
programmation
Documentation automatique par javadoc
/**
* Cette mthode calcule ...
* Elle utilise ...
*/
Comment ? Modularit
Un programme est modulaire sil est dcoup
Modularit : dcomposer en lments plus en modules (plus ou moins) indpendants
simples Un bon dcoupage doit satisfaire les 2 critres :
Encapsulation : cacher ce quil nest pas forte cohsion des lments dun module
indispensable de voir faible couplage entre deux modules diffrents
Lisibilit : faciliter la comprhension des
Ces 2 principes favorisent lutilisation, la
programmes
rutilisation et la maintenance des modules :
Rutilisabilit : crire des modules
rutilisables dans les futurs dveloppements plus de souplesse : un module - une fonctionnalit
(difficile) les modifications dun module ont le moins
dimpacts possible sur les autres modules
R. Grin Introduction Java 119 R. Grin Introduction Java 120
20
Encapsulation
Attribution des fonctionnalits
Lencapsulation est le fait de ne montrer et de
ne permettre de modifier que ce qui est Il peut tre difficile de choisir lobjet qui doit
ncessaire une bonne utilisation tre le responsable de lexcution dune
on montre linterface (services offerts) dun module fonctionnalit
on cache limplmentation (comment sont rendus On peut faire la liste des informations
les services)
ncessaires lexcution
Les avantages en sont :
simplification de lutilisation (la complexit Lobjet qui possde le plus dinformations est
dutilisation ne dpend que de linterface publique) souvent le meilleur choix
meilleure robustesse du programme Localisation => modularit et encapsulation
simplification de la maintenance de lapplication facilites
R. Grin Introduction Java 121 R. Grin Introduction Java 122
21