Vous êtes sur la page 1sur 6

CHAPITRE 3

LES PRINCIPES DE LA PROGRAMMATION ORIENTÉE


OBJET

Regrouper les données et les traitements relatifs à une même entité (réelle ou conceptuelle)
dans une entité informatique appelée objet. Un système d'information est un ensemble d'objets
qui interagissent. Les modèles d'objets sont définis dans des classes.

1. L'objet

Les données de l'objet sont appelées des attributs. Elles indiquent son état à un instant donné.
Les traitements (ou fonctions) de l'objet sont appelés des méthodes. Ils définissent son
comportement. Chaque objet possède une identification unique qui est indiquée par une ou
plusieurs références. L'objet peut se comporter comme une boîte noire (le contenu est masqué
par des contrôles d'accès). Dans ce cas, quelques méthodes doivent assurer son intégration
dans le système (interface de service).

2. La classe

La classe est un modèle de définition pour les objets ayant les mêmes propriétés. Une classe
doit être considérée comme un nouveau type défini par le concepteur. Il existe des contrôles
d'utilisation d'une classe. La classe définie les contrôles (ou restrictions) d'accès aux membres
(attributs et méthodes) de ses objets. Le contrôle d'utilisation d'une classe et celui d'accès aux
membres d'une classe sont deux concepts différents.

2.1 Syntaxe de la déclaration d'une classe

En JAVA, la syntaxe de déclaration d'une classe est la suivante :

[private/public] [abstract/final] class NomClasse


[extends NomSuperClasse]
[implements NomInterface1, Interface2, …, InterfaceN]
{
// déclaration des attributs
// déclaration des méthodes
}

 private et public : deux modificateurs d'accès précisant la possiblité d'utilisation de


la classe :
 private indique que l'utilisation de la classe est réservée aux classes du
même package (regroupement logique de classes; voir chapitre 7)
 public donne la possibilité d'utiliser la classe à toutes les autres classes
 par défaut, le modificateur est private

 abstract et final : deux qualificateurs en relation avec le concept d'héritage


(voir chapitre 5)

 extends : annonce l'héritage de la classe NomSuperClasse (voir chapitre 5)

1
 implements : annonce l'implémentation d'une ou plusieurs interfaces par la
classe (voir chapitre 6)

 Un nom de classe commence par une lettre majuscule

 Dans un fichier JAVA, il ne peut y avoir qu'une seule classe publique

2.1.1. Déclaration des attributs

En JAVA, la syntaxe de déclaration d'un attribut est la suivante :

[private/public/protected][static][volatile][final]
type_attribut nom_attribut [= valeur];

 private, public et protected : des modificateurs d'accès à l'attribut à partir d'autres


classes :
 private indique que l'accès est réservé aux méthodes de la même classe,
 public donne la possibilité d'accès à toutes les méthodes des autres classes,
 protected limite l'accès aux méthodes de la même classe, des classes
dérivées (voir chapitre 5) et des classes du même package,
 static : précise le fait qu'il y aura une seule copie de cet attribut qui est
commune à tout objet crée à partir de la classe en question (il s'agit d'un
attribut de classe),
 final : indique que l'attribut est une constante.

2.1.2. Déclaration des méthodes

En JAVA, la syntaxe de déclaration d'une méthode est la suivante :

[private/public/protected]
[native] [transient][synchronized]
[static][final/abstract] type_de_retour nom_méthode
([t_paramètre1 paramètre1, …, t_paramètreN paramètreN] )
{
// déclaration des variables locales;
[type_de_retour var_résultat;]
// instructions de la méthode
[return var_résultat;]
}
 private, public et protected : des modificateurs d'accès autorisant l'appel aux
méthodes de la classe (voir déclaration des attributs),
 static : précise que l'exécution de la méthode n'est pas liée aux instances de la
classe (il s'agit d'une méthode de classe)
 abstract : la méthode ne comporte pas de code. Par conséquent toute la classe
devient abstraite (voir chapitre 5),
 final : la méthode ne pourra pas être redéfinie dans une classe dérivée (voir
chapitre 5)

