logo ABC_logo SHOP_logo

Français

English

Identité

Produits

Librairies

Formations

Downloads

Contact

Partenaires

Demo ABC

SUR LE CHEMIN D'EIFFEL

Le langage Eiffel, qui a été créé par Bertrand Meyer et son équipe, figure aujourd'hui parmi les quelques environnements de programmation purement par objets destinés au développement d'applications industrielles de grande taille. Comme langage, Eiffel s'est tout d'abord présenté comme l'intégration de deux cultures informatiques : celle des environnements à objets graphiques interactifs popularisés par Smaltalk, outil mono-utilisateur puissant de prototypage rapide, et celle de la tradition génie logiciel parachevée par Ada, la vision du développement à grande échelle pour la production de logiciel fiable, assurant une plus grande sécurité de fonctionnement. Ensuite, arrivé à maturité, Eiffel est passé sous le contrôle du consortium NICE (Non-Profit International Consortium for Eiffel) afin de lui donner un statut de langage public.

Clivage entre "techniques traditionnelles" et techniques à Objets

Les langages de programmation classiques, aussi appelés procéduraux, manipulent des données et des procédures sans qu'il y ait de contrainte sur les relations entre les procédures et les données qu'elles manipulent. Les données ou les procédures évoluent inévitablement de façon désynchronisée. Une modification dans l'une des parties du logiciel peut finalement avoir des répercussions inattendues dans une autre partie et inversement. Des études sur la maintenance ont d'ailleurs montré qu'environ 40 % des coûts étaient dus aux changements de spécifications et 20 % aux changements de format dans les données. Ajouter un champ à un enregistrement implique de modifier toutes les parties du programme qui exploitent cette donnée : dans les passages de paramètre, les formats d'entrée/sortie, etc.

Dans un langages à objets, dit Orienté Objet, les programmes sont construits autour des données (structures de données, compte en banque, matrice, simulateur de vol, ... ). Les données regroupent les primitives qui y accèdent, les exploitent et les modifient. En Eiffel, ces manipulations de données sont, en outre, garanties par des règles d'intégrité assurant la cohérence des objets. Cette notion nouvelle, popularisée par Eiffel et nommée " conception par contrat ", permet à chaque objet de n'accéder aux primitives d'un autre objet qu'en respectant des règles de visibilité et de contraintes de validité découlant de la spécification elle-même. Chaque objet devient ainsi responsable d'une délégation d'opération à un autre objet qui lui-même s'engage à ne réaliser une opération que conformément à ce qu'on en attend.

Trop de temps est souvent passé à ré-inventer des structures classiques de programme ou plus simplement à refaire moins bien ce que des spécialistes ont écrit une fois pour toute de la façon la plus efficace possible. Dans la technique à objets, avant d'attaquer un moindre développement, il est judicieux de se demander avant tout s'il n'existe pas déjà quelque chose de similaire, même s'il ne s'agit pas exactement de la même chose, dans un domaine d'application proche ou analogue. La technique à objets permet de travailler par adaptation et modification, dans le respect de la modularité existante.

Il est aujourd'hui hors de question de donner le code source d'une application de plusieurs milliers (voire plusieurs millions) de lignes à une ou plusieurs personnes en leur demandant de se plonger dans les détails techniques. Pour cette raison, des mécanismes de structuration et de classification puissants sont indispensables pour maîtriser la complexité. La structure d'un système Eiffel est définie par les constituants suivants:

  • des classes d'objets,
  • des regroupements de classes en grappes de grands domaines fonctionnels,
  • des relations d'héritage entre classes afin de combiner ou d'adapter des classes existantes,
  • des relations de clientèle entre classes permettant de décentraliser et déléguer les services rendus et les informations
  • maintenues par les classes pour les rendre disponibles aux autres classes sur la base de l'établissement de " contrats ".

Une autre idée véhiculée par Eiffel est qu'un logiciel doit contenir sa propre documentation afin de minimiser les incohérences. Pour ce faire, il existe un mécanisme d'abstraction de classes qui extrait automatiquement à partir du code source l'information minimale nécessaire à sa compréhension et à son utilisation.

Au cours d'une démarche de construction de systèmes logiciels par objets, la notion de bibliothèques de composants réutilisables est primordiale. Il s'agit à la fois du principal matériau disponible et de l'une des finalités de l'activité de développement.

De quoi s'agit-il ? Principalement de se poser systématiquement la question de savoir si ce que l'on est en train de produire est susceptible d'être réutilisé par d'autres développeurs. Il s'agit ensuite de rendre véritablement réutilisables les composants concernés, c'est-à-dire testés, documentés, généralisés et publiés.

