Enseigner Ada, pourquoi ?, à qui ?, comment ? Choisir un langage : entre le tentant et le raisonnable !


précédentsommairesuivant

I. Introduction

Le langage Ada a été conçu à l'initiative du D.O.D. (le département de la défense des USA) pour fédérer plus de 400 langages ou dialectes utilisés par cet organisme dans les années 1970 ! Des réunions et des documents de comités d'experts vont se succéder de 1975 à 1983 (appel d'offres, cahier des charges, choix, élection des projets et norme) pour présenter un langage généraliste, unificateur, normalisé et supportant les préceptes du génie logiciel : Ada83. Les premiers compilateurs (1985) sont onéreux mais ... respectent la norme ! (norme devenue internationale en 1987). Ada commence à faire ses preuves de fiabilité, de robustesse mais, a des défauts de jeunesse. De 1990 à 1995 la révision de la norme aboutit à Ada95, qui corrige les petits défauts, comble un gros manque en rendant le langage complètement objet (Ada est le premier langage objet normalisé). Ada95 ajoute ainsi son lot de nouveautés toujours inédites 10 ans après. Une nouvelle révision est en cours (nommée Ada0Y ; Y = 5 donc sûrement pour 2005) ce qui montre la vitalité et la pérennité du langage.

Aujourd'hui (en 2003) Ada ne nous semble pas avoir la place qu'il mérite notamment dans les premiers apprentissages de l'informatique où l'on doit mêler la programmation elle même avec la bonne pratique de la programmation. Depuis longtemps Ada peut largement remplacer Pascal l'excellent langage pédagogique. Paradoxalement on trouve Ada plus volontiers enseigné dans des formations de très haut niveau car, là encore, il permet d'enseigner de façon claire, cette fois des concepts qualifiés de plus ardus.

Faut-il enseigner (comme c'est trop le cas) les langages les plus récents ou les plus répandus (C/C++ notamment, voire Java pour être plus clairs), même si ces derniers semblent peu adaptés à l'apprentissage d'une bonne pratique ? Si la réponse est affirmative, et sous forme de boutade, il faut sacrer TF1 meilleure chaîne de télévision française, puisqu'elle est la plus regardée (ou encore si j'osais Windows le meilleur S.E. puisque le plus utilisé!). La modernité n'est pas un objectif pédagogique. Notons, comme contre exemple, que Java ne dispose toujours pas de la généricité (certes annoncée dans la version 1.5, mais déjà opérationnelle depuis 20 ans avec Ada83). La généricité est un concept essentiel pour la réutilisation.

En général les détracteurs d'Ada (enseignants ou professionnels) l'ont peu ou mal utilisé et confessent, volontiers, s'être arrêtés dans leurs tests, irrités par la rigueur du compilateur. Rigueur à laquelle ils ne sont pas habitués et qui reste (nous le montrerons), justement, la qualité essentielle pour un développement fiable.

Ada est encore bien utilisé (voire incontournable) en avionique et en informatique embarquée (fusée Ariane par exemple) ainsi que pour le contrôle de trafic (aérien, ferroviaire) où la fiabilité est cruciale. Il est aussi apprécié quand le code à développer est conséquent (donc très difficile à maintenir). Mais il n'en reste pas moins qu'actuellement peu de petites ou moyennes entreprises admettent utiliser Ada. Ou alors (comme le signale J.P. Rosen) ces entreprises cachent l'utilisation d'Ada comme on garde un secret de fabrication ! En effet, même pour des applications plus modestes, les gains de productivité avec Ada sont prouvés et très significatifs.

Les enseignants en informatique soucieux de faire développer du code de qualité pourront utiliser Ada qui est l'aboutissement des langages procéduraux, Ada, longtemps réservé aux applications de très haute technologie, est aujourd'hui enfin accessible aux moins fortunés. Un compilateur gratuit, ouvert et portable (GNAT) permet (notamment aux universitaires et aux autodidactes) de s'y frotter et ... d'adopter le langage pour une formation (ou une culture) informatique de qualité (voir dans le chapitre Les aides et les outils : les compilateurs).

I. Programmation d'activités concurrentes

On touche là à un grand moment de bonheur didactique. Avec quelle élégance Ada permet de concevoir et de réaliser facilement la programmation de processus concurrents ! Les tâches (avec Ada83 déjà !) et les objets protégés permettent d'illustrer donc de faire comprendre et assimiler des concepts forts importants et pas toujours évidents en temps réel et en informatique répartie tels que synchronisation et/ou échange d'information entre activités parallèles, exclusion mutuelle, partage de ressources communes, etc. De façon plus détaillée disons que :

La possibilité de faire apparaître explicitement l'architecture opérationnelle en la « mappant » sur des tâches permet de suivre de façon claire le comportement et le « work flow » d'une application. C'est un aspect très utile pour le temps réel entre autre. Cela n'empêche pas de structurer aussi l'accès à l'information en termes d'objets (objets passifs ou objets pouvant contenir des tâches quand il s'agit d'un objet « serveur »).

Un ensemble de choix judicieux à la conception du langage ont fait de l'objet protégé la meilleure réalisation du concept de moniteur (introduit par C.AR. Hoare et P. Brinch Hansen), loin devant toute autre, même plus récente comme Java. Notons l'évaluation des conditions d'attente avant toute section critique de code, l'évaluation des conditions de réveil à la fin de chaque section critique, la clause « requeue » qui permet de construire des séquences de sections critiques pour une même tâche tout en permettant d'y intercaler les sections critiques d'autres tâches, la priorité donnée aux tâches déjà utilisatrices de l'objet protégé. Tout cela permet de traiter les problèmes de synchronisation à un haut niveau d'abstraction, celui d'automates à files d'attente, et permet de les traiter tous au même niveau (sans introduire des « wait » ou « signal » ou encore « notify », de bas niveau, avec des effets imprévisibles dépendant de l'implantation de l'ordonnanceur du système hôte). Cela facilite aussi la validation des algorithmes concurrents et leur mise au point. On pourra consulter des exemples de programmation concurrente. À notre connaissance, ces exemples ne sont ni dans le manuel de référence, ni dans des ouvrages de cours. Ces exemples ont été choisis pour montrer la simplicité et la puissance de l'objet protégé. .

La même remarquable simplicité se retrouve dans la programmation distribuée avec Ada où la notion d'activité concurrente est étendue aux machines sur un réseau (voir un exemple élémentaire).

I. Livres, cours, didacticiel

Les livres de cours Ada (en français) sont peu nombreux : Programmer en Ada95 de Barnes (traduit), Programmation séquentielle avec Ada95 ainsi que Programmation concurrente et temps réel avec Ada95 de P. Breguet et L. Zaffalon.

D'autres livres incontournables associant génie logiciel et Ada : Ingénierie du logiciel avec Ada de Grady Booch (antérieur à Ada95) et Méthodes de génie logiciel avec Ada95 de J.P. Rosen (également traducteur du livre précédent). Ce dernier livre (sûrement victime de son succès) est épuisé ! Mais l'auteur se propose, à terme, de le mettre en "libre" sur le Net (Adalog à suivre).

Un cours Ada95 (avec des TD et des TP) au format PDF (1 Mo) de D. Feneuille téléchargeables sur Internet voir l'adresse http://libre.act-europe.fr/french_courses

Un cours complet et détaillé avec exercices format PDF de G. Coray (EPFL) http://lithwww.epfl.ch/teaching/cmp/polycop.html

Des cours et des exercices divers et variés (notamment systèmes et temps réel avec Ada) au CNAM :http://deptinfo.cnam.fr/Enseignement/CycleA/APA/200x/INDEX/APA_HTO.htmlhttp://deptinfo.cnam.fr/Enseignement/CycleA/SD/<link href="http://deptinfo.cnam.fr/Enseignement/CycleProbatoire/Vari/">http://deptinfo.cnam.fr/Enseignement/CycleProbatoire/SRI/Systemeshttp://deptinfo.cnam.fr/Enseignement/CycleSpecialisation/ACCOV.

Un article assez récent dans "le monde informatique" (exemples intéressants d'applications industrielles développées en Ada)

Un didacticiel, (le seul !), complet (mais hélas en anglais) de l'E.P.F.L. : Lovelace.

D'autres ouvrages où Ada est bien illustré :

1) Algorithmes et structures de données avec Ada, C++ et Java, A. Guerid, P. Breguet, H.Roethlisberger, PPUR, 2002

2) Structures de données en Java, C++ et Ada 95, Ch. Carrez, InterEditions (1997)3) Initiation et auto-formation à la programmation informatique, Canesi et Suc, Ellipses. 4) Vers Ada 95 par l'exemple, Fayard et Rousseau, De Boeck Larcierles titres des deux premiers ouvrages parlent d'eux mêmes (on verra avec intérêt une comparaison entre les trois langages)

