Vous êtes sur la page 1sur 10

Objectif de cette partie : crire ses propres

classes

Classes et objets
Universit de Nice - Sophia Antipolis
Richard Grin
Version 1.0.1 23/11/10

Richard Grin

Plan

Classes et objets

page 2

Programme/application Java
Une application Java est compose dune ou
plusieurs classes
Le plus souvent il est compos de plusieurs classes
principale
p
dont la
Une des classes est la classe p
mthode main est lance pour lancer lapplication

Classe
Constructeurs
Mthodes
Variables
this
Protection des accs
Variables et mthodes de classe

Richard Grin

Classes et objets

page 3

Richard Grin

Classes et objets

page 4

Excution dun programme


Au dbut de lexcution, seule la classe principale
est charge en mmoire centrale
Les autres classes sont charges au fur et
mesure, lorsque le programme a besoin delles
Le plus souvent une classe est charge
lorsquune instance de la classe est cre par le
programme

Richard Grin

Classes et objets

page 5

Les classes

Richard Grin

Classes et objets

page 6

Elments dune classe

Regrouper les objets


Les objets qui collaborent dans une application sont
souvent trs nombreux
On peut dgager des types dobjets
Par exemple, tous les livres dans une application de
gestion dune
d une bibliothque
La notion de classe correspond cette notion de
types dobjets

Richard Grin

Classes et objets

Les constructeurs (il peut y en avoir plusieurs)


servent crer des objets appels instances de la
classe
Quand une instance est cre, son tat est conserv
dans les variables dinstance
Les mthodes dterminent le comportement des
instances de la classe quand elles reoivent un
message

Richard Grin

Exemple : classe Livre


Variables dinstance

class TestLivre {
public static void main(String[] args) {
Livre livre =
new Livre("Les Misrables", "Victor Hugo");
livre.setNbPages(450);
System.out.println(livre.getAuteur());
}
}

Constructeurs
Mthodes

Classes et objets

Richard Grin

Rles dune classe

Classes et objets

Classes et objets

page 10

Une classe est un type

Une classe est


un type qui dcrit une structure (variables dtat)
et un comportement (mthodes)
un module pour dcomposer une application en
entits plus petites
un gnrateur dobjets (par ses constructeurs)
Une classe permet dencapsuler les objets : les
membres public sont vus de lextrieur mais les
membres private sont cachs
Richard Grin

Utilisation dune classe

public class Livre {


private String titre, auteur;
private int nbPages;
// Constructeur
public Livre(String unTitre, String unAuteur) {
titre = unTitre;
auteur = unAuteur;
}
public String getAuteur() {
// accesseur
return auteur;
}
public void setNbPages(int nb) { // modificateur
nbPages = nb;
}
}
Richard Grin

Classes et objets

11

Comme les types primitifs, une classe peut tre


utilise pour typer une variable dans sa
dclaration ou pour typer un tableau
Exemples :
Livre l;
Livre[] livres; (un tableau dont chaque
lment est un livre)
livres = new Livre[100]; (cre un tableau
de 100 livres et laffecte la variable livres ; les
100 lments sont initialiss null)
Richard Grin

Classes et objets

page 12

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 :
UneClasse, uneMethode, uneAutreVariable
Les constantes sont en majuscules avec les mots
spars par le caractre soulign _ :

Les constructeurs

UNE_CONSTANTE

Richard Grin

Classes et objets

13

15

Plusieurs constructeurs (surcharge)

Classes et objets

Richard Grin

Classes et objets

16

Dsigner un constructeur par this()

