L'exemple de projet qui va nous servir à illustrer la définition basique d'une classe se trouve dans le dossier Exemple-ProgObjet2/Voiture1. Dans ce projet, nous avons défini une classe pour représenter une voiture.
Voici l'interface graphique de ce programme:
Le bouton Nouvelle Voiture crée une nouvelle instance de la classe Voiture, en lisant son immatriculation depuis la zone de texte prévue à cet effet.
Le Bouton Rouler augmente le compteur par la distance indiquée par l'utilisateur, sauf si le compteur atteint ou dépasse 10000 km. Dans ce cas, le programme affiche un message indiquant que les pneus de la voiture sont usés.
En Pascal-Objet la définition d'une classe se fait en deux parties:
Voici l'interface de la classe Voiture.
Compteur et Immat sont les attributs de la classe.
Nouvelle, Initialiser, Rouler et AfficherAttributs sont les méthodes de la classe.
Rouler et AfficherAttributs sont des procédures, ChangerPneu est une fonction et la méthode Nouvelle est une méthode spéciale dont la présence n'est pas obligatoire et que l'on appelle le constructeur de la classe. Nous verrons quel est son rôle un peu plus loin.
Comme vous pouvez le constater, le code des méthodes ne figure pas dans l'interface. On y met simplement les entêtes.
Voici l'implémentation de la classe Voiture.
Les entêtes des méthodes sont identiques aux entêtes définies dans l'interface sauf que le nom de chaque méthode est précédée par le nom de la classe: Voiture.Nouvelle, Voiture.Rouler, Voiture.ChangerPneu, ...
C'est de cette manière que l'on associe une méthode à sa classe dans la partie implementation.
Les méthodes qui commencent par Voiture. sont celles de la classe Voiture.
Dans le corps des méthodes on remarque que les attributs de la classe, ainsi que les appels de méthodes de la classe, ne sont pas précédés par le nom d'une instance de cette classe.
Par exemple, dans le corps du constructeur, les attributs Immat, Compteur ne sont pas précédés par le nom d'une instance.
Dans la méthode Rouler, on appelle la méthode ChangerPneu et Afficher. Mais elles ne sont apparemment appliquées à aucune instance de la classe Voiture !?
En fait, cette instance est implicite: c'est l'instance à laquelle sera appliquée la méthode. On ne la connait donc pas lorsque l'on écrit le code d'une méthode. Dans tout le corps d'une méthode, il faut donc imaginer que le nom de cette instance figure à gauche des attributs et des méthodes de la classe.
Par défaut, les attributs non précédés du nom d'une instance, qui figurent dans le corps d'une méthode de la classe Voiture, sont interprétés comme des attributs de la classe Voiture.
C'est la raison pour laquelle les zones de textes Zt_Immat et Zt_Compteur sont précédés par Form1 dans le corps de la procédure AfficherAttribut.
Sinon, ils auraient été interprétés comme des attributs de la classe Voiture, ce qui aurait généré une erreur de compilation.
Rappelons nous (voir cours I sur la programmation Objet), que Form1 est une instance de la classe TForm1 qui représente le formulaire d'une application. Les attributs de cette instance sont les différents composants du formulaire. En particulier, la zone de texte Zt_Immat, est doit donc être désignée par Form1.Zt_Immat en dehors d'une méthode de la classe TForm1.
Les méthodes de la classe Voiture sont utilisées dans les différentes procédures évènementielles de l'application. Les voici.
Nous avons déclaré une variable nommée LaVoiture de type Voiture. Elle nous servira à mémoriser une instance (unique dans ce programme) de la classe Voiture.
Les procédures évenementielles sont des méthodes de la classe TForm1. C'est la raison pour laquelle elles sont toutes préfixées par TForm1.
Bt_CreerClick est la procédure évènementielle associée au bouton Nouvelle Voiture.
Dans le corps de cette procédure, on commence par lire l'immatriculation depuis la zone de texte Zt_Immat. Cette chaine de caractère est affectée à la variable locale immat.
Remarquez qu'elle n'est pas préfixée ici par Form1., car on se trouve dans une méthode de la classe TForm1.
L'instruction suivante génère une instance de Voiture avec immat comme immatriculation, en faisant appel à la méthode Nouvelle, c'est à dire au constructeur de la classe.
Puis les attributs de la nouvelle voiture sont affichées en appliquant la méthode AfficherAttributs à l'instance LaVoiture.
Bt_RoulerClick est la procédure évènementielle associée au bouton Rouler.
Dans le corps de cette procédure, on commence par lire la distance à parcourir depuis la zone de texte Zt_Distance. Cet entier est ensuite affecté à la variable locale d.
Ensuite, on fait rouler la voiture pendant d kilomètres en appliquant la méthode Rouler à LaVoiture.
Remarquez que l'on suppose ici que l'instance de voiture a été générée, c'est à dire que l'utilisateur a cliqué sur le bouton Nouvelle Voiture avant de cliquer sur le bouton Rouler.
Dans le cas contraire on obtiendrait une erreur d'exécution, car LaVoiture ne contiendrait pas l'adresse d'une instance de voiture.