Você está na página 1de 21

Remerciements Michel Buffa, avec

lequel jai eu le plaisir denseigner


Java de base 1 mes premiers cours Java.
Remerciements Carine Fdle et
Universit de Nice - Sophia Antipolis Franoise Baude qui ont particip
avec Michel lamlioration des
Version 7.1.1 11/6/13
premires versions de ce support de
Richard Grin cours.
http://deptinfo.unice.fr/~grin

R. Grin Introduction Java 2

Plan du cours Java Plan de cette partie


Java de base (ce document et le suivant)
Hritage, polymorphisme, classes abstraites et Prsentation du langage
interfaces Notions sur la programmation objet
Exceptions Classes
Complments sur le langage Structure lexicale du langage
Collections Quelques principes de programmation
Gnricit
Interface graphique
Entres-sorties
R. Grin Introduction Java 3 R. Grin Introduction Java 4

Principales proprits de Java Autres proprits importantes


multi-tches (thread)
Langage orient objet, classes (les objets sont
sr
dcrits/regroups dans des classes)
fortement typ
de syntaxe proche du langage C nombreuses vrifications au chargement des classes
fourni avec le JDK (Java Development Kit) : et durant leur excution
outils de dveloppement adapt Internet
ensemble de paquetages trs riches et trs varis chargement de classes en cours dexcution (le plus
portable grce lexcution par une machine souvent par le rseau : applet ou RMI)
virtuelle : Write once, run everywhere facilits pour distribuer les traitements entre
plusieurs machines (sockets, RMI, Corba, EJB)
Un but difficile atteindre
R. Grin Introduction Java 5 R. Grin Introduction Java 6

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 }
}

La classe Helloworld est public, donc le


fichier qui la contient doit sappeler (en tenant
compte des majuscules et minuscules)
HelloWorld.java
R. Grin Introduction Java 7 R. Grin Introduction Java 8

Compilation dun code source Compilation en Java bytecode

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

La compilation fournit du bytecode Compilation avec javac


Oracle fournit le compilateur javac avec le JDK
Programme crit en Java Programme source
UneClasse.java javac HelloWorld.java
cre un fichier HelloWorld.class qui
contient le bytecode, situ dans le mme
Compilateur rpertoire que le fichier .java
Le fichier compiler peut tre dsign par un
chemin absolu ou relatif :
Programme en bytecode, Bytecode javac util/Liste.java
indpendant de lordinateur UneClasse.class

R. Grin Introduction Java 11 R. Grin Introduction Java 12

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

O doit se trouver le fichier .class ? Les JVM


java HelloWorld Les systmes qui veulent pouvoir excuter un
HelloWorld.class doit se trouver dans le programme Java doivent fournir une JVM
classpath Tous les systmes ont une JVM (Linux,
Le classpath peut recevoir une valeur Windows, MacOs,)
avec loption -classpath de la commande java : Il existe aussi quelques JVM en dur , sous
java classpath rep1/rep2 HelloWorld
forme de processeurs dont le langage natif est
avec la variable denvironnement CLASSPATH (pas le bytecode ; elles sont rarement utilises
recommand)
Par dfaut le classpath est le rpertoire courant
R. Grin Introduction Java 15 R. Grin Introduction Java 16

Le bytecode peut tre excut par Avantages de la JVM pour Internet


nimporte quelle JVM Grce sa portabilit, le bytecode dune classe
peut tre charg depuis une machine distante du
Bytecode
UneClasse.class JVM sous Linux, rseau, et excute par une JVM locale
processeur Intel La JVM fait de nombreuses vrifications sur le
bytecode avant son excution pour sassurer quil
JVM sous Unix, JVM sous Windows, JVM sous MacOS, ne va effectuer aucune action dangereuse
processeur SPARC processeur Intel processeur Motorola
La JVM apporte donc
Si un systme possde une JVM, il peut excuter tous les de la souplesse pour le chargement du code excuter
fichiers .class compils sur nimporte quel autre systme
mais aussi de la scurit pour lexcution de ce code
R. Grin Introduction Java 17 R. Grin Introduction Java 18

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

Spcifications de Java Implmentation de rfrence