public class Employe {


private String nom, prenom;
private double salaire;
// 2 Constructeurs
public Employe(String n, String p) {
nom = n;
prenom = p;
}
public Employe(String n, String p, double s) {
nom = n;
prenom = p;
salaire = s;
}
. . .
e1 = new Employe("Dupond", "Pierre");
e2 = new Employe("Durand", "Jacques", 1500);
Richard Grin

14

public class Employe {


variables
private String nom, prenom;
private double salaire;
dinstance
// Constructeur
public Employe(String n, String p) {
nom = n;
prenom = p;
}
. . .
public static void main(String[] args) {
Employe e1;
e1 = new Employe("Dupond", "Pierre");
e1.setSalaire(1200);
cration dune instance
. . .
de Employe
}
}

Chaque classe a un ou plusieurs constructeurs qui


servent
crer les instances
initialiser ltat
l tat de ces instances
Un constructeur
a le mme nom que la classe
na pas de type retour

Classes et objets

Classes et objets

Cration dune instance

Constructeurs dune classe

Richard Grin

Richard Grin

public class Employe {


private String nom, prenom;
private double salaire;
// Ce constructeur appelle l'autre constructeur
public Employe(String n, String p) {
this(n, p, 0);
}
public Employe(String n
n, String p
p, double s) {
nom = n;
prenom = p;
salaire = s;
}
. . .
e1 = new Employe("Dupond", "Pierre");
e2 = new Employe("Durand", "Jacques", 1500);
17

Richard Grin

Classes et objets

18

Constructeur par dfaut


Lorsque le code dune classe ne comporte pas de
constructeur, un constructeur sera automatiquement
ajout par Java
Pour une classe Classe, ce constructeur par dfaut
est :
[public] Classe() { }

Les mthodes

Mme accessibilit que


la classe (public ou non)

Richard Grin

Classes et objets

19

Richard Grin

Classes et objets

20

Accesseurs

Autres types de mthode

Deux types de mthodes servent donner accs aux


variables depuis lextrieur de la classe :
les accesseurs en lecture pour lire les valeurs des
variables ; accesseur en lecture est souvent
abrg
b en accesseur ; getter
tt en anglais
l i
les accesseurs en criture, ou modificateurs, pour
modifier leur valeur ; setter en anglais

La plupart des mthodes permettent aux instances


de la classe doffrir des services plus complexes aux
autres instances
Enfin, des mthodes (private) servent de sousprogrammes utilitaires aux autres mthodes de la
classe

Richard Grin

Classes et objets

21

Richard Grin

Paramtres dune mthode

Classes et objets

22

Type retour dune mthode

Souvent les mthodes ou les constructeurs ont besoin


quon leur passe des donnes initiales sous la forme de
paramtres
On doit indiquer le type des paramtres dans la
dclaration de la mthode :
setSalaire(double unSalaire)
calculerSalaire(int indice, double prime)

Quand la mthode renvoie une valeur, on doit indiquer le


type de la valeur renvoye dans la dclaration de la
mthode :
double calculSalaire(int indice, double prime)

Le pseudo
pseudo-type
type void indique qu
quaucune
aucune valeur nest
n est
renvoye :
void setSalaire(double unSalaire)

Quand la mthode ou le constructeur na pas de


paramtre, on ne met rien entre les parenthses :
getSalaire()

Richard Grin

Classes et objets

23

Richard Grin

Classes et objets

24

Exemples de mthodes

Surcharge dune mthode

public class Employe {


Modificateur
. . .
public void setSalaire(double unSalaire) {
if (unSalaire >= 0.0)
salaire = unSalaire;
}
public double getSalaire() {
return salaire;
Accesseur
}
public boolean accomplir(Tache t) {
...
}
}
Richard Grin

Classes et objets

En Java, on peut surcharger une mthode, cest-dire, ajouter une mthode qui a le mme nom mais
pas la mme signature quune autre mthode :
calculerSalaire(int)
calculerSalaire(int, double)
indice dans
la grille des
salaires

25

Richard Grin

Surcharge dune mthode (2)

Classes et objets

R. Grin

Introduction Java

26

On a vu quen Java les paramtres sont passs


par valeur et quune mthode ne peut donc
modifier les valeurs des paramtres effectifs
quon lui passe en paramtre (la mthode utilise
une copie
i d
de lla valeur
l
d
du paramtre)
t )
Si le paramtre nest pas de type primitif, cest
ladresse de lobjet qui est copie dans lespace
mmoire de la mthode
La mthode peut donc modifier ltat de lobjet
pass en paramtre

27

Exemple de passage de paramtres


public static void m(int ip,
Employe e1p, Employe e2p) {
ip = 100;
e1p.salaire = 800;
e2p = new Employe("Pierre", 900);
}
public static void main(String[] args) {
Employe e1 = new Employe("Patrick", 1000);
Employe e2 = new Employe("Bernard", 1200);
int i = 10;
m(i, e1, e2);
System.out.println(i + '\n' + e1.salaire
+ '\n' + e2.nom);
}

Classes et objets

Passage dobjets en paramtre

En Java, il est interdit de surcharger une mthode en


changeant seulement le type de retour
Autrement dit, on ne peut diffrencier 2 mthodes par
leur type retour
Par
P exemple,
l il estt interdit
i t dit davoir
d
i ces 2 mthodes
th d
dans une classe :
int calculerSalaire(int)
double calculerSalaire(int)

Richard Grin

prime accordes
aux commerciaux

Richard Grin

Classes et objets

main() :
Employe e1 = new Employe("Patrick", 1000);
Employe e2 = new Employe("Bernard", 1200);
int i = 10;

page 28

Passage de
paramtres

Que
sera-t-il
affich ?
Patrick
P
t i k
1000

Il sera
affich
10
800.0
Bernard

i
10

main

e1
e2
Pile

29

Bernard
1200

R. Grin

Tas
Introduction Java

30

Passage de
paramtres

main() :
m(i, e1, e2);

ip e1p
10
e2p

(pas de variables locales)

i
10

main

ip e1p
100
e2p

i
10

main

e2
Tas
Introduction Java

ip = 100;
e1p.salaire = 800;
e2p = new Employe("Pierre", 900);

(pas de variables locales)

i
10

main

e1

Pile
31

Passage de
paramtres

m() :

ip e1p
100
e2p

Introduction Java

ip = 100;
e1p.salaire = 800;
e2p = new Employe("Pierre", 900);

R. Grin

i
10

main

Introduction Java

System.out.println(i + '\n' + e1.salaire


+ '\n' + e2.nom);

Pile
33

Bernard
1200

e2
Pile
R. Grin

Bernard
1200
Tas
Introduction Java

34

toString()
Il est conseill dinclure une mthode toString
dans toutes les classes que lon crit
Cette mthode renvoie une chane de caractres
qui dcrit linstance
Cette description peut tre trs utile lors de la
mise au point des programmes
La description doit tre compacte et prcise
System.out.println(objet) affiche la
valeur retourne par objet.toString()

Patrick
P
t i k
800
e1

R. Grin

Passage de
paramtres

Pierre
900

i
10

e1

Patrick
P
t i k
800

e2
Tas

main() :

main

Pierre
900

ip e1p
100
e2p
(pas de variables locales)

Bernard
1200

32

Passage de
paramtres

m() :

Patrick
P
t i k
800

Tas

R. Grin

e2
Pile

Bernard
1200

e1
e2

Pile
R. Grin

Patrick
P
t i k
1000

(pas de variables locales)

Bernard
1200

e1

ip = 100;
e1p.salaire = 800;
e2p = new Employe("Pierre", 900);

Patrick
P
t i k
1000

Passage de
paramtres

m() :

Tas
Introduction Java

35

Richard Grin

Classes et objets

page 36

Exemple
public class Livre {
...
public String toString() {
return "Livre [titre=" + titre
+ ",auteur=
auteur=" + auteur
+ ",nbPages=" + nbPages
+ "]";
}
}

Richard Grin

Classes et objets

Les variables

page 37

Richard Grin

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

Classes et objets

39

Initialisation dune variable

Classes et objets

Il arrive dhsiter entre rfrencer une valeur


par une variable locale dune mthode
d instance de la classe
ou par une variable dinstance
Si la valeur est utilise par plusieurs mthodes de la
classe, elle devra tre rfrence par une variable
dinstance

Richard Grin

Classes et objets

40

Initialisation dune variable (2)

Une variable doit tre initialise (recevoir une valeur)


avant dtre utilise dans une expression
Si elle nest pas initialise par le code, une variable
dinstance (idem pour les variables de classe tudies
plus loin) reoit la valeur par dfaut de son type (0 pour
les types numriques, par exemple)
Lutilisation dune variable locale non initialise par le
code provoque une erreur (pas dinitialisation par
dfaut)
Richard Grin

38

Variable locale
ou variable dinstance ?

Types de variables

Richard Grin

Classes et objets

41

On peut initialiser une variable en la dclarant


La formule dinitialisation peut tre une expression
complexe :
Employe e1 = new Employe(
Employe("Dupond",
Dupond , "Jean");
Jean );
double salaire = prime + 500.0;

Richard Grin

Classes et objets

42

Dclaration / cration

Dclaration / cration (2)

public static void main(String[] args) {


Employe e1;
e1.setSalaire(1200);
provoque une erreur

OK ? NullPointerException
}

Il aurait fallu crire :


public static void main(String[] args) {
Employe e1;
e1 = new Employe("Dupond", "Pierre");
e1.setSalaire(1200);
. . .
}

Il ne faut pas confondre


dclaration d
dune
une variable
cration dun objet rfrenc par cette variable

Employe e1;
dclare que lon va utiliser une variable e1 qui rfrencera
un objet de la classe Employe,
mais aucun objet nest cr
Richard Grin

Classes et objets

43

Richard Grin

Classes et objets

44

Dsigner les variables dune instance


Soit un objet o1 ; la valeur dune variable v de o1 est
dsigne par o1.v
Par exemple,

Accs aux membres dune


d une classe

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

Richard Grin

Classes et objets

45

Richard Grin

private : seule la classe dans laquelle il est dclar a


accs ( ce membre ou constructeur)
public : toutes les classes sans exception y ont accs
Sinon, par dfaut, seules les classes du mme
paquetage
t
que la
l classe
l
d
dans llequell il estt d
dclar
l y ontt
accs (un paquetage est un regroupement de classes ;
cette notion sera tudie plus loin dans le cours)

Java permet plusieurs degrs dencapsulation


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

Classes et objets

46

Types dautorisation daccs

Degrs dencapsulation

Richard Grin

Classes et objets

47

Richard Grin

Classes et objets

48

Protection de ltat interne dun objet

Granularit de la protection des


attributs dune classe

Autant que possible ltat dun objet (les variables


dinstance) doit tre private

En Java, la protection des membres se fait classe par


classe, et pas objet par objet
j a accs tous les membres dun objet
j de la
Un objet
mme classe, mme les membres privs

Richard Grin

Classes et objets

49

Si on veut autoriser la lecture dune variable depuis


lextrieur de la classe, on lui associe un accesseur,
avec le niveau daccessibilit que lon veut
Si on veut autoriser la modification dune variable, on
lui associe un modificateur, qui permet la modification
tout en contrlant la validit de la modification

Richard Grin

Classes et objets

50

this
Le code dune mthode dinstance dsigne
linstance qui a reu le message (linstance
courante), par le mot-cl this

Dsigner linstance qui reoit le


message this
message,
thi

Richard Grin

Classes et objets

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

51

Richard Grin

public class Employe {


private double salaire;
. . .
public void setSalaire(double unSalaire) {
salaire = unSalaire;
}
Implicitement
public double getSalaire() {
this.salaire
return salaire;
}
Implicitement
. . .
this.salaire
}
Classes et objets

52

this explicite

Exemple de this implicite

Richard Grin

Classes et objets

53

this est utilis surtout dans 2 occasions :


pour distinguer une variable dinstance et un
paramtre qui ont le mme nom :
public void setSalaire(double salaire)
this.salaire = salaire;
}

