“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 294 — #304
i
i
i
i
i
i
i
i
294
6
• La programmation orientée objet
analogue à la société humaine. Par exemple, pour entrer dans un pays, on est contrôlé
à la frontière (contrôle des passeports, sécurité, douane). Une fois à l’intérieur, il n’y a
presque plus de vérifications.
Une histoire vraie
Nous terminons la discussion sur la bonne utilisation de l’héritage avec un conte basé
sur une histoire vraie. Il y a quelque temps, une entreprise connue a initié un projet
ambitieux basé sur la POO. Malgré un budget de plusieurs milliards de dollars, le
projet a échoué. Parmi les nombreuses raisons de cet échec, il y avait une mauvaise
utilisation de la POO, en particulier en ce qui concernait l’héritage. Deux erreurs
majeures avaient été commises :
– La propriété de substitution a été régulièrement enfreinte. Des routines qui marchaient bien avec les objets d’une classe ne marchaient plus avec les objets d’une
sous-classe. Cela compliquait le programme : il fallait plusieurs routines là où
une seule aurait pu suffire.
– Les classes ont été étendues par l’héritage pour corriger de petits problèmes. Au
lieu de corriger la classe elle-même, une sous-classe est définie comme correctif
(« patch »). Il y avait des correctifs pour les correctifs et ainsi de suite. Le résultat
était une grande profondeur inutile de la hiérarchie qui compliquait le système et
ralentissait les invocations des objets.
Il faut donc faire attention à l’usage correct de l’héritage. Respectez la propriété de
substitution. Utilisez l’héritage pour ajouter de la nouvelle fonctionnalité et non pour
corriger une classe erronée. Étudiez des bons motifs de conception pour l’héritage.
6.4.2 L’héritage multiple pour une bibliothèque graphique
L’héritage multiple est utile quand un objet doit être deux choses différentes dans un
même programme. Prenons une bibliothèque graphique qui peut afficher des figures
géométriques diverses, comme des cercles, des lignes et des figures plus complexes.
Nous voudrions définir une opération de « regroupement » qui peut combiner plusieurs
figures pour faire une seule figure composite. Comment pouvons-nous modéliser cela
avec la POO ? Nous concevrons un programme simple et complet qui fonctionne.
Nous utiliserons l’héritage multiple pour ajouter la possibilité de regrouper les figures.
L’idée pour cette conception vient de Bertrand Meyer [65]. Ce programme simple peut
facilement être étendu pour devenir une vraie bibliothèque graphique performante.
i
i
i
i
i
i
i
i
294
6
• La programmation orientée objet
analogue à la société humaine. Par exemple, pour entrer dans un pays, on est contrôlé
à la frontière (contrôle des passeports, sécurité, douane). Une fois à l’intérieur, il n’y a
presque plus de vérifications.
Une histoire vraie
Nous terminons la discussion sur la bonne utilisation de l’héritage avec un conte basé
sur une histoire vraie. Il y a quelque temps, une entreprise connue a initié un projet
ambitieux basé sur la POO. Malgré un budget de plusieurs milliards de dollars, le
projet a échoué. Parmi les nombreuses raisons de cet échec, il y avait une mauvaise
utilisation de la POO, en particulier en ce qui concernait l’héritage. Deux erreurs
majeures avaient été commises :
– La propriété de substitution a été régulièrement enfreinte. Des routines qui marchaient bien avec les objets d’une classe ne marchaient plus avec les objets d’une
sous-classe. Cela compliquait le programme : il fallait plusieurs routines là où
une seule aurait pu suffire.
– Les classes ont été étendues par l’héritage pour corriger de petits problèmes. Au
lieu de corriger la classe elle-même, une sous-classe est définie comme correctif
(« patch »). Il y avait des correctifs pour les correctifs et ainsi de suite. Le résultat
était une grande profondeur inutile de la hiérarchie qui compliquait le système et
ralentissait les invocations des objets.
Il faut donc faire attention à l’usage correct de l’héritage. Respectez la propriété de
substitution. Utilisez l’héritage pour ajouter de la nouvelle fonctionnalité et non pour
corriger une classe erronée. Étudiez des bons motifs de conception pour l’héritage.
6.4.2 L’héritage multiple pour une bibliothèque graphique
L’héritage multiple est utile quand un objet doit être deux choses différentes dans un
même programme. Prenons une bibliothèque graphique qui peut afficher des figures
géométriques diverses, comme des cercles, des lignes et des figures plus complexes.
Nous voudrions définir une opération de « regroupement » qui peut combiner plusieurs
figures pour faire une seule figure composite. Comment pouvons-nous modéliser cela
avec la POO ? Nous concevrons un programme simple et complet qui fonctionne.
Nous utiliserons l’héritage multiple pour ajouter la possibilité de regrouper les figures.
L’idée pour cette conception vient de Bertrand Meyer [65]. Ce programme simple peut
facilement être étendu pour devenir une vraie bibliothèque graphique performante.