Java, cest en fait
le langage Java : Oracle accompagne les spcifications Java
http://java.sun.com/docs/books/jls/
une JVM : http://java.sun.com/docs/books/vmspec/
dune implmentation de rfrence
les API : selon la documentation javadoc fournie de nombreux tutoriels
avec les diffrents paquetages
Java nest pas normalis ; son volution est
gre par le JCP (Java Community Process ;
http://www.jcp.org/) dans lequel Oracle tient une
place prpondrante
R. Grin Introduction Java 21 R. Grin Introduction Java 22

Plate-forme Java 3 ditions de Java


Programme Java Java SE : Java Standard Edition ; JDK = Java
SE Development Kit
API Java EE : Enterprise Edition qui ajoute les API
pour crire des applications installes sur les
JVM serveurs dans des applications distribues :
servlet, JSP, JSF, EJB,
Machine relle Java ME : Micro Edition, version pour crire
des programmes embarqus (carte puce/Java
API (Application Programming Interface) : card, tlphone portable,)
bibliothques de classes standard
R. Grin Introduction Java 23 R. Grin Introduction Java 24

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

R. Grin Introduction Java 27 R. Grin Introduction Java 28

Une classe Point 2 classes dans 1 fichier


/** Modlise un point de coordonnes x, y */ /** Modlise un point de coordonnes x, y */
public class Point { public class Point {
private int x, y; private int x, y;
public Point(int x1, int y1) {
public Point(int x1, int y1) { // un constructeur x = x1; y = y1;
x = x1; }
y = y1; public double distance(Point p) {
} return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y));
public double distance(Point p) { // une mthode }
}
return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y)); Fichier Point.java
} /** Teste la classe Point */
public static void main(String[] args) { class TestPoint {
Point p1 = new Point(1, 2); public static void main(String[] args) {
Point p2 = new Point(5, 1); Point p1 = new Point(1, 2);
System.out.println("Distance : " + p1.distance(p2)); Point p2 = new Point(5, 1);
System.out.println("Distance : " + p1.distance(p2));
} }
} }
R. Grin Introduction Java 29 R. Grin Introduction Java 30

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

Deux types de programmes

Applications indpendantes
Applets rfrence par une page HTML et
Applications indpendantes excute dans la JVM dun navigateur Web
et applets

R. Grin Introduction Java 35 R. Grin Introduction Java 36

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

Exemple de page Web


Applet
qui contient une applet
<HTML>
Objet Java, rfrenc dans une page Web
<HEAD>
(crite dans le langage HTML) <TITLE> Une applet </TITLE>
En fait cet objet doit appartenir une classe </HEAD>
<BODY>
Java qui hrite de la classe Applet (voir cours <H2> Excuter une applet </H2>
sur lhritage) <APPLET code="HelloApplet.class"
width=500 Dimensions de lemplacement
Le lancement dune (un ?) applet(te ?) se fait height=300> rserv laffichage de lapplet
quand la partie de la page Web qui rfrence Votre navigateur ne peut excuter une applet
l'applet est affiche par le client Web </APPLET>
</BODY>
</HTML>
R. Grin Introduction Java 39 R. Grin Introduction Java 40

Exemple dapplet tapes pour lexcution dune applet


import java.awt.Graphics; Hritage
import java.applet.Applet;
1. Demande chargement page Web
qui contient une applet
public class HelloWorldApplet extends Applet { Client Serveur
2. Chargement de la page Web et
public void paint(Graphics g) { HTTP HTTP
de la classe de lapplet
g.drawString("Hello world", 50, 25);
}
} Pixel o commencera
laffichage : x = 50 pixels,
y = 25 pixels
Reprsente lemplacement 3. Excution de lapplet
de la page Web o lapplet dans la JVM du client
saffichera
R. Grin Introduction Java 41 R. Grin Introduction Java 42

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

Langage orient objet


Manipule des objets
Les programmes sont dcoups suivant les
types des objets manipuls
Notions de base sur la Les donnes sont regroupes avec les
programmation objet traitements qui les utilisent
Une classe Facture regroupe, par exemple,
tout ce que lon peut faire avec une facture,
avec toutes les donnes ncessaires ces
traitements
R. Grin Introduction Java 45 R. Grin Introduction Java 46

Quest-ce quun objet ? Notion dobjet en Java


Un objet a
Toute entit identifiable, concrte ou abstraite,
une adresse en mmoire (identifie lobjet)
peut tre considre comme un objet
un comportement (ou interface)
Un objet ragit certains messages quon lui
un tat interne
envoie de lextrieur ; la faon dont il ragit
dtermine le comportement de lobjet Ltat interne est donn par des valeurs de
variables
Il ne ragit pas toujours de la mme faon un
mme message ; sa raction dpend de ltat dans Le comportement est donn par des fonctions
lequel il est ou procdures, appeles mthodes

R. Grin Introduction Java 47 R. Grin Introduction Java 48

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

Messages entre objets Paradigme objet


