0- Le langage C++ 1- Du langage C au langage C++ 2- Quelques éléments sur le langage 3- Organisation du cours Le présent cours constitue une introduction pour situer le langage C++, beaucoup des concepts qui y sont évoqués peuvent paraître difficiles ici : leur évocation reste très abstraite. Ils seront pour la plupart explicités au fil des différents cours. 1 Du langage C au langage C++ La transition du C au C++ a été continue. C++ n'est pas entièrement un nouveau langage à acquérir pour le programmeur C. Quasiment tout ce qui fonctionnait en C continue de fonctionner en C++. La lecture du C++ peut de fait être complexe : les syntaxes du C et du C++ coexistent. Le C++ par rapport au C : Améliorations par rapport au C Code C qui continue de fonctionner en C++ Librairies communes au C et au C++ C++ est orienté objet, C ne l'est pas C++ introduit les templates : il est possible de produire du code générique en s'abstrayant du type des données. C++ permet une gestion des erreurs efficace Le langage C++ a été écrit par Bjarne Stroustrup. Il fait aujourd'hui l'objet d'une normalisation ISO. Une version de la norme
peut être trouvée à : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf http://www.open-std.org/jtc1/sc22/wg21/ Cette norme a été actualisée en 2003. Une nouvelle actualisation prévue pour 2009 a été renvoyée à 2010. 2 Quelques éléments sur le langage Langage compilé Contrairement aux langages interprétés pour lesquels les instructions sont directement transformées en actions exécutées par la machine, dans les langages compilés, il existe une étape intermédiaire dite compilation qui consiste en la création d'un fichier objet intermédiaire. Le compilateur, après avoir créé ce fichier objet utilise un éditeur de liens (linker) pour transformer le fichier objet en un programme exécutable. La compilation consiste donc dans le passage d'un fichier de code source (lisible par un éditeur de texte et compréhensible par un utilisateur averti) à un fichier objet (lisible uniquement par la machine) puis à un fichier exécutable (lisible uniquement par la machine). Il est possible de délivrer directement le fichier exécutable à une autre personne qui pourra l'utiliser sans avoir besoin du compilateur, sous réserve qu'elle utilise le fichier exécutable sur la plateforme pour laquelle le compilateur utilisé produit du code source (un compilateur compile du code pour une plateforme donnée : un compilateur sous Windows produit un exécutable pour Windows, les fichiers qu'il produit ne fonctionneront pas sous Linux et vice-versa). Langage objet La programmation procédurale a longtemps été la plus utilisée : elle consistait à séparer un programme en de multiples procédures/fonctions, chaque procédure étant une série d'opérations s'exécutant séquentiellement. Les données et le programme étaient séparés. On parle de programmation procédurale parce que l'élément central de cette démarche est la procédure. La programmation objet vise à éliminer la séparation entre les données et leurs traitements. A la notion de procédure, on substitue la notion d'objet. L'utilisation d'un langage objet va rendre plus lisible le code. Celui-ci consistera en la manipulation d'objets explicites, en l'appel d'opérations nommées explicitement sur ces objets. Les objets pourront être de tout type :
Des objets qui sont des représentations d'objets réels : "Facture", "Machine"... Des objets qui sont des éléments / interfaces vers des objets de la machine : "Flux sur fichier", "Fichier", "Repertoire", "Fenetre" etc... Des objets qui sont des collections d'objets. Des objets qui sont plus conceptuels : "Historique du cours" C++ et Java Le grand concurrent du langage C++ est le langage Java. Les deux sont les langages orientés objets les plus utilisés. Java a pour lui sa portabilité, C++ a pour lui la puissance. Dans le domaine de la finance, dans l'esprit duquel le présent cours est conçu, le langage C++ est largement plus utilisé et la littérature sur la programmation en finance concerne plus C++ que Java. En tout état de cause, les deux langages présentent des syntaxes proches et, pour celui qui apprend C++, l'apprentissage de Java ne présente pas de difficultés (l'inverse étant moins certain). Pour approfondir le débat entre les deux langages, on peut se reporter à l'article wikipedia sur le sujet. La pleine appréciation de cet article ne pourra en réalité se faire qu'à la fin de la lecture de ce cours : http://en.wikipedia.org/wiki/comparison_of_java_and_c%2b%2b Pourquoi C++? Pour évaluer un langage de programmation, on peut retenir les critères suivants : productivité : rapidité de la production du code, librairies pré-existantes (on pourrait rajouter la taille de la communauté qui pratique le langage et qui participe de sa documentation en ligne). efficience sécurité : ce critère doit s'entendre comme le fait que le code s'exécutera toujours de la manière attendue maintenance : il est relativement aisé de lire le code et donc de le modifier. En C++ : hausse de la productivité du fait notamment des librairies. Un des buts de C++ est de faciliter l'utilisation des librairies qui n'est pas évidente en C. C++ est intermédiaire entre des langages de haut niveau (COBOL par exemple) et des langages de bas niveaux (proches du fonctionnement de la machine), comme l'assembleur : il offre donc une forte capacité sémantique, permet d'optimiser le code, tout en restant compréhensible. Le langage supporte différents niveaux de
compétences : un utilisateur débutant peut profiter des fonctionnalités du C++, un utilisateur averti le pourra également en optimisant son code. Sans rentrer dans les autres aspects de la performance d'un langage, on peut noter que C++ se comporte bien sur les autres critères de performance d'un langage. Comme sa normalisation et son évolution se poursuivent, ses performances continuent par ailleurs d'évoluer favorablement. Enfin, l'utilisation de ce langage au sein de la communauté financière justifie que son apprentissage soit préféré à celui de tout autre langage, à l'exception notoire de VBA, utilisé non pas en raison de ses performances, mais d'une grande facilité d'utilisation et d'une grande souplesse syntaxique. 3 Organisation du cours Le cours se sépare en plusieurs parties. Dans une première partie, on développe approximativement tout ce qui est la partie C du C++ : les syntaxes, les instructions de contrôle, les fonctions etc... Sont également introduits les pointeurs et leur manipulation. A partir de cette première partie, il est possible de réaliser tout programmes standard qu'il est possible de concevoir en langage procédural. Cette première partie se veut une transition aisée vers le C++. La deuxième partie introduit l'objet en C++. Les concepts de la première partie permettent de passer sur une large part des difficultés. Est d'abord donnée une explication de la perspective de l'objet, puis les éléments sur les techniques d'implémentation, puis des informations sur les objets classiques de la librairie standard, ainsi que sur les démarches de programmation. La troisième partie concerne les techniques avancées en programmation objet. Sont introduites les notions d'héritages, est précisée la notion de polymorphisme. Sont également évoquées la programmation générique et la gestion d'erreurs. La quatrième partie traite de l'utilisation de C++ en finance, à grand renfort d'exemples et de codes sources. La cinquième partie concerne la réalisation d'interfaces graphiques à partir de C++. Jusqu'à ce point, la programmation aura consisté en des calculs dont les résultats (outputs) ou les données (input) sont donnés soit en ligne de commande, soit via des fichiers. A partir de ce cours, on pourra envisager la réalisation d'interfaces graphiques à l'appui des applications développées. Tous les éléments du cours ne sont pas au même niveau. Une partie des éléments qui sont fournis va au delà de la possibilité de faire du code qui fonctionne pour résoudre un problème particulier ou accomplir une tache, ils apportent des
éléments pour écrire un code performant. La notion de performance du code a deux dimensions : la performance de l'algorithme retenu et la performance dans les techniques de programmation qui sont utilisées. Dans le premier cas, il s'agit de concevoir un algorithme qui s'exécute plus vite, en prenant moins de temps et moins d'espace en mémoire. Il existe un nombre considérable de résultats sur la complexité des algorithmes pour produire de telles optimisations. Dans le second cas, il s'agit de concevoir d'écrire un code avec les meilleures techniques possibles, donc de retenir la technique la plus élégante, la plus efficace. A partir d'un problème identique, deux programmeurs différents pourront produire des codes différents. Par exemple, leurs modélisations en terme de classes seront différentes, les choix de programmation seront différents etc... Il existe un certain nombre de bonnes techniques de programmation, de bonnes conceptions du découpage en classes. Elles ne seront cependant pas abordées dans le cadre de ce cours qui se contentera ponctuellement de comparer telle ou telle démarche de programmation et d'expliquer l'intérêt qu'il y a eu à introduire de nouvelles formes dans le langage, d'introduire telle ou telle syntaxe.