Université Lyon 1
Arqus
Accueil  >>  Programmation avancée
  • Unité d'enseignement : Programmation avancée
Nombre de crédits de l'UE : 3
Code APOGEE : INF1088M
    Responsabilité de l'UE :
CHAINE RAPHAELLE
 raphaelle.chaineuniv-lyon1.fr
04.72.43.26.62
    Type d'enseignement
Nb heures *
Cours Magistraux (CM)
15 h
Travaux Pratiques (TP)
15 h

* Ces horaires sont donnés à titre indicatif.

    Pré-requis :
Cette UE s'appuie sur les compétences en algorithmique et programmation abordées en Licence. Elle suppose la maîtrise des notions suivantes :
  • conteneurs de base et leur implantation efficace : tableaux, tableaux dynamiques, listes chaînées, ensemble, tables et dictionnaires,
  • conception d'algorithmes itératifs simples à base de boucles,
  • conception d'algorithmes récursifs simples,
  • notion de pile d'appels de fonction et de tas pour l'allocation dynamique de mémoire.
Du point de vue pratique, les travaux pratiques se feront en C++. Une maîtrise de base de ce langage et de sa compilation est nécessaire :
  • Connaissance des différentes étapes de la compilation d'un programme,
  • compilation d'un programme décrit sur plusieurs fichiers,
  • structures de données en C++ : types primitifs, tableaux, adresses (pointeurs), références,
  • allocation dynamique, construction et destruction des structures de données,
  • récupération et analyse des erreurs de compilation simples (erreurs de syntaxe, de typage),
  • récupération et analyse des erreurs d'exécution simples (erreur de segmentation, boucle infinie).
    Compétences attestées (transversales, spécifiques) :
Cette UE apporte des compétences pour la conception et la mise en œuvre d'algorithmes efficaces dans un contexte de Calcul Haute Performance. Ceci est particulièrement important dans des contextes de simulations physiques et numériques.
  • retour sur les différents paradigmes de programmation vus en Licence en se posant la question de leur mise en oeuvre et de leur coût dans un langage de programmation compilé, 
  • savoir ne recourir à un mécanisme de programmation que s'il est véritablement utile, pour plus d'efficacité des traitements,
  • comprendre les traitements faits par le compilateur C++, ainsi que les traitements qu'il est envisageable de lui confier, y compris la génération automatique de morceaux de code (introduction à la méta-programmation).



    Programme de l'UE / Thématiques abordées :

Le but de ce module est d'introduire la question de la généricité et de la méta-programmation dans le développement logiciel de librairies orienté performance (noyau de framework en système, IA, simulation, etc.). Les librairies génériques doivent permettre la mise en place d'applications efficaces et robustes, dans des domaines multiples et variés.

Pour mettre en œuvre de telles librairies, le langage C++ offre un certain nombre d'outils comme l’identification dynamique de type mais aussi les templates, dont le mécanisme statique sera expliqué en détail. Ce cours introduit également la notion de value-ness (lvalue, rvalue, xvalue) et son exploitation pour économiser la construction d'objets temporaires dans des applications efficaces.

Le C++ s’accompagne notamment d’une bibliothèque standard, la Standard Template Library (STL) qui offre un certain nombre de patrons (classes conteneurs, algorithmes, itérateurs) correspondant aux structures de données et aux algorithmes classiquement utilisés en Informatique. Nous rappellerons comment une telle librairie peut être utilisée, mais aussi comment mettre en place des librairies s'appuyant sur le même paradigme de programmation générique. En particulier, nous ferons référence au projet Boost qui correspond à un référentiel pour les évolutions futures du langage C++ et de ses normalisations.

Par ailleurs, le langage JAVA est le second langage à objets majoritairement utilisé par l’industrie, et ce cours reviendra sur les différences fondamentales de ce langage avec C++, avec toutes les conséquences en terme de philosophie de conception et style de programmation. Malgré leurs ressemblances superficielles, les programmes obtenus avec ces deux langages peuvent en effet avoir des comportements complètements différents. 

Date de la dernière mise-à-jour : 13/04/2018
SELECT MEN_ID, `MEN_DIP_ABREVIATION`, `MEN_TITLE`, `PAR_TITLE`, `PAR_ID` FROM parcours INNER JOIN ue_parcours ON PAR_ID_FK=PAR_ID INNER JOIN mention ON MEN_ID = PAR_MENTION_FK WHERE PAR_ACTIVATE = 0 AND UE_ID_FK='16766' ORDER BY `MEN_DIP_ABREVIATION`, `MEN_TITLE`, `PAR_TITLE`