Académique Documents
Professionnel Documents
Culture Documents
(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
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() ;
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;
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
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
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
27 POO-R.ABERBOUR 22/02/2024
class Point{
double x, y;
// constructeur
Point(double a , double b){
x = a; y = b;}……..}
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