Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Les Concepts Orientés Objets en

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 50

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

<modificateur de visibilité >[abstract][final]class nom_de_classe {

//déclaration des données membres de la classe (attributs)


//déclaration des méthodes de la classe et du corps des méthodes
}

Les modificateurs de visibilité sont : « public », « private » ou bien sans modificateur.


Une classe abstraite est définit par le mot clé : « abstract »
Le mot clé « final » : Interdit l’héritage à partir de la classe
Les modificateurs : abstract et final ainsi que public et private sont mutuellement
exclusifs Anissa CHALOUAH 4
Déclaration de classe : Exemple

public class Rectangle {

• 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

<modificateur de visibilité >[static][final] <type> nom_attribut [=<expression>] ;

Les modificateurs de visibilité sont : « public », « private » et « protected » ou bien


sans modificateur (friendly).
Les attributs de classe sont définies par : « static »
Les constantes sont définies par : « final »
Anissa CHALOUAH 10
Variable d’instance (attribut d’objet )
Une variable d'instance nécessite simplement une déclaration de la variable dans le
corps de la classe.
Une variable d’instance précise l'état d'un objet auquel elle se réfère.
Deux objets différents, appartenant à la même classe, peuvent avoir des valeurs
différentes dans leurs variables d’instance respectives.

public class Rectangle {


private int longueur ;
private int largeur ;
}

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.

public class MaClasse {


static final double pi=3.14 ;
}

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

<mod_Visibilité >[static][final] <type_retour > nom_Methode (<liste_parametres>){

//déclaration des variables locales


//corps de la méthode
}

Les modificateurs de visibilité sont : « public », « private » et « protected » ou bien


sans modificateur (friendly).
Les méthodes de classe sont définies par : « static »
final : la méthode ne peut être modifiée (redéfinition lors de l'héritage interdite)
Anissa CHALOUAH 17
Méthode : Exemple

public class Rectangle {


private int longueur ;
private int largeur ;

public void affiche( ) {


System.out.println( " la longueur est : "+longueur+ "la largeur est" : +largeur) ;
}

public int calcul_surface ( ) {


return (longueur*largeur) ;
}

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

Constructeur Invoqué systématiquement


lors de la création d’objet

N’a pas de type de retour


(Pas même void ) Permet l’initialisation des
attributs
Anissa CHALOUAH 21
Constructeur
La définition d'un constructeur est facultative.
S’il n'est pas défini, la machine virtuelle appelle un constructeur par défaut vide créé
automatiquement.
Dès qu'un constructeur est explicitement défini, Java considère que le programmeur
prend en charge la création des constructeurs et que le mécanisme par défaut, qui
correspond à un constructeur sans paramètres, est supprimé. Si on souhaite maintenir
ce mécanisme, il faut définir explicitement un constructeur sans paramètres.

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.

Type de l’attribut Valeur par défaut


boolean false
char Caractère de code null
int, byte, short, int long 0
float, double 0.f ou 0.0
objet null
Anissa CHALOUAH 24
Constructeur : Exercice

public class Rectangle {


private int longueur ;
private int largeur ;

Rectangle () {longueur =10 ; largeur = 5 ;} // constructeur sans paramètres


Rectangle (int x,int y) {longueur =x ; largeur = y;}//constructeur avec 2 paramètres
Rectangle (int x) {longueur =2*x ; largeur = x ;} //constructeur avec 1 paramètre

public int calcul_surface ( ) {


return (longueur*largeur) ;
}

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

Chaque instance ainsi créée possède


son propre exemplaire de chacune des
variables définies dans la classe ; on
les appelle ses variables d'instance.

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 > ) ;

Ou en une seule déclaration

Nom_Classe nom_Objet = new nomClasse(<liste d’arguments>) ;

Anissa CHALOUAH 30
Création d’objet : Exemple
public class Rectangle {
private int longueur ;
private int largeur ;

Rectangle () {longueur =10 ; largeur = 5 ;}


Rectangle (int x,int y) {longueur =x ; largeur = y;}
Rectangle (int x) {longueur =2*x ; largeur = x ;}
}

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 ;

public void initialise (int x, int y) {longueur =x ; largeur = y ;}


public void initialise (int x) {longueur =2*x ; largeur = x ;}
public int calcul_surface ( ) {return (longueur*largeur) ; }
}

public class Test_Rect {


public static void main (String [] args) {
Rectangle r1, r3;
Rectangle r2 = new Rectangle ();
r1 = new Rectangle ();
r3 = new rectangle (5); /*erreur car la classe ne définit pas des constructeurs*/
……… } }

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 ;

Rectangle (int x,int y) {longueur =x ; largeur = y;}


Rectangle (int x) {longueur =2*x ; largeur = x ;}
}

Rectangle r1 = new Rectangle (10,4) // juste car on a un constructeur avec 2


paramètres.
Rectangle r1 = new Rectangle (10) // juste car on a un constructeur avec 1
paramètre.
Rectangle r1 = new Rectangle ()
// faux car on a pas un constructeur sans paramètres. Le constructeur par défaut
n’est plus valable car la classe possède au moins un constructeur.

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);}}

public class Test_Rect {


public static void main(String[] args) {
Rectangle r = new Rectangle(10,5);
Rectangle r2 = new Rectangle(10,5);
Rectangle r3= new Rectangle (14);
System.out.println(r.equals(r3));// affiche false
System.out.println(r.equals(r2));// affiche true

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 :

<nom_Objet>.<nom_méthode> ( [<liste des arguments effectifs>] ) ;

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;}
}

Rectangle r = new Rectangle (10,5) ;


r.affiche() ; // Appel de la méthode affiche
int s = r.calcul_surface() ; //Appel de la méthode calcul_surface
r.setlong(20) ; //Appel de la méthode setlong pour modifier la longueur

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.

Elle constitue un des apports les plus intéressants du langage Java.

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.

La surcharge peut concerner une méthode locale ou héritée.

Nous avons déjà utilisé la surcharge lors de la définition de constructeurs d'objets et


avons vu à cette occasion que la sélection par le compilateur de la méthode à invoquer
est réalisée sur la base de la liste et du type de ses différents paramètres.
Ce que nous avons fait pour les constructeurs peut l'être pour toute méthode d'une
classe.

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

//Pour allonger la longueur d’un rectangle


void allonger(int l) { //Appel de constructeur à 2 paramètres
longueur+=l;} Rectangle r = new Rectangle (5,10) ;
//Pour allonger un rectangle // Appel de la 1ère méthode surchargée
void allonger(int l, int k) { r.allonger (10) ;
longueur+=l; // Appel de la 2ème méthode surchargée
larg+= k; r.allonger (10, 3) ;
}

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é.

La référence « this » peut être utile :


Lorsqu’une variable locale (ou un paramètre) cache, en portant le même nom, un attribut de la
classe.
Pour appeler un constructeur depuis un autre constructeur.

Anissa CHALOUAH 47
This : Exemple
class Rectangle{

private int longueur, largeur;


private String couleur;

//paramètre cache un attribut


Rectangle (int longueur, int largeur) {
this.longueur = longueur ;
this.largeur = largeur ;}
//appeler un constructeur depuis un autre constructeur
Rectangle (int longueur, int largeur, String couleur) {
this(longueur, largeur);
this.couleur=couleur;
}
}

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

Vous aimerez peut-être aussi