Vous êtes sur la page 1sur 30

Programmation Orientée Objet

(Langage Java)
L2 ACAD C

Cour 22/02/2024
rima.aberbour@gmail.com

2023-2024
Références
 S.Boukhedouma, Cours POO USTHB
 C.Ighiliza, Cours POO USTHB
 K.Baya et D.Zaouche, POO USTHB

2 POO-R.ABERBOUR 22/02/2024
Les Concepts de Classe et d’Objet

3 POO-R.ABERBOUR 22/02/2024
Exemple
// Fichier "Point.java"
class Point {
double x,y;
// définition du constructeur Point

Point (double x1, double y1) { x= x1, y = y1 ; }

void deplacer (double a, double b)


{x = x+a ; y= y+b ;}
}

4 POO-R.ABERBOUR 22/02/2024
// Fichier "Cercle.java"
Exemple
class Cercle {
Point centre ;
double rayon;
Color couleur;
// définition de la méthode deplacer
void deplacer (double a, double b) {
centre.deplacer(a, b); }
Cercle () {// définition du constructeur Cercle
centre = new Point(0.0, 0.0);
rayon = 2.0 ;
couleur = Color.red; }
// définition d’un 2ème constructeur Cercle (principe de surcharge)
Cercle (double r, Color c) {
centre = new Point(1.0, 0.0); /* Création du point centre initialisé à (1,0) selon le
constructeur Point */
rayon = r ; couleur = c ;}
}
5 POO-R.ABERBOUR 22/02/2024
Exemple
// Fichier "Program.java"
class Program {
public static void main (String arg[ ]) {
Cercle C1 = new Cercle(); // C1 est créé avec le 1er constructeur Cercle
Cercle C2 = new Cercle(3.0, Color.blue); // C2 est créé avec le 2ème constructeur
C1.Deplacer (4.0, 3.0) ; // Appel de la méthode Deplacer pour l’objet C1
System.out.println ("le nouveau centre du cercle C1 est : ") ; C1.centre.Afficher() ;

C2. Deplacer (3.4, 3.6) ; // Appel de la méthode Deplacer pour l’objet C2


System.out.println ("le nouveau centre du cercle C2 est :") ; C2.centre.Afficher() ; }
}

6 POO-R.ABERBOUR 22/02/2024
Références aux objets

7 POO-R.ABERBOUR 22/02/2024
Références aux objets
 Au moment de l’exécution d’un programme, lorsqu’une
instruction new est exécutée, un objet en mémoire est créé. Le
nom de l’objet spécifié par le programmeur contient l’adresse
mémoire appelée référence de l’objet. L’objet est alors manipulé à
travers sa référence.
 En plus des attributs de l’objet, l’espace réservé à l’objet comporte
un lien vers les méthodes de la classe.
 Même si la manipulation des références aux objets reste
transparente pour le programmeur Java, il est intéressant d’en
comprendre le mécanisme.

8 POO-R.ABERBOUR 22/02/2024
Exemple

class Point {

double x,y;

Point(double x1, double y1) { x= x1, y = y1 ; } // définition du constructeur Point

void Deplacer (double a, double b) {


x = x+a ; y= y+b ;}
}

9 POO-R.ABERBOUR 22/02/2024
Exemple

class Program_Point
public static void main (String arg [ ]) {
Point p = new Point (3.5, 5.0);
Point q; // q est juste une référence, pas d’objet créé
q = p; // affectation de la référence d’objet p à la référence q
p. Deplacer (1.0, -2.2);
System.out.println ("abscisse de p = "+ p.x) ;
System.out.println ("abscisse de q = "+ q.x) ;
}

10 POO-R.ABERBOUR 22/02/2024
Exemple
A l’affichage, on aura :
 L’affectation de la valeur de p à q n’a pas créé un nouvel objet de
type Point mais simplement une référence à l’objet pointé par
p.
 Pour créer deux objets distincts, il faut utiliser l’opérateur new
pour chacun des objets. L’utilisation des références prend
toute son importance lorsque les arguments sont
transmis aux méthodes.

11 POO-R.ABERBOUR 22/02/2024
La notion de référence

12 POO-R.ABERBOUR 22/02/2024
La notion de référence

13 POO-R.ABERBOUR 22/02/2024
La notion de référence

14 POO-R.ABERBOUR 22/02/2024
La notion de référence

15 POO-R.ABERBOUR 22/02/2024
Création d’un tableau d’objets
Rappelons que les tableaux sont des entités situés entre les types primitifs et
les objets, plus proches des objets puisque leur création nécessite un
opérateur new, de plus ils sont manipulés par référence.

16 POO-R.ABERBOUR 22/02/2024
Création d’un tableau d’objets

Pour créer un tableau d’objets, il faut:


 Créer le tableau devant contenir les références aux objets
 Créer les objets en question un par un et les référencer par les
éléments du tableau.

17 POO-R.ABERBOUR 22/02/2024
Création d’un tableau d’objets
 Exemple : Voici un exemple de création d’un vecteur V de 3
objets de type Point.