un objet passe une rfrence de lui-mme un


autre objet :
salaire = comptable.calculeSalaire(this);
Dans quelle classe peut-on
trouver ce code ?
Richard Grin

Comptable, calcule le salaire de moi


Classes et objets

54

Variables de classe
Certaines variables sont partages par toutes les
instances dune classe. Ce sont les variables de
classe (modificateur static)
Si une variable de classe est initialise dans sa
dclaration cette initialisation est excute une
dclaration,
seule fois quand la classe est charge en mmoire

Mthodes et variables de classe

R. Grin

Introduction Java

55

R. Grin

Une mthode de classe (modificateur static en


Java) excute une action indpendante dune
instance particulire de la classe
Une mthode de classe peut tre considre comme
un message envoy une classe
Exemple :

public class Employe {


private String nom, prenom;
private double salaire;
private static int nbEmployes = 0;
// Constructeur
public Employe(String n, String p) {
nom = n;
prenom = p;
nbEmployes++;
}
. . .
}
Introduction Java

56

Mthodes de classe

Exemple de variable de classe

R. Grin

Introduction Java

public static int getNbEmployes() {


return nbEmployes;
}

57

R. Grin

Dsigner une mthode de classe

Introduction Java

58

Mthodes de classe

Pour dsigner une mthode static depuis une


autre classe, on la prfixe par le nom de la classe :
int n = Employe.getNbEmploye();

Comme une mthode de classe excute une action


indpendante dune instance particulire de la
classe, elle ne peut utiliser de rfrence une
instance courante (this)
Il serait,
it par exemple,
l iinterdit
t dit d
dcrire
i
static double tripleSalaire() {
return this.salaire * 3;
}

R. Grin

Introduction Java

59

R. Grin

Introduction Java

60

10

Vous aimerez peut-être aussi