Je suis avec un fond de génie mécanique, mais je suis intéressé à apprendre la bonne pratique de génie logiciel avec Ada. J'ai quelques questions.Génie logiciel avec Ada: stubs; unités séparées et de compilation
Q1. Si je comprends bien alors quelqu'un peut simplement écrire un fichier de spécification de paquet (annonces), le compiler, puis compiler le programme principal qui utilise le paquet. Plus tard, quand on sait ce qu'il faut inclure dans le corps du paquet, celui-ci peut être écrit et compilé. Ensuite, le programme principal peut maintenant être exécuté. J'ai essayé cela et je voudrais confirmer que c'est une bonne pratique.
Q2. Ma deuxième question concerne les souches (sous-unités) et l'utilisation de SEPARATE. Dire que j'ai un programme principal comme suit:
WITH Ada.Float_Text_IO;
WITH Ada.Text_IO;
WITH Ada.Integer_Text_IO;
PROCEDURE TEST2 IS
A,B : FLOAT;
N : INTEGER;
PROCEDURE INPUT(A,B: OUT FLOAT; N: OUT INTEGER) IS SEPARATE;
BEGIN -- main program
INPUT(A,B,N);
Ada.Float_Text_IO.Put(Item => A);
Ada.Text_IO.New_line;
Ada.Integer_Text_IO.Put(Item => N);
END TEST2;
J'ai la procédure entrée dans un fichier séparé:
separate(TEST2)
PROCEDURE INPUT(A,B: OUT FLOAT; N: OUT INTEGER) IS
BEGIN
Ada.Float_Text_IO.Get(Item => A);
Ada.Text_IO.New_line;
Ada.Float_Text_IO.Get(Item => B);
Ada.Text_IO.New_line;
Ada.Integer_Text_IO.Get(Item => N);
END INPUT;
Mes questions:
a) AdaGIDE me suggère de sauver le la Fichier de procédure INPUT en tant que input.adb. Mais sur la compilation du principal test2 du programme, je reçois l'avertissement:
warning: subunit "TEST2.INPUT" in file "test2-input.adb" not found
cannot generate code for file test2.adb (missing subunits)
Pour AdaGIDE, ce qui est plus d'une erreur que les avertissements ci-dessus viennent avant que le message:
Compiling...
Done--error detected
Je rebaptisés la fichier input.adb à test2-input.adb comme m'a été suggéré par AdaGIDE lors de la compilation. Maintenant, en compilant le fichier principal, je n'ai aucun avertissement. Ma question est maintenant s'il est autorisé à écrire
PROCEDURE INPUT(A,B: OUT FLOAT; N: OUT INTEGER) IS
comme je l'ai fait dans le fichier sous-unité test2-input.adb ou est-il préférable d'écrire un terme plus descriptif comme
PROCEDURE TEST2-INPUT(A,B: OUT FLOAT; N: OUT INTEGER) IS
souligner cette entrée de procédure a une procédure parent test2? Cette idée découle d'AdaGIDE qui m'indique à propos de test2-input.adb comme je l'ai mentionné plus haut.
b) Ma question suivante:
Si je comprends bien l'ordre de compilation, alors je devrais compiler le fichier principal test2.adb d'abord, puis le talon test2-input.adb. Sur la compilation du stub je reçois le message d'erreur:
cannot generate code for file test2-input.adb (subunit)
Done--error detected
Cependant, je peux maintenant la liaison et ne liant pour test2.adb et exécuter le programme.
Je voudrais savoir si j'ai mal fait en essayant de compiler le stub test2-input.adb ou ne devrait-il pas être compilé?
Q3. Quelle est l'utilité d'avoir des sous-unités? Est-ce juste pour casser un grand programme en plus petites parties? Je sais qu'une erreur survient si l'on ne place aucune instruction entre BEGIN et END dans la sous-unité. Donc, cela signifie que l'on doit toujours mettre une déclaration là-bas. Et si l'on veut écrire les déclarations plus tard, on peut toujours mettre une instruction NULL entre BEGIN et END dans la sous-unité et revenir à ce dernier à un moment ultérieur. Est-ce la façon dont le génie logiciel est fait dans la pratique?
Merci beaucoup ...
Je suis curieux de connaître le choix d'Ada. Était-ce basé sur les exigences du travail/client? Les statistiques sur la langue (par exemple, http://www.langpop.com/) indiquent que ce n'est pas vraiment la langue de choix pour la plupart des projets. –
Eh bien, je connais quelques langages comme Basic, Pascal, C et Matlab (si celui-ci peut être considéré comme un langage de programmation). J'ai décidé d'apprendre Ada comme étant un langage fortement typé, il aide à éviter les erreurs qui peuvent facilement se glisser dans d'autres langues que j'ai apprises auparavant. Et Ada fait la promotion de la bonne pratique de l'ingénierie logicielle. Je ne peux pas trouver un meilleur langage de programmation. C peut être plus rapide mais peut-être plus difficile à maintenir que Ada verbeux. Je choisis Ada non pas à cause de la vitesse d'exécution mais je veux des résultats précis et ses unités de compilation séparées aident beaucoup lors du développement d'un grand programme. – yCalleecharan
@yCalleecharan: Vous avez une excellente compréhension des avantages et des contributions d'Ada pour la qualité et la productivité des logiciels. Et en fait, sa performance n'est pas trop mal non plus: http://groups.google.com/group/comp.lang.ada/browse_thread/thread/847751a7e7aa6234?pli=1 –