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.
1
implements : annonce l'implémentation d'une ou plusieurs interfaces par la
classe (voir chapitre 6)
[private/public/protected][static][volatile][final]
type_attribut nom_attribut [= valeur];
[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;}
}
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.
3
Le destructeur est une méthode qui exécute certaines tâches avant la destruction d'un
objet. Il est aussi appelé "finaliseur".
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 --; }}
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
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");
}
}
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
}
}
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.
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;}
…
}
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
…
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
…
}