classTab_Objet
{ public static void main (String [ ] arg)
{ Point [ ] V = new Point [3]; /* création d’un vecteur de trois références vers des
objets Point */
for (i = 0 ; i< V.length ; i+ +)
{
/* utilisation d’un constructeur avec deux paramètres */
V[i] = new Point (i, 2*i);

System.out.println (V[1].y); }
}
18 POO-R.ABERBOUR 22/02/2024
Des types simples vers les objets
et vice versa

19 POO-R.ABERBOUR 22/02/2024
Des types simples vers les objets et
vice versa
 En Java, il est impossible de convertir des variables de type simple
en objet et vice versa.
 Cependant, Java fournit un package (java.lang) contenant des
classes spéciales appelées classes enveloppes, correspondant à
chaque type simple (ex : Integer pour les entiers, Float pour les
flottants …). Grâce aux méthodes de classes définies dans ces
classes, ont peut créer, pour chaque variable de type simple, un
objet correspondant de la classe.

20 POO-R.ABERBOUR 22/02/2024
Des types simples vers les objets et
vice versa
 Exemple: création d’un objet de type Integer à partir de l’entier 100 .
Integer obj = new Integer (100) ;

 obj est un objet créé à partir de la classe enveloppe Integer. Il s’avère souvent
nécessaire de revenir aux valeurs de type simple. Il existe des méthodes
pour réaliser ces opérations
int a = obj.intValue() ; // renvoie 100

 De la même façon, on peut avoir des objets d’autres types float, long,
double, short, boolean et char créés respectivement, à partir des classes
Float, Long, Double, Short, Boolean et Character. Revenir aux valeurs
de types primitifs se fait en utilisant respectivement, les méthodes
floatValue, longValue, doubleValue, shortValue, booleanValue et
charValue.
21 POO-R.ABERBOUR 22/02/2024
Le Ramasse miettes (Garbage
(Garbage
Collector)
Collector)
Un programme Java a besoin de mémoire pour pouvoir s'exécuter (en
règle général, plus il en a, mieux c'est).
Comme on l'a déjà vu, l’opérateur new se charge d'allouer de la
mémoire à la demande.
Une conséquence évidente est que si l'on ne libère pas la mémoire des
objets devenus inutiles, on peut rapidement en manquer.

22 POO-R.ABERBOUR 22/02/2024
Le Ramasse miettes (Garbage
(Garbage
Collector)
Collector)
 Le ramasse-miettes (Garbage Collector) se charge de repérer ces
objets inutiles, et de libérer la mémoire qu'ils utilisent
inutilement.
 Il opère de façon totalement automatisée. Juste avant de libérer
l’espace mémoire d’un objet qui n’est plus référencé, le ramasse-
miettes invoque la méthode finalize de cet objet.
 La méthode finalize de la classe Object (superclasse du langage
java) a pour prototype :
protected void finalize() ;

23 POO-R.ABERBOUR 22/02/2024
AutoRéférence
instance courante

24 POO-R.ABERBOUR 22/02/2024
L'instance courante : this

 Dans le corps d’une méthode d’un objet, le mot clé this


désigne l’instance sur laquelle est invoquée la méthode.
 Ainsi this est l’objet en cours d’utilisation.
 En d’autres termes, this représente l’objet auquel s’applique
la méthode.

25 POO-R.ABERBOUR 22/02/2024
L'instance courante : this

Exemple:
 Point p1,p2,p3;
 p1=new Point(3,4);
Invocation Message affiché L’instance
 p2=new Point(-3,-4); courante
 p3=new Point(0,4); lors de l’exécution
de la méthode
Affiche()
p1.affiche() x=3 et y=4 p1 représente this

p2.affiche() x=-3 et y=-4 p2 représente this

p3.affiche() x=0 et y=4 p3 représente this

Affiche() erreur This n’est pas défini


26 POO-R.ABERBOUR 22/02/2024
L'instance courante : this
Exem
xemple d’utilisat
lisation du mot-ot-clé this
1. Pour distinguer entre un nom d’attribut et un nom de paramètre
dans le cas où ils sont identiques

class Point{ Le compilateur ne


double x, y; déclare pas d’erreurs
-
// constructeur Les valeurs des
attributs ne changent
Point(double x , double y){ pas
x = x; y = y;}
……..}

27 POO-R.ABERBOUR 22/02/2024
class Point{
double x, y;
// constructeur
Point(double a , double b){
x = a; y = b;}……..}

class Point{ L’attribut x de l’instance courante


double x, y;
// constructeur
Point(double x , double y){
Le paramètre d’appel x
this.x = x; this.y = y;}
……}
28 POO-R.ABERBOUR 22/02/2024
L'instance courante : this
2. La méthode a besoin de manipuler la référence de l’objet courant.
Exemple:
 Si on veut écrire une méthode qui compare deux points et rend
celui qui a l’abscisse minimale.

class Point{
double x; double y;
Point(double x, double y){
this.x = x; //Dérouler
this.y = y;} Point p1 =new Point (3,4);
Point p2= new Point(4,7);
Point minAbs(Point p ){ p1.minAbs(p2).affiche();
if ( x < p.x ) return this ; p2.minAbs(p1).affiche();
else return p ;}

29 22/02/2024
POO-R.ABERBOUR
L'instance courante : this

30 POO-R.ABERBOUR 22/02/2024

Vous aimerez peut-être aussi