Les Concepts Orientés Objets en
Les Concepts Orientés Objets en
Les Concepts Orientés Objets en
Java
Anissa CHALOUAH 1
Classe : Définition
Une classe est un support d’encapsulation : c'est un ensemble de données et de fonctions
regroupées dans une même entité.
Une classe est une description abstraite d'un objet. Les fonctions qui opèrent sur les
données sont appelées des méthodes.
Instancier une classe consiste à créer un objet sur son modèle. Entre classe et objet il y
a, en quelque sorte, le même rapport qu'entre type et variable.
En Java : tout appartient à une classe sauf les variables de types primitifs (int, float…).
Pour accéder à une classe il faut en déclarer une instance de cette classe (ou un objet).
Anissa CHALOUAH 2
Classe : Définition
Une classe comporte sa déclaration, des variables et la définition de ses méthodes.
Une classe se compose de deux parties : un en-tête et un corps. Le corps peut être
divisé en 2 sections : la déclaration des données et des constantes et la définition des
méthodes.
Les méthodes et les données sont pourvues d'attributs de visibilité qui gère leur
accessibilité par les composants hors de la classe.
Anissa CHALOUAH 3
Classe : Déclaration
• Par convention, en Java les noms de classes commencent par une lettre majuscule.
• si elle est composé de plusieurs mots, ces mots doivent être liés par « _ » et/ou commencent par une
lettre majuscule.
Anissa CHALOUAH 5
Classe : Notation UML
Anissa CHALOUAH 6
Membres d’une classe
Anissa CHALOUAH 7
Membres d’une classe
C’est l’ensemble des éléments définissant les propriétés structurelles ou fonctionnelles
des instances d’une classe :
attribut
► variable d’instance,
► variable de classe
méthode
► méthode d’instance
► méthode de classe,
constructeur, destructeur,
classe imbriquée.
Anissa CHALOUAH 8
Attribut : Définition
Les données d'une classe sont contenues dans des variables nommées propriétés ou
attributs.
Ce sont des variables qui peuvent être :
des variables d'instances (attributs d’objet)
des variables de classes (attributs de classe)
des constantes.
Anissa CHALOUAH 9
Attribut : Déclaration
Anissa CHALOUAH 11
Variable de classe (static)
Une variable de classe (attribut de classe=attribut statique) est une variable
représentant des propriétés dont la valeur est partagée par toutes les instances d’une
même classe.
Un attribut statique est un attribut commun à tous les objets
Elles ne sont définies qu'une seule fois quel que soit le nombre d'objets instanciés de la
classe.
Leur déclaration est accompagnée du mot clé static.
Chaque instance de la classe partage la même variable.
Il est préférable d’accéder à un attribut statique via le nom de la classe (mais rien
n’empêche de le faire via un objet quelconque de la classe)
Anissa CHALOUAH 12
Attribut de classe : Exemple
Reprenez l’exemple de la classe Rectangle. On souhaite sauvegarder le nombre des objets
crées et attribuer à chaque objet son numéro d’ordre.
Pour satisfaire à cet objectif, on a certainement besoin d’un attribut de type statique qui est
commun à tous les objets et qui sauvegarde le nombre d’objets déjà crées.
class Rectangle{
static int count =0;
private int longueur, larg;
private int num;
Rectangle (int x, int y) {
Count++ ;
num = count ;
longueur = x ;
largeur = y ;}
……. }
Anissa CHALOUAH 13
Attribut de classe : Exemple
class Test_Rec {
public static void main (String [] args){
System.out.println ("Nombre des objets = " + Rectangle.count) ; // affiche 0
Rectangle r = new Rectangle (10,5);
System.out.println ("Nombre des objets = " + Rectangle.count) ; // affiche 1
System.out.println ("Numéro de l’objet crée = " + r.num) ; //affiche 1
Rectangle r3= new Rectangle (14);
System.out.println ("Nombre des objets ="+ Rectangle.count) ; //affiche 2
System.out.println ("Numero de l’objet crée = " + r3.num) ; //affiche 2
Rectangle r2 = new Rectangle();
System.out.println ("Nombre des objets = " + Rectangle.count) ; //affiche 3
System.out.println ("Numero de l’objet crée = "+ r2.num) ; //affiche 3
}}
Anissa CHALOUAH 14
Constante
Une variable qualifiée de final signifie que la variable est constante.
Une variable déclarée final ne peut plus voir sa valeur modifiée.
On ne peut déclarer de variables final locales à une méthode.
Les constantes sont qualifiées de final et static.
Anissa CHALOUAH 15
Méthode : Définition
Les méthodes sont des fonctions qui implémentent les traitements de la classe.
Les méthodes représentent l’équivalent des procédures ou fonctions dans les langages
classiques de programmation.
Les méthodes agissent sur les attributs définis à l’intérieur de la classe.
Anissa CHALOUAH 16
Méthode : Déclaration
Anissa CHALOUAH 18
Méthodes de classe : méthodes statiques
Elles désignent les méthodes dont les actions concernent la classe entière et non pas un
objet particulier.
L’accès à ces méthodes ne nécessite pas la création d’un objet de la classe, car on peut
appeler directement la méthode à travers le nom de la classe(mais rien n’empêche de le
faire à partir d’un objet).
On peut utiliser aussi ces méthodes statiques pour manipuler des données statiques
Anissa CHALOUAH 19
Méthode de classe : Exemple
public class Math {
static double PI = 3.14 ; //c’est un attribut statique
static double getPI () {Return (PI) ;} // La méthode statique manipule des attributs
statiques
static double diametre (double r) {return (PI*2*r)} // c’est une méthode statique
static double puissance (double x) {return (x*x);} // c’est une méthode statique
}
class Test_Math {
public static void main (String [] args) {
double i= Math.puissance (6);
System.out.println ("I=" + i);
Math m = new Math ();
double d = m.diametre (5.1);
System.out.println (“Le diametre = “ + d) ;}}
Anissa CHALOUAH 20
Constructeur : Définition
Méthode particulière
Porte obligatoirement le
même nom que la classe
Anissa CHALOUAH 22
Types de constructeurs
Constructeur avec
Constructeur par Constructeur avec
initialisation des
défaut initialisation fixe
variables
Ne nécessite pas Initialisation à
de définition travers des
explicite: son il permet valeurs passées
existence d’attribuer des en paramètre au
découle valeurs constructeur
automatiquement prédéfinies lors de la
de la définition création de
de la classe. l’objet
Anissa CHALOUAH 23
Constructeur par défaut
Ne nécessite pas de définition explicite: son existence découle automatiquement de la
définition de la classe.
Il affecte des valeurs par défaut aux attributs.
Anissa CHALOUAH 25
Manipulation d’objet
Anissa CHALOUAH 26
Création d’objet : Instanciation
La création d’un objet à partir d’une classe est appelée instanciation. Cet objet est une
instance de sa classe.
L’instanciation permet de créer autant d’instances (d’objets) que nécessaire
Une instanciation se décompose en trois phases
1. Création et initialisation des attributs en mémoire, à l’image d’une structure.
2. Appel des méthodes particulières : les constructeurs qui sont définies dans la classe
3. Renvoi d’une référence sur l’objet (son identité) maintenant créé et initialisé.
La création des objets se fait généralement dans les classes qui utilisent la classe à
instancier et plus particulièrement dans la méthode qui constitue le point d’entrée
« main »
Anissa CHALOUAH 27
Création d’objet : Instanciation
Anissa CHALOUAH 28
Création d’objet : Exemple
Si je crée plusieurs objets de type Rectangle, ils auront chacun leur propre
variable longueur et leur propre variable largeur
Anissa CHALOUAH 29
Création d’objet (Instanciation) : Syntaxe
Nom_Classe nom_Objet ;
nom_Objet= new nomClasse( < liste d’arguments > ) ;
Anissa CHALOUAH 30
Création d’objet : Exemple
public class Rectangle {
private int longueur ;
private int largeur ;
Créez deux rectangles, ayant comme longueur 10 et comme largeur 5, l’un en vous basant sur le constructeur sans paramètres
précédemment définit et l’autre en se basant sur le constructeur à 2 paramètres.
Rectangle r1;
r1= new Rectangle();
Rectangle r2= new Rectangle(10,5);
Anissa CHALOUAH 31
Création d’objet (Instanciation)
L'affectation de l'opérateur new à la référence ne signifie en aucun cas que
l'on stocke l'objet dans la référence, cela indique que la référence pointe vers
l'objet nouvellement créé!
En Java, tous les objets sont instanciés par allocation dynamique. Dans
l'exemple, la variable r1 contient une référence sur l'objet instancié.
Si r1 désigne un objet de type Rectangle l'instruction r2 = r1 ne définit pas un
nouvel objet mais r2 et r1 désignent tous les deux le même objet.
Anissa CHALOUAH 32
Création d’objet (Instanciation)
Si l'opérateur new n'obtient pas l'allocation mémoire nécessaire, il lève l'exception
OutOfMemoryError.
L’objet est détruit lorsque il n’ y a plus des références pour cet objet (sortie d’un bloc de
visibilité, etc....).
La création des objets se fait généralement dans les classes qui utilisent la classe à
instancier et plus particulièrement dans la méthode qui constitue le point d’entrée « main
».
Anissa CHALOUAH 33
Création d’objet
cas1 : la classe à instancier ne possède pas des constructeurs
public class Rectangle {
private int longueur ;
private int largeur ;
Anissa CHALOUAH 34
Création d’objet
cas 2 : la classe à instancier possède au moins un constructeur
public class Rectangle {
private int longueur ;
private int largeur ;
Anissa CHALOUAH 35
Création d'objets identiques
MaClasse m1 = new MaClasse();
MaClasse m2 = m1;
m1 et m2 contiennent la même référence et pointent donc tous les deux sur le même
objet : les modifications faites à partir d'une des variables modifient l'objet.
Pour créer une copie d'un objet, il faut utiliser la méthode clone() :
cette méthode permet de créer un deuxième objet indépendant mais identique à l'original.
Cette méthode est héritée de la classe Object qui est la classe mère de toutes les classes en Java.
MaClasse m1 = new MaClasse();
MaClasse m2 = m1.clone();
m1 et m2 ne contiennent plus la même référence et pointent donc sur des objets différents.
Anissa CHALOUAH 36
Références & comparaison d’objets (1)
Les variables déclarés de type objet ne contiennent pas un objet mais une référence
vers cet objet.
Lorsque l'on écrive c1 = c2 (c1 et c2 sont des objets), on copie la référence de l'objet c2
dans c1 : c1 et c2 réfèrent au même objet (ils pointent sur le même objet).
L'opérateur == compare ces références.
Deux objets avec des propriétés identiques sont deux objets distincts
Rectangle r1 = new Rectangle(100,50);
Rectangle r2 = new Rectangle(100,50);
if (r1 == r1) { ... } // vrai
if (r1 == r2) { ... } // faux
Anissa CHALOUAH 37
Références & comparaison d’objets (2)
Pour comparer l'égalité des variables de deux instances, il faut munir la classe d'une
méthode à cet effet : la méthode equals héritée de Object qu’il faut redéfinir.
public class Rectangle {
private int longueur ;
private int largeur ;
…….
public boolean equals(Object o){
return ((this.largeur==((Rectangle)o).largeur)&&this.longueur
==((Rectangle)o).longueur);}}
Anissa CHALOUAH 38
Accès aux attributs d’un objet
Pour accéder aux attributs de l’intérieur de la classe, il suffit d’indiquer le nom de
l’attribut auquel on veut accéder.
Pour accéder de l’extérieur de la classe, on utilise la syntaxe suivante :
<nom_Objet>.<nom_attribut>
class Rectangle{
class Test_Rec {
int longueur, larg; public static void main (String [] args){
int num;
Rectangle (int x, int y) { Rectangle r1 = new Rectangle (10,5);
longueur = x ; r1.longueur=20;
largeur = y ;} r1.largeur=15;
……. } }}
Anissa CHALOUAH 39
Accès aux méthodes d’un objet
A l’intérieur d’une classe, les méthodes de cette classe seront appelées en indiquant le
nom et la liste des paramètres effectifs de la méthode.
A l’extérieur de la classe, l’invocation d’une méthode se fait comme suit :
La liste des arguments effectifs doit concorder en nombre et en type avec la liste des
arguments formels.
Anissa CHALOUAH 40
Accès aux méthodes d’un objet : Exemple
public class Rectangle {
private int longueur ;
private int largeur ;
Rectangle (int x,int y) {longueur =x ; largeur = y;}
public int calcul_surface ( ) {return (longueur*largeur) ;}
public void setLong(int l){longueur=l;}
}
Anissa CHALOUAH 41
Surcharge de méthodes
Anissa CHALOUAH 42
Surcharge de méthodes
La surcharge de méthode est la possibilité d'appeler plusieurs méthodes avec le même
nom, à condition que leurs arguments diffèrent (en type et/ou en nombre).
Elle permet de donner le même nom à des méthodes comportant des paramètres
différents et simplifie donc l'écriture de méthodes sémantiquement similaires sur des
paramètres de type différent.
Anissa CHALOUAH 43
Surcharge de méthodes
Il est ainsi possible de définir une méthode réalisant la même opération sur des
variables différentes en nombre ou en type.
Anissa CHALOUAH 44
Surcharge : Exemple
La classe Rectangle peut avoir plusieurs méthodes Allonger Lors de l’appel des méthodes surchargées, le compilateur sait
() acceptant des paramètres différents en nombre et/ou en distinguer entre les méthodes en considérant le nombre et les
types. types des paramètres
Anissa CHALOUAH 45
Mots clés : this, null, final
Anissa CHALOUAH 46
Mot clé : this
Cette variable sert à référencer dans une méthode l'instance de l'objet en cours
d'utilisation.
this est un objet qui est égale à l'instance de l'objet dans lequel il est utilisé.
Anissa CHALOUAH 47
This : Exemple
class Rectangle{
Anissa CHALOUAH 48
Le mot clé : Null
Il permet de représenter la référence qui ne référence rien. C’est aussi la valeur par
défaut d’initialisation des attributs représentant des références.
null ne peut pas être utilisé comme un objet normal : il n'y a pas d'appel de méthodes et
aucune classe ne puisse en hériter.
Le fait d'initialiser une variable référent un objet à null permet au garbage collector de
libérer la mémoire allouée à l'objet.
class Test_Rec {
public static void main (String [] args) {
Rectangle r;
if (r==null)
r= new Rectangle (10,12);
r.affiche();}}
Anissa CHALOUAH 49
Le mot clé : final
Le mot clé final s'applique aux variables, aux méthodes et aux classes.
Une variable qualifiée de final signifie que la variable est constante. Une variable
déclarée final ne peut plus voir sa valeur modifiée. On ne peut déclarer de variables final
locales à une méthode. Les constantes sont qualifiées de final et static.
Une méthode final ne peut pas être redéfinie dans une sous classe.
Lorsque le modificateur final est ajouté à une classe, il est interdit de créer une classe
qui en hérite.
Anissa CHALOUAH 50