MI
1re Anne
-1-
1re Anne
1. Introduction
Compar la programmation classique, o la programmation privilgie les procdures et les
traitements par rapport aux donnes (que veut-on faire ?), la programmation oriente objet
privilgie les donnes par rapport aux traitements et considre un programme comme tant un
ensemble d'objets informatiques dont chacun est dcris par une liste de variables (les donnes) et
caractriss par des oprations qu'il connaissent (les traitements)
Dans le cas de la conception et la programmation OO, on ne pose la question que veut-ton faire ?
Mais plutt, on posera la question de quoi parle-t-on ? Ou qu'est ce qu'on manipule comme entits ?
Un programme OO sera donc constitu d'un ensemble d'objets interagissant entre eux et chacun
disposant d'une partie donnes et d'une partie traitement.
l'objet arbre1 est dcrit par : <arbre1, type, sapin>, <arbre1, taille, 5m>
l'objet voiture1 est dcrit par : <voiture1, couleur, rouge>, <voiture1, marque, toyota>,
<voiture1, modle, yaris>
l'objet passant1 est dcrit par : <passant1, taille, grand>, <passant1, age, 50>
Dans les langages informatiques OO, on stocke et on manipule les objets en mmoire sous forme de
couples (attribut, valeur).
un tat : l'tat d'un objet est l'ensemble des valeurs des attributs de cet objet un moment
donn. Un objet volue et peut changer d'tat durant son existence, ce changement se ralise
par la modification de la valeur d'au moins d'un seul de ses attributs.
un comportement : le comportement d'un objet est dfinie par le traitement qu'on peut
effectuer sur les attributs de cet objet. Il se ralise par un ensemble de fonctions ou
procdures appeles mthodes. Les mthodes d'un objet permettent la dfinition de la
manire de changer l'tat d'un objet.
-2-
1re Anne
valeurs
arbre1
type= sapin
taille= 5m
Emplacement
mmoire
voiture1
marque=
marque=
modele=
modele=
couleur
couleur
renault
toyota
clio
yaris
=rouge
=rouge
voiture2
marque= renault
modele= clio
couleur =rouge
-3-
1re Anne
2. changement d'tat ventuel : l'objet volue et peut changer d'tat plusieurs fois
3. destruction de l'objet : l'objet arrive en fin de vie lorsqu'il n'est plus rfrenc. Si son
identifiant unique qui est sa rfrence ne contient plus son adresse mmoire alors l'objet
n'est plus accessible et donc l'objet est dit dtruit.
p1
X= 3 4
y= 1 3
couleur =20
p2
deplacer(dx:double,dy:double)
Appliquer la Mthode
deplacer sur l'objet p1
x= x+dx
y= y+dy
dx=1 et dy=2
changer_couleur(nouv_couleur:entier)
couleur =nouv_couleur
afficher()
ecrire(x, y, couleur)
...
-4-
1re Anne
On remarque bien que les mthodes deplacer , changer_couleur et afficher utilisent les
attributs "x", "y" et "couleur" sans que ces derniers ne soient passs en paramtres ou dclars
comme variables locales.
Les questions qui se posent sont les suivantes :
Comment relier un ensemble de mthodes un ensemble d'attributs ? Comment la fonction
deplacer va reconnatre la valeur x et la valeur y en tant qu'attributs de l'objet p1 ?
Une classe est un modle (sorte de moule) qui permet de dfinir les objets :
ayant la mme description : ensemble d'attributs
ayant le mme comportement: ensemble de mthode
ayant la mme smantique : sens commun
l'ensemble des attributs et des mthodes d'une classe sont appels membres d'une classe
l'objet est pour une classe ce que reprsente une variable pour un type
sont des
instances
de
Les objets
p1,p3...
x:entier
y:entier
void afficher()
void deplacer(dx:entier, dy:entier)
double distanceAucentre()
P1:Point
P3:Point
X=4
y=5
X=22
y=-4
-5-
...
1re Anne
Exemples
Le tableau suivant propose quelque classe (1ere colonnes) avec des objets instances de ces classes
(2eme colonne)
Classe
Objets (instances)
Humain
Voiture
Matire
class
nom_de_classe
{
//corps_de_classe :
// dclaration des attributs
// dclaration des mthodes
}
type
peut tre de type primitif (int, double, ) ou de type rfrent (tableau, classe, .)
nomAttribut
identificateur de l'attribut
-6-
1re Anne
Exemples
public double x=6.2 ;
int couleur ;
private Point p ;
Un attribut qui n'est pas initialis explicitement, prendra une valeur par dfaut :
typeRetour
nomMethode
identificateur de la mthode
listeParamtres
-7-
1re Anne
Par dfaut, la dclaration une rfrence vaut null, cela veut dire, qu'elle ne pointe sur aucun
objet, et donc :
Point p;<==>Point p=null;
un constructeur doit avoir le mme nom que la classe, il na aucun type de retour. Donc un
constructeur est une mthode ayant la forme NomClass(liste_de_parametres)
les valeurs des paramtres passs un constructeurs servent initialiser les attributs de
-8-
1re Anne
l'objet
dans une classe on peut avoir plusieurs constructeurs de signatures diffrentes (surcharge de
mthodes)
toute classe JAVA possde au moins un constructeur, si une classe ne dfinit pas
explicitement de constructeur, un constructeur par dfaut sans paramtres et qui n'effectue
aucune initialisation particulire est invoqu
Exemple de constructeurs :
pour la classe Point
class Point{
double x,y ;
Point(){ x=3 ; y=4 ;}
...
}
Exemple
-9-
1re Anne
Exemple
le code suivant reprsente la dclaration d'une classe "Point", qui dfinie un point dans plan par ses
coordonnes, "x" reprsentant son ordonne et "y" son abscisse
class Point {
// dclaration des attributs
double x ;
double y ;
//dclaration des mthodes
void deplacer(double dx,double dy){
x = x + dx;
y = y + dy;
}
void afficher(){
System.out.println("("+ x +","+ y +")");
}
}
- 10 -
Lignes de codes
1re Anne
Mmoire des
objets
Point p1,p2 ;
p1
p2
p1=new Point(4,-1.4);
p1
x 4
y -1.4
p2=new Point(-5,12);
p2
x -5
y 12
p1.deplacer(5,-1);
x=4+5 et y=-1.4+
La mthode "deplacer" est appele
avec p1, donc les valeurs de x et y (-1)
x 9
utilises sont celles de p1 : p1.x=4 p1
y -2.4
et p1.y=-1.4
p2.deplacer(2,3);
x=-5+2 et y=12+3
La mthode "deplacer" est appele
p2
avec p2, donc les valeurs de x et y
x 3
y 15
utilises sont celles de p2 : p2.x=5 et p2.y=12
p1.afficher();
p1
x 9
y -2.4
p2.afficher();
p2
x 3
y 15
Conclusion
Lors d'un appel de mthode avec un objet donn, les attributs de cet objet sont connus dans cette
mthode. Les valeurs de ces attributs sont celles de l'objet qui appelle la mthode (lobjet rcepteur
du message)
- 11 -
1re Anne
point1
Point point2;
point2 = new Point (0,1)
point2
x
y
2
3
x
y
0
1
point1
point2 = point1;
point3
3
x
y
2
3
0
1
Point point3=point2;
point2
point1
point2.x = -18;
point3.y=20 ;
point2
point3
x
y
-18
20
0
1
Explication
La 1ere partie du code permet de crer un nouvel objet de type Point rfrenc par point1 et
ayant les valeur x= 2 et y=3
De la mme manire, la partie2 du code permet de crer un nouvel objet de type Point
rfrenc par point2 et ayant les valeur x= 0 et y=1
1re Anne
implique schmatiquement que point1 et point2 pointent sure le mme objet (x=2, y=3) et
que l'objet point par point2 auparavant est maintenant non accessible parce ce qu'il est sans
rfrence.
Aussi dans la 3eme partie du code, on dclare une rfrence point3 et on lui affecte point2,
cela implique que point3 pointe sur le mme objet que point2. Il n'y a donc pas cration un
nouvel objet point3 partir d'une simple affectation de rfrence.
La 4eme partie du code , l'instruction point2.x = -18; modifie l'a valeur de l'attribut x de
l'objet rfrenc par point2, puis l'instruction point3.y = 20; modifie l'a valeur de
l'attribut y de l'objet rfrenc par point3.
Les instructions d'affichage des attributs des rfrences pointes par point1, point2 et
point3
Conclusion
L'affectation entre objets ne cre pas un nouvel objet mais elle cre une nouvelle rfrence qui
pointe sur le mme objet.
10.
Exemple complet
Le code suivant reprsente deux classe, la premire : la classe Point qui reprsente un point dans un
plan, la deuxime : la classe Test qui permet de tester la classe Point, en crant des instances (objets
de types Point) et en ralisant quelques traitements par le biais d'appel de mthodes.
/*---------------------------------------------------*/
/*----------------classe Point-----------------------*/
/*---------------------------------------------------*/
class Point {
//dclaration des proprits
double x;
double y;
// dclaration de constructeurs
Point() {
x = 0;
y = 0;
}
Point(double a) {
x = a;
- 13 -
1re Anne
y = 0;
}
Point(double a, double b) {
x = a;
y = b;
}
Point(Point p) {
x = p.x;
y = p.y;
}
//dclaration des mthodes
void deplacer(double dx, double dy) {
x += dx;
y += dy;
}
// surcharge de la mthode deplacer
void deplacer(double dx) {
x += dx;
}
//la mthode afficher affiche un objet de Point
void afficher() {
System.out.println(" Point : [x= " + x + " , y= " + y + " ] ");
}
/*la mthode distance calcule la distance un objet
de type Point et le centre (0,0)
*/
double distance(){
double d;
d=Math.sqrt(x*x+y*y);
return d;
}
}
/*---------------------------------------------------*/
/*----------------classe TestPoint-------------------*/
/*---------------------------------------------------*/
public class TestPoint {
public static void main(String[] tabParam) {
//cration dun objet point p1 par le constructeur sans paramtres
Point p1;
p1 = new Point();
p1.deplacer(2,5.8);
//cration dun objet point p2 par 2eme constructeur
Point p2 = new Point(3);
//cration dun objet point p3 par 3eme constructeur
Point p3;
p3 = new Point(3, 4);
//appel de la mthode deplacer sur lobjet p3
p3.deplacer(2, -6.2);
//affichage de p3
- 14 -
1re Anne
- 15 -