Département d'informatique Faculté des Sciences
INFO–F–202 : Langages de programmation 2
Yves Roggeman - Vandy Berten

9 février 2011 : l'énoncé du projet C++ est disponible ci-dessous

Cette page contient les informations utiles concernant le cours de langages de programmation des 2années des études de bachelier en sciences informatiques (INFO2) et 3années des études de bachelier en sciences mathématiques, option informatique (MATH3).
Le descriptif officiel complet se trouve sur cette page du catalogue des cours.

Les informations ci-dessous sont sujettes à modifications régulières. Les étudiants sont invités à la consulter régulièrement et s'informer via les valves sur « MonULB ».

Organisation (année académique 2010–2011)

Cours (3 crédits)

Le cours a lieu le jeudi de 10 heures à 13 heures à l'auditorium E (Campus de la Plaine) durant tout le premier quadrimestre, avec interruption lors de la première semaine tampon.
Les supports de cours sont disponibles ci-dessous.

Projets (2 crédits)

Trois projets seront à réaliser en cours d'année. Il s'agit d'un travail individuel et obligatoire servant d'évaluation finale pour l'une ou l'autre session.

Ces projets, de taille et d'importance différentes, sont à réaliser dans des langages différents. Le plus gros (4 points sur un total de 20) consiste en une illustration intégrée en C++ 03 des différents concepts avancés de programmation orientée objet (généricité, héritage, encapsulation, abstraction…).

Le deuxième (4 points du 20) mettra en oeuvre les méchanismes vus en Java (programmation orientée objets et multithread).

Le troisième, plus petit (2 points sur 20), permettra de se familiariser avec le langage Python.

Les énoncés des projets sont fournis ci-dessous.

Examens

Comme indiqué ci-dessus, l'épreuve consiste essentiellement en une présentation orale des projets réalisés. À cette occasion, une justification des choix d'écriture, de style et de constructions particulières permet de démontrer la connaissance réelle du langage utilisé.

L'examen compte pour 10 points sur un total de 20, les 10 autres points étant répartis entre les projets (voir ci-dessus).

Une épreuve est organisée, pour la première session, en janvier et en seconde session (entre mi-août et mi-septembre), selon l'horaire déterminé par la Faculté (cf. Calendrier des contrôles de connaissance 2010–2011). Pour les étudiants présentant la deuxième session, un projet complémentaire est déterminé.

Seules les notes supérieures ou égales à 10/20 sont reportables de la première à la seconde session et seules les notes supérieures ou égales à 12/20 sont reportables à l'année académique suivante, selon les modalités décrites au règlement facultaire (cf. Règlement des examens et des jurys). Aucun report partiel n'est accordé à l'année académique suivante, les projets constituant l'élément essentiel de l'évaluation.

Horaire

YR : Yves Roggeman - VB : Vandy Berten
23/09/2010 YR
30/09/2010 YR
07/10/2010 YR
14/10/2010 VB (Java)
21/10/2010 VB (Java)
28/10/2010 YR
04/11/2010 TAMPON
11/11/2010 CONGÉ
18/11/2010 YR
25/11/2010 VB (Java)
02/12/2010 YR
09/12/2010 VB (Python)
16/12/2010 YR
23/12/2010 RÉCUP

Outils nécessaires aux projets