La programmation objet est un paradigme,
arrte-toi dmarre une manire de modliser le monde :
nom:Pierre
des objets ayant un tat interne et un
vitesse:60 comportement
ge:28 ans direction:5
... ... collaborent en schangeant des messages
(pour fournir les fonctionnalits que lon
Conduit va
la ville v
demande lapplication)
va x km/h
70 km/h Dautres paradigmes :
programmation imprative (Pascal, C)
Pierre La voiture de Pierre
Pierre envoie un message programmation fonctionnelle (Scheme, Lisp)
maVoiture.vaAVitesse(70);
sa voiture :
R. Grin Introduction Java 51 R. Grin Introduction Java 52

Quelques langages orients objet

SmallTalk (un des premiers langage objet ;


1972), C++ (ajout de lobjet dans le langage C),
C# (cr par Microsoft aprs des problmes
Les classes
avec Sun pour lutilisation de Java ; surtout en Java
pour Windows), Objective C (en progression
car utilis par Apple dans Mac OS et iOS),
Python (typage dynamique), Ruby (typage
dynamique ; tout est objet)

R. Grin Introduction Java 53 R. Grin Introduction Java 54

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

Exemple : classe Livre Rles dune classe


public class Livre {
private String titre, auteur;
Variables dinstance Une classe est
private int nbPages;
// Constructeur un type qui dcrit une structure (variables
public Livre(String unTitre, String unAuteur) { dinstances) et un comportement (mthodes)
titre = unTitre;
auteur = unAuteur; Constructeurs un module pour dcomposer une application en
} entits plus petites
public String getAuteur() { // accesseur
un gnrateur dobjets (par ses constructeurs)
return auteur;
} Mthodes Une classe permet dencapsuler les objets :
public void setNbPages(int nb) { // modificateur
nbPages = nb;
les membres public sont vus de lextrieur
} mais les membres private sont cachs
}
R. Grin Introduction Java 57 R. Grin Introduction Java 58

Conventions pour les identificateurs


Les noms de classes commencent par une
majuscule (ce sont les seuls avec les constantes) :
Cercle, Object
Les mots contenus dans un identificateur
commencent par une majuscule : Les constructeurs
UneClasse, uneMethode, uneAutreVariable
Les constantes sont en majuscules avec les mots
spars par le caractre soulign _ :
UNE_CONSTANTE
Si possible, des noms pour les classes et des verbes pour les
mthodes
R. Grin Introduction Java 59 R. Grin Introduction Java 60

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

R. Grin Introduction Java 61 R. Grin Introduction Java 62

Cration dune instance Plusieurs constructeurs (surcharge)


