Que choisir ?
Le langage Ada a été défini dans une optique relativement classique pour minimiser les temps de développement et de maintenance des logiciels grâce à différents moyens. Le fonctionnement d'une partie de programme reste assez simple et prévisible : il y a peu de conséquences "en cascades" et de choses se produisant implicitement. Le contrôle est laissé à l'informaticien tout en balisant le terrain pour lui éviter autant que possible les pièges éventuels. Ceci est efficace pour la grande majorité des applications mais le caractère "élémentaire" de la méthode peut se révéler une contrainte dans des cas où la complexité et l'abstraction doivent prendre le dessus.
Le langage C++ a eu une évolution plus progressive qu'Ada et son approche est différente. C'est un dérivé de C avec lequel il reste presque totalement compatible en ajoutant la notion d'objets. Pour faire simple, une classe (d'objets) est comme la définition d'un nouveau type et des opérations qui lui seront applicables en une seule structure cohérente et les objets sont comme les variables de ce type. Le C++ n'est pas le seul langage à objets mais il a l'avantage d'être très répandu, de conserver l'efficacité du C et d'avoir une grande puissance d'expression, car c'est là que l'accent a été mis. De nombreuses possibilités peuvent donner toute sorte de combinaisons : héritage simple ou multiple, imbrication, généricité, surcharge Par exemple la surcharge des opérateurs préexistant dans le langage permet comme en Ada d'adapter des notations à des besoins quelconques (on peut noter V1 + V2 l'addition -non prédéfinie- de 2 vecteurs) mais ici l'affectation a une variable est aussi un opérateur, ainsi que toute conversion (à définir) d'une classe vers une autre qui pourra être insérée implicitement dans une expression par le compilateur.
Si l'on y ajoute des choses comme les cascades d'appels des constructeurs et destructeurs des objets, il y a beaucoup plus d'événements "invisibles", ce qui nécessite souvent une attention soutenue du programmeur et l'usage régulier d'un debugger mais cela devient un avantage dans les cas où il faut gérer une grande complexité : on se concentre sur l'essentiel du fonctionnement en laissant de coté la "cuisine". En fait c'est le principe de l'encapsulation qui est appliqué : l'utilisateur d'un objet n'a normalement pas à se soucier de son architecture interne. Une classe doit être fiabilisée une fois pour toute (ce qui demande plus de travail) puis être réemployée à volonté. C'est un peu la même méthode que pour des bibliothèques de fonctions courantes utilisées en informatique scientifique.
Ma conclusion sera qu'il vaut mieux choisir Ada s'il est prévu que les applications à réaliser resteront en majorité assez classiques mais que C++ s'avère judicieux quand les possibilités d'expression doivent être privilégiées (ex : domaine scientifique).