Université du Québec en Outaouais Département d'informatique et d'ingénierie
Sigle : INF4083  Gr. 01
Titre : Langages de programmation
Session : Hiver 2018  Horaire et local
Professeur : Audet, François
1. Description du cours paraissant à l'annuaire :

Objectifs

Présenter à l'étudiant les concepts fondamentaux des langages de programmation modernes. Lui présenter les différents paradigmes de programmation en soulignant les avantages et les limites de chaque paradigme.

Contenu

Structure interne des langages : structures de contrôle, structures de données, structuration de code. Types d'appels, portée, conversion de types, polymorphisme, encapsulation (module, classe), héritage, généricité. Traitement d'exceptions. Concurrence. Syntaxe et Sémantique formelles. Paradigmes de programmation : procédural, fonctionnel, orienté objet, parallèle et logique. Étude comparative de langages parmi: C, C++, Java, Ada, Prolog, SmallTalk, ML. Ce cours comporte des séances obligatoires de travaux dirigés (TD) de deux heures par semaine.
2. Objectifs spécifiques du cours :
Un demi-siècle de l'histoire de l'informatique nous a produit des centaines de langages de programmation et des nouveaux langages ne cessent d'être inventés. Cela indique que l'ultime "langage de programmation" n'existe pas. D'où l'importance d'une connaissance générale des concepts fondamentaux des langages de programmation existants afin de pouvoir rapidement apprendre des nouveaux langages ou de choisir le plus approprié pour une tâche donnée. Plus spécifiquement :
  • familiariser l'étudiant avec une variété représentative des langages de programmation modernes en se concentrant sur leurs concepts de base distinctifs ;
  • l'introduire aux concepts de base pour la description de la syntaxe et de la sémantique des langages de programmation qui parfois constituent une partie intégrale du langage ;
  • lui présenter "les pour" et "les contres" des différents langages et les concepts et métaphores qu'ils utilisent ;
  • lui faire comprendre des objectifs et des enjeux motivant le développement constant de langages.
3. Stratégies pédagogiques :
Ce cours est donné principalement sous forme magistrale, accompagné par des exercices de compréhension à faire en dehors des heures de cours. Deux devoirs sont prévus afin de consolider les notions vues en classe.
4. Heures de disponibilité ou modalités pour rendez-vous :
Les heures de disponibilité et les modalités de consultations seront communiquées lors du premier cours.
5. Plan détaillé du cours sur 15 semaines :
Semaine Thèmes Dates
1    Principaux paradigmes des langages de programmation
  • Historique
  • Importance des langages de programmation de haut niveau
  • Principaux paradigmes : langages impératifs/procéduraux, déclaratifs, fonctionnels et orientés objet
  • Compilation versus interprétation
10 jan. 2018 
2    Descriptions des langages - Énoncé du projet 1
  • Expression et arbre syntaxique : notation préfixe, suffixe et infixe
  • Tokenization (expressions régulières) et notation BNF
  • Analyse syntactique
17 jan. 2018 
3    Identificateurs, portées et liaisons
  • Durée de vie des objets
  • Portées statiques et dynamiques
  • Polymorphisme
  • Concept de fermeture d'une fonction

TD #1 (23 janvier 2017)

24 jan. 2018 
4    Analyse sémantique et contrôle du flux d'exécution
  • Rôle d'un analyseur sémantique
  • Grammaire, attributs, arbre de syntaxe
  • Évaluations des expressions
  • Séquençage, itération, évaluation paresseuse

TD #2 (30 janvier 2017)

31 jan. 2018 
5    Types de données
  • Vérification
  • Structures
  • Tableaux, chaînes de caractères, listes
  • Pointeurs et types récursifs
  • Ramasse miettes

TD #3 (6 février 2017)

07 fév. 2018 
6    Sous-routines et contrôle
  • Configuration de la pile d'exécution
  • Passage des paramètres
  • Sous-routines et modules génériques
  • Exceptions
  • Constructeur, héritage et polymorphisme

TD #4 (13 février 2017)

14 fév. 2018 
7    Examen de mi-trimestre

TD #5 (20 février 2017)

21 fév. 2018 
8    Semaine d'études 28 fév. 2018 
9    Programmation logique - Énoncé du projet 2
  • Logique propositionnelle
  • L'unification et stratégies de déduction
  • Clause de Horn et la résolution : PROLOG
07 mars 2018 
10    Langages fonctionnels : Lambda-calcul
  • Syntaxe : variable, abstraction fonctionnelle, application
  • Notion de variables libres et liées : alpha-conversion
  • Beta-réduction

TD #6 (13 mars 2017)

14 mars 2018 
11    Langages fonctionnels
  • Récursion
  • Fonctions d'ordre supérieur
  • Module
  • Entrée et sortie

TD #7 (20 mars 2017)

21 mars 2018 
12    Langages fonctionnels
  • Foncteurs
  • Monoïdes
  • Monades

TD #8 (27 mars 2017)

28 mars 2018 
13    Colatéralité et parallélisme
  • Motivation
  • Concepts de base
  • Techniques de synchronisation

TD #9 (3 avril 2017)

04 avr. 2018 
14    Présentations et révision
  • Présentations du Projet 2
  • Révision pour l'examen final

TD #10 (10 avril 2017)

11 avr. 2018 
15    Examen final 18 avr. 2018 
6. Évaluation du cours :

L'évaluation est l'appréciation du niveau d'apprentissage atteint par l'étudiant par rapport aux objectifs des cours et des programmes.

Dans le cas spécifique du cours Langages de programmation l'attribution des notes sera la somme des 2 travaux pratiques et des 2 examens. Les travaux pratiques comptent pour 20 points chaque, et les examens comptent pour 30 points chaque.

7. Politiques départementales et institutionnelles :
8. Principales références :
Manuels recommandés
  • Michael L. Scott. Programming Language Pragmatics. Third Edition, Morgan Kaufmany 2009.
  • Leon Sterling et Ehud Shapiro. The Art of Prolog: Advanced Programming Techniques, second edition, MIT Press, 1994
  • Greg Michaelson. An Introduction to Functional Programming Through Lambda Calculus, Dover Publications, 2011
  • Michael Fogus et Chris Houser. The Joy of Clojure, Second Edition, Manning Publications, 2014
  • Yaron Minsky, Anil Madhavapeddy et Jason Hickey, Real World OCaml, O'Reilly, 2013
  • Miran Lipovaca. Learn You a Haskell for Great Good! No Starch Press, 2011
  • Bryan O'Sullivan, John Goerzen et Donald Bruce Stewart, Real World Haskell, O'Reilly, 2008
  • Paul Chiusano et Rúnar Bjarnason, Functional Programming in Scala, Manning Publications, 2014
  • Simon Marlow, Parallel and Concurrent Programming in Haskell, O'Reilly, 2013
  • Derek Wyatt. Akka Concurrency, Artima Press, 2013
  • Nathan Kozyra. Mastering Concurrency in Go, Packt Publishing, 2014
9. Page Web du cours :
https://moodle.uqo.ca