Académique Documents
Professionnel Documents
Culture Documents
Programmation
Orientée Objet
Cours précédent
Classes et Objets
4
La notion de classe
Rappel
• Une classe peut être considérée comme un moule ou un modèle à
partir duquel on peut créer des objets.
• Une classe ne peut pas être utilisée pour exécuter des programmes.
Pour cela il faut l’instancier (créer des objets)
La notion de classe
Exemple: Classe Point
La notion de classe
class Point
{
// instructions de définition des champs et des méthodes de la classe
}
7
Le mot clé private précise que les
La notion de classe
champs x et y ne sont pas
accessibles de l’extérieur de la classe
(c à d enDéfinition
dehors de ses
despropres
champs de la classe Point
méthodes)
(code en Java)
class Point {
private int x; // abscisse
private int y; // ordonnée
// définition des méthodes
}
La notion de classe
Définition des méthodes de la classe Point
(code en Java)
Nom de la
Mode d’accès
méthode
La notion de classe
Exemple classe Point: Le code complet en Java
class Point {
private int x;
private int y;
La notion d’objet
Rappel
Notion d’objet
Classes et objets
• classe : abstrait
▫ Il n’y a aucun étudiant qui s’appelle « étudiant »
• instance : concret
▫ L’étudiant « Halimi amina née le 17 03 1990 »
13
• Chaque objet aura son espace où seront stockées les valeurs de ses
attributs
Point a;
a = new Point();
Point a;
a = new Point (); Point a = new Point();
16
a y
• Exemple: a.initialiser(3,5);
a 5
18
centre X
rayon Y
initialiser ()
déplacer() déplacer()
afficher() afficher()
19
La notion de constructeur
Définition
La notion de constructeur
Retour à l’exemple: Classe Point
class Point {
private int x;
private int y;
public Point(int absc, int ord)
C’est le
{ x = absc; constructeur de la
y = ord; méthode Point.
} Maintenant, la
public void deplacer (int dx, int dy) méthode initialiser
{x = x + dx; devient inutile. On
y = y + dy; peut la supprimer
}
public void afficher()
{
// afficher à l’ecran les valeurs de x et y
}
}
22
La notion de constructeur
Quelques règles
La notion de constructeur
Retour à l’exemple: Classe Point
class Point {
private int x;
private int y;
Est il permis d’écrire
public Point(int absc, int ord)
{ x = absc; Point a = new Point ()
y = ord;
}
?
public void deplacer (int dx, int dy)
{x = x + dx; FAUX !
y = y + dy;
}
public void afficher()
{
// afficher à l’ecran les valeurs de x et y
}
}
24
La notion de constructeur
Retour à l’exemple: Classe Point
class Point {
private int x;
private int y;
La notion de référence
• Pour pouvoir utiliser des objets, il faut les référencer
• La référence permet d’accéder à l’objet, mais n’est pas
l’objet lui-même. Elle contient l’adresse de
l’emplacement mémoire dans lequel est stocké l’objet.
Exemple
Point a = new point (3,5)
3
a 5
Référence
Objet
26
La notion de référence
Premier exemple
Point a,b;
a = new Point (3,5);
b = new Point (2,0);
a 5
b 0
27
La notion de référence
Premier exemple: Affectation d’objets
Exécutons l’affectation
a = b;
3
Elle recopie a 5
seulement
dans
a la référence
contenue dans
2
b
b 0
28
La notion de référence
Deuxième exemple: Comparaison d’objets
Point a, b, c;
a = new Point(4,7);
a 4
b = new Point (2,0); 7
c = a;
b
a = b;
b = c; 2
0
c
29
La notion de référence
Petit exercice
3
a 5
a == b ?
c == d ? 3
b 5
c
2
d 0
30
L’auto-reférence
• Dans le traitement de l’une de ses méthodes un objet peut avoir à
s’envoyer un message(pour accéder à un de ses attributs ou
invoquer une des ses méthodes).Pour cela, il utilise le mot clé this.
Section 1: Débat
32/55
• Les constructeurs
déplacer()
afficher()
39
Méthodes de classe
• Une méthode de classe a un rôle indépendant d’un
quelconque objet. C’est le cas par exemple d’une
méthode qui agit uniquement sur les champs de classe
public void deplacer (int dx) a.deplacer (1,3); //appelle deplacer (int,int)
{ x + = dx;
}
a.deplacer (2); //appelle deplacer (int)
public void deplacer (short dx)
{x+ = dx; Short p = 3;
} a.deplacer (p); // appelle deplacer (short)
}
46
public void deplace (float dx, int dy)// deplace (float, int)
{…
}
public void deplace (int dx, float dy)
{…
}
Quels sont les appels corrects ?
class Surdef {
public void f (int n) { ..... }
public int f (int p) { ..... }
public void g (float x) { ..... }
public void g (double y) { ..... }
public void h (long n) { ..... }
public int h (final long p) { ..... }
}
Solution
• Les deux méthodes f ont des arguments de même type (la valeur de retour
n’intervenant pas dans la surdéfinition des fonctions). Il y a donc une
ambiguïté qui sera détectée dès la compilation de la classe,
indépendamment d’une quelconque utilisation.
• Enfin, les deux méthodes h ont des arguments de même type (long), le
qualificatif final n’intervenant pas ici. La compilation signalera également
une ambiguïté à ce niveau.
Exercice 4
Soit la définition de classe suivante :
class A
{ public void f (int n) { ..... }
public void f (int n, int q) { ..... }
public void f (int n, double y) { ..... }
}
Avec ces déclarations :
A a ; byte b ; short p ; int n ; long q ; float x ; double y ;
Quelles sont les instructions correctes et, dans ce cas, quelles sont les méthodes
appelées et les éventuelles conversions mises en jeu ?
a.f(n);
a.f(n, q) ;
a.f(q) ;
a.f(p, n) ;
a.f(b, x) ;
a.f(q, x) ;
Solution
a.f(n); // appel f(int)
a.f(n, q) ; // appel f(int, double) après conversion de q en
double
a.f(q) ; // erreur : aucune méthode acceptable
a.f(p, n) ; // appel f(int, int) après conversion de p en int
a.f(b, x) ; // appel f(int, double) après conversion de b en
//int et de x en double
a.f(q, x) ; // erreur : aucune méthode acceptable
52
Echange d’informations avec les
méthodes
• Dans les langages de programmation on rencontre deux façons
d’effectuer le transfert d’information
▫ Par valeur: la méthode reçoit une copie de la valeur de l’argument
effectif, elle travaille sur cette copie et la modifie sans que cela ne
modifie l’argument effectif
▫ Par adresse (ou par référence): la méthode reçoit l’adresse de
l’argument effectif sur lequel elle travaille directement et peut
modifier sa valeur
valeur de a avant : 2
valeur de a après : 7
valeur de n avant : 2
valeur de n après : 2