Les bibliothèques disponibles avec Eiffel sont le fruit d'un patient processus d'affinement. Les classes qui forment ces bibliothèques ont été intensivement testées et utilisées dans le cadre de divers développements réutilisant ces composants. On trouve des bibliothèques pour la manipulation des structures de base de la programmation, pour la gestion de la mémoire, pour le traitement des exceptions ainsi que pour l'analyse lexicale et syntaxique. Des bibliothèques plus spécialisées concernent la gestion de bases de données et la construction d'applications graphiques. Ces deux dernières bibliothèques ont d'ailleurs été bâties en respectant une même philosophie de conception : fournir, d'une part, des classes très générales utilisables par les programmeurs d'applications et, d'autre part, fournir des classes d'implémentation spécifiques d'un SGBD ou d'un serveur graphique à interface constante.

Eiffel vise tous les domaines d'applications informatiques où la fiabilité et la sécurité des logiciels produits jouent un rôle prédominant. Curieusement, les réticences les plus fréquentes viennent souvent de l'informatique technique, domaine dans lequel les développeurs sont encore très soucieux de préserver leur chasse gardée : celle des optimisations de très bas niveau ou celle de la connaissance des mécanismes d'implémentation des compilateurs. Les exigences de réutilisation imposent désormais de faire reposer les problèmes très pointus d'implémentation sur les seuls spécialistes et non sur les concepteurs des architectures logicielles de demain.

Eiffel n'intéresse en fait pas seulement l'informatique technique, mais aussi et surtout l'informatique de gestion puisque la maintenance de données cohérentes en est le pain quotidien.

Très fréquemment, le choix d'Eiffel intervient dans des applications caractérisées par une grande complexité de situations ou d'information, imposant alors un effort important de structuration et de classification appuyé par des mécanismes solides de contrôle de validité. Eiffel est actuellement disponible sur une très large gamme de stations de travail de type Unix, mais aussi sur DOS/Windows et Mac OS-10, VMS.

Au-delà des objets ordinaires, les objets spécifiés

Quand faut-il réutiliser des objets existants ? S'ils sont bien spécifiés, on doit les réutiliser chaque fois que leurs spécifications correspondent aux besoins du développement en cours. Si, par contre ils sont mal spécifiés voir pas spécifiés sauf par quelques commentaires qui, nécessairement, laissent beaucoup de choses telle que les conditions aux limites, dans le flou, alors, il ne faut pas réutiliser. Même, si par hasard, un tel composant fait approximativement ce que vous désirez à un moment donné, aucune garantie n'existe que la révision suivante aura toujours le même comportement. En effet, l'auteur d'un tel composant peut penser que le comportement doit être modifié pour satisfaire d'autres besoins, peut être plus généraux soit, mais qui ne sont pas les vôtres. Pour l'ingénieur, le meilleure n'existe pas. Le concept de qualité n'existe que par rapport à une spécification précise. Un composant est meilleur qu'un autre seulement s'il couvre mieux les spécifications. D'un part la sienne, d'autre part celle souhaitée. Pour satisfaire cette exigence de spécification, Eiffel incorpore la programmation par contrattm. Ceci consiste à incorporer des assertions qui forment la spécification des classes de composants (les invariants) et la spécification d'entrée sortie de chaque routine (pré-conditions et post-conditions). Certes, il existe des langages de spécification cependant, ils sont disjoints des codes d'implémentation. Ceci les rends généralement impropres à assurer la qualité des implémentations ainsi spécifiées. Le couplage fort de la spécification et du code donne bien d'avantage de garantie dans cette direction notamment parce que cette spécification est la base même du déverminage et que de surcroît, l'acquéreur peut lui même faire tourner ce composant acquis en mettant en oeuvre la spécification et ainsi vérifier par lui-même que le composant satisfait bien sa spécification. Même, si cette méthode a des limites, elle constitue un pas définitif vers des logiciels de qualité c'est à dire d'abord correct. Références

B. Meyer: Eiffel: the language; Prentice-Hall, Object-Oriented Series, 1992

J.-M. Nerson : Applying object-oriented analysis and design; Communications of the ACM, vol. 35, n' 9,sur le réseau UUnet (comp.lang.eiffel).

Le present texte s'inspire également d'un article de JEAN-MARC NERSON & YVAN GALISSON de décembre 1991

Voir aussi sur le net

Abstraction.ch all rights reserved