public class Employe { public class Employe {
private String nom, prenom; variables private String nom, prenom;
private double salaire; dinstance private double salaire;
// Constructeur // 2 Constructeurs
public Employe(String n, String p) { public Employe(String n, String p) {
nom = n; nom = n;
prenom = p; prenom = p;
} }
. . . public Employe(String n, String p, double s) {
public static void main(String[] args) { nom = n;
Employe e1; prenom = p;
salaire = s;
e1 = new Employe("Dupond", "Pierre");
}
e1.setSalaire(1200); cration dune instance . . .
. . . de Employe e1 = new Employe("Dupond", "Pierre");
} e2 = new Employe("Durand", "Jacques", 1500);
}
R. Grin Introduction Java 63 R. Grin Introduction Java 64

Dsigner un constructeur par this() Constructeur par dfaut


public class Employe {
private String nom, prenom; Lorsque le code dune classe ne comporte pas
private double salaire;
// Ce constructeur appelle l'autre constructeur
de constructeur, un constructeur sera
public Employe(String n, String p) { automatiquement ajout par Java
this(n, p, 0);
} Pour une classe Classe, ce constructeur par
public Employe(String n, String p, double s) {
nom = n;
dfaut sera :
prenom = p; [public] Classe() { }
salaire = s;
}
. . . Mme accessibilit que
e1 = new Employe("Dupond", "Pierre"); la classe (public ou non)
e2 = new Employe("Durand", "Jacques", 1500);

R. Grin Introduction Java 65 R. Grin Introduction Java 66

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

Autres types de mthode Paramtres dune mthode


Souvent les mthodes ou les constructeurs ont
La plupart des mthodes permettent aux besoin quon leur passe des donnes initiales sous
instances de la classe doffrir des services plus la forme de paramtres
complexes aux autres instances
On doit indiquer le type des paramtres dans la
Enfin, des mthodes (private) servent de dclaration de la mthode :
sous-programmes utilitaires aux autres setSalaire(double unSalaire)
mthodes de la classe calculerSalaire(int indice, double prime)
Quand la mthode ou le constructeur na pas de
paramtre, on ne met rien entre les parenthses :
getSalaire()
R. Grin Introduction Java 69 R. Grin Introduction Java 70

Type retour dune mthode Exemples de mthodes


public class Employe { Modificateur
. . .
Quand la mthode renvoie une valeur, on doit public void setSalaire(double unSalaire) {
indiquer le type de la valeur renvoye dans la if (unSalaire >= 0.0)
dclaration de la mthode : salaire = unSalaire;
double calculSalaire(int indice, double prime) }
Le pseudo-type void indique quaucune valeur public double getSalaire() {
return salaire;
nest renvoye : } Accesseur
void setSalaire(double unSalaire) public boolean accomplir(Tache t) {
...
}
}
R. Grin Introduction Java 71 R. Grin Introduction Java 72

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

R. Grin Introduction Java 79 R. Grin Introduction Java 80

Affectation Initialisation dune variable


Une variable doit tre initialise (recevoir une
Laffectation dune valeur une variable est valeur) avant dtre utilise dans une expression
effectue par linstruction Si elles ne sont pas initialises par le
variable = expression; programmeur, les variables dinstance (et les
Lexpression est calcule et ensuite la valeur variables de classe tudies plus loin) reoivent les
calcule est affecte la variable valeurs par dfaut de leur type (0 pour les types
Exemple : numriques, par exemple)
x = 3; Lutilisation dune variable locale non initialise
x = x + 1; par le programmeur provoque une erreur (pas
dinitialisation par dfaut) la compilation
R. Grin Introduction Java 81 R. Grin Introduction Java 82

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

R. Grin Introduction Java 85 R. Grin Introduction Java 86

Degrs dencapsulation

Java permet plusieurs degrs dencapsulation


pour les membres (variables et mthodes) et les
constructeurs dune classe
Accs aux membres dune classe

R. Grin Introduction Java 87 R. Grin Introduction Java 88

Types dautorisation daccs Granularit de la protection des


private : seule la classe dans laquelle il est attributs dune classe
dclar a accs ( ce membre ou constructeur)
public : toutes les classes sans exception y ont
En Java, la protection des attributs se fait classe
accs par classe, et pas objet par objet
Sinon, par dfaut, seules les classes du mme
Un objet a accs tous les attributs dun objet
paquetage que la classe dans lequel il est dclar y de la mme classe, mme les attributs privs
ont accs (un paquetage est un regroupement de
classes ; notion tudie plus loin dans le cours)
protected sera tudi dans le cours sur

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

R. Grin Introduction Java 93 R. Grin Introduction Java 94

Exemple de this implicite this explicite


public class Employe { this est utilis surtout dans 2 occasions :
private double salaire; pour distinguer une variable dinstance et un
. . .
paramtre qui ont le mme nom :
public void setSalaire(double unSalaire) {
salaire = unSalaire; public void setSalaire(double salaire)
this.salaire = salaire;
}
Implicitement }
public double getSalaire() { this.salaire
return salaire; un objet passe une rfrence de lui-mme
} un autre objet :
. . . Implicitement
salaire = comptable.calculeSalaire(this);
this.salaire
}
Dans quelle classe peut-on Comptable, calcule le salaire de moi
R. Grin Introduction Java 95 trouver
R. Grin ce code ? Introduction Java 96

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());
...

R. Grin Introduction Java 97 R. Grin Introduction Java 98

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

R. Grin Introduction Java 99 R. Grin Introduction Java 100

Exemple de variable de classe Mthodes de classe


public class Employe { Une mthode de classe (modificateur static
private String nom, prenom; en Java) excute une action indpendante dune
private double salaire; instance particulire de la classe
private static int nbEmployes = 0;
// Constructeur Une mthode de classe peut tre considre
public Employe(String n, String p) { comme un message envoy une classe
nom = n;
prenom = p; Exemple :
nbEmployes++; public static int getNbEmployes() {
} return nbEmployes;
. . .
}
}

R. Grin Introduction Java 101 R. Grin Introduction Java 102

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(); }

R. Grin Introduction Java 103 R. Grin Introduction Java 104

Mthodes de classe Une colle


Une mthode de classe ne peut avoir la mme
signature quune mthode dinstance La mthode main() est ncessairement static.
Pourquoi ?
La mthode main() est excute au dbut du
programme. Aucune instance nest donc dj
cre lorsque la mthode main() commence son
excution. a ne peut donc pas tre une mthode
dinstance.