Les projets et travaux peuvent s'effectuer sur le matériel disponible aux locaux informatiques (NO3.007A, NO4.008 et NO4.009 - Plaine).
Ils peuvent bien entendu être réalisés sur d'autres matériels personnels, tant en environnement Windows (Microsoft) que Mac OS (Apple) ou Unix / Linux / Ubuntu… (libre).
La philosophie du cours est de faire respecter la définition officielle des langages, i.e. conforme à la norme ISO/IEC, en utilisant essentiellement des logiciels libres ou gratuiciels (voir à ce propos les définitions du projet GNU de la Free Software Fondation ou de l'AFUL).

Voici quelques sites permettant, en toute légalité, de télécharger les logiciels nécessaires. Plusieurs liens sont proposés, mais d'autres solutions sont possibles.

Système d'exploitation

La plupart des compilateurs libres sont conçus pour un environnement Unix.
Une version libre est disponible, par exemple, sur le site d'Ubuntu (version francophone ou anglophone).

Si l'on ne souhaite pas basculer entièrement sous ce système, on peut généralement configurer sa machine en mode « double système » (dual boot) permettant de choisir, au démarrage de l'ordinateur, le système d'exploitation utilisé. C'est la solution  la plus fréquente pour faire coexister les différents environnements sur une même machine.

Une autre solution consiste à installer une machine virtuelle, émulation d'un système d'exploitation comme sous-tâche d'un autre système.

Compilateur C/C++

Pour compiler, voici deux solutions librement téléchargeables :

Afin de disposer d'un compilateur complet et conforme au dernier standard (2003), il est conseillé de travailler avec une version récente de GCC, c'est-à-dire une version 4.1.x ou postérieure. La version actuelle (depuis mi-octobre 2009) est GCC 4.4.2. Elle n'est malheureusement pas installée automatiquement ; au besoin, il faut télécharger le programme source (56.2 Mb) et le compiler dans son environnement (à l'aide de la version de GCC préinstallée). Ce compilateur est distribué librement sous licence GNU GPL.

Pour compiler avec tous les contrôles de conformité au dernier standard (2003, correction de la version de 1998) et même anticiper une partie des extensions en cours de normalisation, l'appel au compilateur doit être accompagné de paramètres particuliers.

NB : ces compilateurs traduisent aussi le langage C. Pour forcer GCC à être quasi conforme au standard le plus récent (1999, cor. 2001 & 2004), il faut spécifier « gcc -Wall -pedantic -Wextra -std=c99 src.c ».

Compilateur Fortran

Sous Unix, il existe un compilateur FORTRAN 77 classique : « f77 ».
Sa version GCC était connue sous le nom « g77 », disparue en tant que telle depuis la version GCC 4.x dans laquelle le langage FORTRAN est totalement intégré.

Pour disposer d'un compilateur conforme à la norme FORTRAN 95, il faut donc installer un compilateur plus récent.

Ces deux compilateurs sont libres (sous licence GNU GPL).

Compilateur Cobol

La norme actuelle du langage est COBOL 2002. Toutefois, il n'existe pas encore de compilateur libre qui y soit complètement conforme. En général, ils ont été conçus sur base de la version précédente : COBOL 85. En voici trois exemples.

Ces trois compilateurs sont libres (sous licence GNU GPL).
Ils nécessitent pour pouvoir fonctionner de disposer de bibliothèques standard (gestionnaire de fichier, arithmétique décimale…) à installer également. L'information spécifique se trouve sur les sites de chacun des compilateurs indiqués ci-dessus.

Enfin, il est également permis d'utiliser le compilateur et l'environnement de développement Micro Focus Net Express à des fins d'enseignement et d'usage personnel. Il fonctionne dans l'environnement .NET, donc sous Windows ou, éventuellement, sous le portage mono (licence GPL) pour linux ou Mac OS X.


Supports de cours

Histoire des langages

Voici le diagramme historique d'Éric Lévénez.

Sur la présence et l'usage des différents langages de programmation, voir par exemple l'index TIOBE.

Langage C++

La première norme internationale de ce standard date de 1998 (ISO/IEC 14882:1998). La version actuelle (ISO/IEC 14882:2003) est sa deuxième édition reprenant des corrections mineures et connue sous l'acronyme C++ 03. Ce document est payant, mais voici, à des fins pédagogiques, la dernière version de travail qui a conduit à cette norme.

Une nouvelle version est en cours d'élaboration contenant plusieurs extensions. Une ébauche (du 9 novembre 2009) peut être consultée afin d'aider au processus de normalisation. Elle devrait être achevée en 2009 et est référencée sous le nom C++ 0x (voir par exemple cet article).

Il existe plusieurs sites de références reprenant une documentation en ligne à propos de ce langage, ainsi que du langage C (voir références ci-dessous). À titre d'exemple : cplusplus.com, Cprogramming, C++ Reference, GNA, rubrique C++ de E.Rémy ou MSDN library.

Concepts OO : classes Vecteur

Voici les étapes d'une construction progressive d'une classe vecteur.

Autres propriétés des classes

Voici quelques autres exemples de codes illustratifs.

Héritage et méthodes virtuelles : classe Complexe

