Var
p_o1 :pointeur sur Ecran
p_o2 :pointeur sur Ecran
Début
p_o1←nouveau Ecran
p_o1->nbEcrans() // 1
p_o2←nouveau Ecran
p_o2->nbEcrans() // 2
Afficher Ecran.nb_ecrans // Accès public : 2
Libérer p_o1
p_o2->nbEcrans() // 1
Libérer p_o2
Afficher Ecran.nb_ecrans // Seul moyen ici : 0
Fin
4. Classes et méthodes abstraites
Il y a des fois où vous avez besoin de définir un prototype de classe dans laquelle vous allez déclarer des méthodes,
mais pas forcément leur implémentation. Par exemple, vous voulez créer des classes représentant des figures
géométriques afin de concevoir un logiciel de conception assistée par ordinateur. Dans ces logiciels (2D ou 3D), les
différentes figures tracées ont toutes leurs propriétés comme leurs dimensions, surface, périmètre, volume, couleur de
remplissage, couleur du contour, etc. Les valeurs de ces attributs varient d’une figure à l’autre, c’est normal, mais
certaines méthodes peuvent être identiques comme celles pour la couleur, et d’autres non comme le calcul des
surfaces, volumes et périmètres. Pourtant toutes les figures (carrés, rectangles, polygones, triangles, trapèzes,
losanges, etc) doivent disposer de ces méthodes. Comment décrire ceci en objet ?
La solution consiste à écrire une classe de base qui deviendra la superclasse de toutes les figures géométriques, et qui
va contenir tous les attributs de base comme la position de départ x,y du tracé de la figure, ses couleurs, mais aussi
toutes les méthodes non seulement de base mais qui doivent aussi obligatoirement être implémentées dans toutes les
classes qui en dérivent. Les méthodes de calcul de surface et de périmètre doivent être déclarées dans cette classe.
Pourtant elles ne contiendront rien comme code : ce sera à la classe dérivée de les programmer.
Cette classe de base contenant des méthodes sans implémentation ne pourra pas être instanciée, vous ne pourrez
pas créer d’objet à partir d’elle, car elle est de fait inutilisable et ne sert que de base pour les méthodes dérivées.
Une classe non instanciable et contenant des méthodes non implémentées, uniquement destinée à être dérivée,
est appelée une classe abstraite. Les méthodes non implémentées qu’elle contient sont appelées méthodes
abstraites.
q Pour créer une classe abstraite, vous rajoutez le motclé "abstraite" après le nom de la classe.
q Pour créer une méthode abstraite, vous rajoutez le motclé "abstraite" avant son nom.
Classe figure abstraite
attributs privés
x :réel
y :réel
c_contour :chaîne // couleur contour
c_remp :chaîne :: couleur remplissage
surface :réel
périmètre :réel
méthodes publiques
Procédure setcolor_c(E :couleur :chaîne)
Début
this.c_contour←couleur
Fin
...
Fonction abstraite getSurface() :reel
Fonction abstraite getPerimètre() :reel
...
FinClasse
À partir du moment où une classe contient une méthode abstraite, elle est ellemême abstraite. La classe figure est
abstraite : elle contient des méthodes abstraites, sans implémentation. Elle contient aussi des méthodes qui ne sont
- 5 -
© ENI Editions - All rigths reserved - Jonifar lina
212
p_o1 :pointeur sur Ecran
p_o2 :pointeur sur Ecran
Début
p_o1←nouveau Ecran
p_o1->nbEcrans() // 1
p_o2←nouveau Ecran
p_o2->nbEcrans() // 2
Afficher Ecran.nb_ecrans // Accès public : 2
Libérer p_o1
p_o2->nbEcrans() // 1
Libérer p_o2
Afficher Ecran.nb_ecrans // Seul moyen ici : 0
Fin
4. Classes et méthodes abstraites
Il y a des fois où vous avez besoin de définir un prototype de classe dans laquelle vous allez déclarer des méthodes,
mais pas forcément leur implémentation. Par exemple, vous voulez créer des classes représentant des figures
géométriques afin de concevoir un logiciel de conception assistée par ordinateur. Dans ces logiciels (2D ou 3D), les
différentes figures tracées ont toutes leurs propriétés comme leurs dimensions, surface, périmètre, volume, couleur de
remplissage, couleur du contour, etc. Les valeurs de ces attributs varient d’une figure à l’autre, c’est normal, mais
certaines méthodes peuvent être identiques comme celles pour la couleur, et d’autres non comme le calcul des
surfaces, volumes et périmètres. Pourtant toutes les figures (carrés, rectangles, polygones, triangles, trapèzes,
losanges, etc) doivent disposer de ces méthodes. Comment décrire ceci en objet ?
La solution consiste à écrire une classe de base qui deviendra la superclasse de toutes les figures géométriques, et qui
va contenir tous les attributs de base comme la position de départ x,y du tracé de la figure, ses couleurs, mais aussi
toutes les méthodes non seulement de base mais qui doivent aussi obligatoirement être implémentées dans toutes les
classes qui en dérivent. Les méthodes de calcul de surface et de périmètre doivent être déclarées dans cette classe.
Pourtant elles ne contiendront rien comme code : ce sera à la classe dérivée de les programmer.
Cette classe de base contenant des méthodes sans implémentation ne pourra pas être instanciée, vous ne pourrez
pas créer d’objet à partir d’elle, car elle est de fait inutilisable et ne sert que de base pour les méthodes dérivées.
Une classe non instanciable et contenant des méthodes non implémentées, uniquement destinée à être dérivée,
est appelée une classe abstraite. Les méthodes non implémentées qu’elle contient sont appelées méthodes
abstraites.
q Pour créer une classe abstraite, vous rajoutez le motclé "abstraite" après le nom de la classe.
q Pour créer une méthode abstraite, vous rajoutez le motclé "abstraite" avant son nom.
Classe figure abstraite
attributs privés
x :réel
y :réel
c_contour :chaîne // couleur contour
c_remp :chaîne :: couleur remplissage
surface :réel
périmètre :réel
méthodes publiques
Procédure setcolor_c(E :couleur :chaîne)
Début
this.c_contour←couleur
Fin
...
Fonction abstraite getSurface() :reel
Fonction abstraite getPerimètre() :reel
...
FinClasse
À partir du moment où une classe contient une méthode abstraite, elle est ellemême abstraite. La classe figure est
abstraite : elle contient des méthodes abstraites, sans implémentation. Elle contient aussi des méthodes qui ne sont
- 5 -
© ENI Editions - All rigths reserved - Jonifar lina
212