le troisième est un livre dédié aux vrais débutants en programmation où les premiers concepts sont illustrés avec Ada.

le quatrième permet de découvrir le langage avec des exemples simples pour un premier contact.

5) Orientation objet, structures de données et algorithmes (Ada95) de Philippe Gabrini. (ISBN : 2-7613-1028-0)

I. Un exemple de programmation distribuée

La programmation distribuée revient à découper un programme en plusieurs exécutables appelés partitions en Ada) devant s'exécuter sur des machines (voir des OS) différentes. Une grande force de l'approche distribuée d'Ada et de permettre que le même programme puisse être compilé en mode distribué et non-distribué. Cette approche simple et pragmatique permet de rapidement construire une application distribuée, atout qui sera apprécié lors de l'enseignement (il n'est pas nécessaire de rentrer dans des détails de bas niveau). Pour illustrer ce point, prenons comme exemple une version distribuée du fameux hello World !

Le serveur:

 
Sélectionnez
package Hello_Server is
    pragma Remote_Call_Interface;
   function Message return String;
end Hello_Server;

package body Hello_Server is 
    function Message return String is
    begin
        return "Hello World!";
    end Message;
end Hello_Server;

Le client:

 
Sélectionnez
with Ada.Text_Io;
with Hello_Server;

procedure Hello_Client is
use Ada;
begin
    Text_Io.Put_Line (Hello_Server.Message);
end Hello_Client;

La seule addition par rapport à la version non-distribuée est le pragma Remote_Call_Interface. On peut difficilement faire plus simple!


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2003 Daniel Feneuille Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.