Voici un exemple de classe abstraite (Cplx) dérivée en deux classes concrètes, une version en coordonnées cartésiennes (Cplx_C), l'autre en coordonnées polaires (Cplx_P).
Les classes sont définies dans Cplx.hpp, appelé par Cplx.cpp.

Cette réalisation illustre

Métaprogrammation

Il est parfois nécessaire de suivre la vie des objets d'un programme. La classe Test (définie dans Test1.hpp) se substitue au type TEST_TYP qu'elle encapsule comme attribut et trace chaque appel aux constructeurs, destructeur ou opérateurs new / delete, si la variable de compilation TEST_DBG est définie.
Toutefois cette méthode ne fonctionne bien que pour des types scalaires.

Si l'on souhaite le même effet également pour des instances de classes, il vaut mieux que la classe Test hérite de la classe TEST_TYP, transmise comme paramètre de template. Par contre, comme il n'est pas possible d'hériter d'un scalaire, il faut tester le « type » de ce paramètre lors de l'instanciation du template. Ceci est illustré dans l'exemple Test2.hpp.

Le mécanisme mis en œuvre est le suivant. Le type Test est défini (via un typedef) comme une instance du template de classe TestClass, dérivée d'une classe de base paramétrique (TestBase) qui correspond à l'une ou l'autre instance partielle du template TestStruct qui soit hérite, soit encapsule le type TEST_TYP. Ce choix est déterminé via la technique de métaprogrammation utilisant la taille de la valeur d'une méthode d'une classe (vide) de travail.

Le programme Metaprog.cpp est un exemple d'appel.

Bibliothèque

Une liste des noms (constantes, objets, types, classes, fonctions, macros…) définis dans la bibliothèque standard est disponible ici. Elle ne comprend pas le nom des méthodes définies dans les classes.

Voici une description de la hiérarchie des classes et en-têtes des entrées/sorties ios (dont voici l'original).

Les différentes clases de conteneurs sont présentées ici (dont voici l'original), ainsi que sous forme d'un diagramme UML.

Langage C

Le langage C apparaît aujourd'hui de plus en plus comme un sous-ensemble de C++ (voir à ce sujet l'annexe C de la norme). Toutefois, celle-ci renvoie aux normes spécifiques, tant pour certaines syntaxes désuètes que pour la bibliothèque.

La version actuelle du langage est appelée C 99, deuxième édition de la norme internationale. Elle est définie par

Lorsqu'on fait référence au langage C standard, c'est en tenant compte de ces deux correctifs. En voici une version consolidée de travail. Il existe également une version consolidée incluant une troisième correction (de 2007).

Une nouvelle version est en cours d'élaboration (C 1x) dont voici la dernière version de travail (du 11 août 2008).

Langage FORTRAN

Le langage Fortran a une très longue histoire. Sa version actuelle, le FORTRAN 2003, correspond à la quatrième édition de la norme. La définition du langage est divisée en trois parties qui évoluent indépendamment. Ainsi les parties 2 et 3 se fondent encore sur la norme précédente (FORTRAN 95).

La prochaine version (FORTRAN 2008 ?) ne devrait qu'apporter des extensions mineures (décrites ici). En voici une version consolidée de travail (du 11 mars 2008).

Exemples de programmes

Il existe plusieurs tutoriels, essentiellement pour les versions 90 et 95. Par exemple, ceux de l'IDRIS (en français) : cours avancé et cours de base (voir toutefois une description des nouveautés 2003 ou le document d'origine).

Voici quelques autres exemples utilisés au cours.

Langage COBOL

La version actuelle est le COBOL 2002 (ISO/IEC 1989:2002), mais la plupart des compilateurs se réfèrent encore à la norme COBOL 85 (ISO 1989:1985), telle qu'amendée en 1992 et 1994.

Plusieurs corrections ont déjà été proposées à COBOL 2002 : en voici une version consolidée de travail.

Exemples de programmes

Plusieurs sites proposent de bons didacticiels avec de nombreux exemples. Voici quelques autres exemples utilisés au cours.

Langage Java

Les slides du cours. Quelques exemples.

Langage Python

Les slides du cours. Ces slides sont extraits des cours de programmation de MM. Cardinal et Massart.

Projets


Dernière mise à jour : 2011-2-9 ; Vandy BERTEN

HTML 4.01 Transitional Valide ! CSS version 2.1 Valide !