R. Grin Introduction Java 105 R. Grin Introduction Java 106

Blocs dinitialisation static Blocs dinitialisation non static


Ils permettent dinitialiser les variables
static trop complexes initialiser dans leur Ils servent initialiser les variables dinstance
dclaration : (ou toute autre initialisation)
class UneClasse {
private static int[] tab = new int[25]; Ils peuvent tre utiles en particulier pour les
static { classes internes anonymes (tudies dans un
for (int i = 0; i < 25; i++) {
tab[i] = -1; autre support de cours) et pour partager du
} code entre plusieurs constructeurs (leur code
}
. . . est rpt par tous les constructeurs)
Ils sont excuts une seule fois, quand la classe La syntaxe est celle des blocs static sans le
est charge en mmoire mot-cl static
R. Grin Introduction Java 107 R. Grin Introduction Java 108

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()

(- : private, # : protected, + : public, $ (ou soulign) : static)


R. Grin Introduction Java 109 R. Grin Introduction Java 110

Codage Unicode pour les programmes


Pour les identificateurs, les commentaires, les
valeurs de type caractre ou chane de
caractres, Java utilise les caractres du code
Unicode
Structure lexicale du
Le reste dun programme Java est form de
langage Java caractres ASCII (qui sont les 128 premiers
caractres du code Unicode)
Dans un programme, le caractre Unicode dont
le code est la valeur hexadcimale xxxx peut
tre reprsent par \uxxxx
R. Grin Introduction Java 111 R. Grin Introduction Java 112

Identificateurs Mots-cls Java


abstract, boolean, break, byte, case, catch, char,
Un identificateur Java class, const*, continue, default, do, double,
est de longueur quelconque enum**, else, extends, final, finally, float, for,
commence par une lettre Unicode (caractres goto*, if, implements, import, instanceof, int,
ASCII recommands) interface, long, native, new, null, package,
peut ensuite contenir des lettres ou des private, protected, public, return, short, static,
chiffres ou le caractre soulign _ strictfp, super, switch, synchronized, this, throw,
ne doit pas tre un mot-cl ou les constantes throws, transient, try, void, volatile, while
true, false ou null
*: pas encore utilis
** : depuis Java SE 5
R. Grin Introduction Java 113 R. Grin Introduction Java 114

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 ...
*/

R. Grin Introduction Java 115 R. Grin Introduction Java 116

ne pas oublier ! Ce quil faut rechercher


Un programme est crit une fois
Sil est utile, Une plus grande facilit de programmation
il sera modifi Mais surtout
une maintenance plus aise
corrig
et une extensibilit accrue
on lui ajoutera des fonctionnalits
des dizaines (ou centaines) de fois
sans doute plusieurs annes aprs son
criture
R. Grin Introduction Java 117 R. Grin Introduction Java 118

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

Vers une programmation


Bibliographie - Gratuit
par composants
Sur le modle des circuits lectroniques : On peut apprendre Java sans dbourser un sou
chaque composant remplit des fonctionnalits bien
dtermines et offre des possibilits de connexion Tutoriel dOracle consulter dabord lorsque
avec dautres composants lon tudie une nouvelle API (en anglais) :
pas besoin daller lire le code pour les utiliser (on ne http://download.oracle.com/javase/tutorial/
sait rien de limplmentation)
Un bon livre gratuit en ligne (un peu bavard) :
En mieux
Thinking in Java de Bruce Eckel ; site Web
on peut configurer le composant
et sauvegarder cette configuration, ou un
http://mindview.net/Books/TIJ/DownloadSites ;
assemblage de composants, pour la rutiliser en franais : http://penserenjava.free.fr/
R. Grin Introduction Java 123 R. Grin Introduction Java 124

Bibliographie 2 classiques Bibliographie utilisateur avanc


Un livre qui couvre de nombreux paquetages : En anglais : Effective Java , 2me dition
Core Java , en 2 volumes mais le premier adapte Java SE 6 ; trs bon livre pour
suffit pour commencer, diteur Prentice-Hall ; apprendre bien programmer en Java ; auteur
http://www.horstmann.com/corejava.html ; en Joshua Bloch ; The Java Series , diteur
franais : Au cur de Java , ditions Addison-Wesley ; seule la 1re dition a t
Campus Press traduite en franais ( Java efficace )
Java in a Nutshell de David Flanagan, diteur
OReilly ; en franais : Java en concentr

R. Grin Introduction Java 125 R. Grin Introduction Java 126

21

Você também pode gostar