2
 Le passage de paramètres est par valeur pour les arguments de type primitif (de
base) et par référence pour les arguments de type classe (référence d'objet) et
les tableaux
 Le nom d'une méthode commence par une minuscule
 Le nom d'une variable locale est en minuscule (si non final)
 Une méthode peut être surchargée : définition, au sein d'une même classe, de plusieurs
méthodes portant le même nom mais qui sont différents au niveau des paramètres
(type, ordre et nombre d'arguments)

Exemple :
class Voiture // private
{ private int matricule;
public String couleur; // pour les exemples suivants
public void nouvMatricule(int m)
{matricule = m;}
public void changerCouleur (String c)
{couleur = c;}
}

2.2. La notion de constructeur

 Le constructeur d'une classe est une méthode appelée une seule fois par objet et ce au
moment de sa création. Le constructeur porte le même nom que celui de la classe.
 Le rôle du constructeur est d'initialiser les attributs de l'objet.
 Par défaut, JAVA offre un constructeur qui initialise les attributs de l'objet crée par les
nulls correspondant à leurs types (0 pour int, null pour les références aux objets, …).
 Le programmeur peut définir ses propres constructeurs (voir surcharge des méthodes)
pour initialiser certains attributs par des valeurs spécifiques.

 Le constructeur est publique.

 Le constructeur ne possède pas de type (même pas void).


Exemple :
class Voiture
{ private int matricule;
public String couleur; // pour les exemples suivants
public Voiture ()
{matricule = 0; couleur = "blanc";}
public Voiture (int m)
{matricule = m; couleur ="blanc"; }
public Voiture (int m,String c)
{matricule = m; couleur =c; }
public void nouvMatricule(int m)
{matricule = m;}
public void changerCouleur (String c)
{couleur = c;}}

2.3. La notion de destructeur

3
 Le destructeur est une méthode qui exécute certaines tâches avant la destruction d'un
objet. Il est aussi appelé "finaliseur".

 L'exécution du destructeur se fait automatiquement par le ramasse miettes.


 En JAVA, le destructeur est optionnel. S'il est décrit, il est unique.

 En JAVA, le destructeur s'appelle finalize. Il est de type void et ne reçoit pas de


paramètres. Son modificateur d'accès est protected. Son prototype est alors le suivant :

protected void finalize()

Exemple
class Voiture
{ private static int nbVoiture = 0;
private int matricule;
public String couleur; // pour les exemples suivants
public Voiture ()
{matricule = 0; couleur = "blanc"; nbVoiture++;}
public Voiture (int m)
{matricule = m; couleur ="blanc"; nbVoiture++;}
public Voiture (int m,String c)
{matricule = m; couleur =c; nbVoiture++;}

protected void finalize()
{ nbVoiture --; }}

3. L'instanciation (ou création) des objets

3.1. Référence d'un objet

Les références d'objets sont des variables de type classe qui permettent de désigner des
objets à la manière des pointeurs en C (sans manipulation directe d'adresse). La référence
qui ne pointe sur aucun objet contient la valeur "null". Il est possible d'avoir à un instant t
plusieurs références pour désigner un même objet. Les opérateurs possibles sur les
références d'objets sont : new, =, ==, != (si deux références désignent un même objet) et
instanceof.

3.2. Instanciation

La création d'un objet se fait à l'aide de l'opérateur new qui se charge de :


1. Allouer l'espace mémoire nécessaire pour stocker les attributs de l'objet en cours
de construction
2. Appeler le constructeur de l'objet adéquat pour initialiser les attributs. Le choix
du constructeur se fait en fonction des paramètres passés (mêmes règles que
pour la surcharge des méthodes normales)
3. Retourner une référence sur l'objet créé.

Un objet qui n'est référencé par aucune référence est détruit par le ramasse miettes (Garbage
Collector) qui s'exécute en permanence. Cependant, on peut demander explicitement le
service de ce processus par : "System.gc()".

4
Exemple
public class TestVoiture
{
public static void main(String [] args)
{ Voiture v1;
v1 = new Voiture();
Voiture v2 = new Voiture(6889,"bleu");
}
}

4. Utilisation d'un objet

La possibilité de créer un objet dépend des restrictions d'utilisation de la classe à instancier.


La manipulation des membres d'un objet crée suit les restrictions d'accès précisées dans la
classe. Les attributs des instances (non static) sont désignés selon la syntaxe suivante :
"nomObjet.nomAttribut". Les attributs des classes (static) sont désignés selon la syntaxe
suivante : "NomClasse.nomAttribut". Les méthodes des instances (non static) sont désignées
selon la syntaxe suivante : "nomObjet.nomMéthode". Les méthodes des classes (static) sont
désignées selon la syntaxe suivante : "NomClasse.nomMéthode".

Exemple
public class TestVoiture
{
public static void main(String [] args)
{ Voiture v1;
v1 = new Voiture();
v1.nouvMatricule(555);
v1.couleur = "gris"; // accepté car couleur est public
// v1.matricule=555; n'est pas accepté car matricule est
// private
}
}

5. Référence sur l'objet courant "this"

Le mot-clé this représente une référence sur l'objet courant, c.à.d., celui qui
possède la méthode qui est en train de s'exécuter.

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 déclencher un constructeur depuis un autre constructeur.

Exemple
class Voiture
{ private int matricule;

5
public String couleur; // pour les exemples suivants

public Voiture (int matricule,String couleur)
{this.matricule = matricule;
this.couleur =couleur;}

}

6. Détermination de la nature d'un objet

L'opérateur instanceof permet de tester si l'objet référencé est une instance d'une classe
donnée (ou d'une de ses sous-classes voir chapitre 5).

Exemple

if (v1 instanceof Voiture) // résultat vrai ou faux

7. Un objet comme attribut dans un autre objet

Les objets peuvent être utilisés comme attributs dans d'autres objets selon les restrictions
d'utilisation. Si l'objet jouant le rôle d'attribut est déjà crée (utilisé ailleurs), il suffit d'effectuer
une affectation entre références pour réaliser le lien à travers un passage de paramètre (au
niveau du constructeur ou d'une autre méthode). Si l'utilisation de l'objet attribut est réservée à
l'objet qui l'intègre, l'objet attribut doit être crée comme tout autre objet par l'opérateur new au
niveau du constructeur de la classe qui l'utilise ou même dans l'instruction d'appel du
constructeur (ou d'une autre méthode).

Exemple
class Moteur
{……}
class Voiture
{ private Moteur moteur;
private int matricule;
public String couleur;
public Voiture ()
{matricule = 0; couleur = "blanc";
moteur = new Moteur(5,"essence");} // 1er cas
public Voiture (int m,String c, Moteur mot)
{matricule = m; couleur =c; moteur=mot;}//2ème cas

}

Vous aimerez peut-être aussi