Université du Québec en Outaouais Département d'informatique et d'ingénierie
Sigle : INF4083  Gr. 01
Titre : Langages de programmation
Session : Hiver 2016  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 milliers 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 d'une connaissance générale des concepsts fondamentaux des langages de programmation existants afin de pouvoir 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 ;
  • Introduire l'étudiant 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 ;
  • présenter à l'étudiant "les pour" et "les contres" des différents langages et les concepts et métaphores qu'ils utilisent ;
  • faire comprendre à l'étudiant les objectifs et les 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
13 jan. 2016 
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

Travaux dirigés #1 (25 janvier 2016)

20 jan. 2016 
3    Identificateurs, portées et liaisons
  • Durée de vie des objets
  • Portées statiques et dynamiques
  • Polymorphisme
  • Concept de fermeture d'une fonction

Travaux dirigés #2 (1er février 2016)

27 jan. 2016 
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

Travaux dirigés #3 (8 février 2016)

03 fév. 2016 
5    Types de données
  • Vérification
  • Structures
  • Tableaux, chaînes de caractères, listes
  • Pointeurs et types récursifs

Travaux dirigés #4 (15 février 2016)

10 fév. 2016 
6    Sites routines et contrôle
  • Configuration de la pile d'exécution
  • Passage des paramètres
  • Sous-routines et modules génériques
  • Exceptions
  • Coroutines et événements

Travaux dirigés #5 (22 février 2016)

17 fév. 2016 
7    Examen de mi-trimestre 24 fév. 2016 
8    Semaine d'études 02 mars 2016 
9    Programmation orientée objet
  • Encapsulation, héritage
  • Constructeur
  • Ramasse miettes
  • Héritage multiple
  • Smalltalk

Travaux dirigés #6 (14 mars 2016)

09 mars 2016 
10    Programmation logique - Énoncé du projet 2
  • Logique propositionnelle
  • L'unification et stratégies de déduction
  • Clause de Horn et la résolution : PROLOG

Travaux dirigés #7 (21 mars 2016)

16 mars 2016 
11    Langages fonctionnels : Lambda-calcul
  • Syntaxe : variable, abstraction fonctionnelle, application
  • Notion de variables libres et liées : alpha-conversion
  • Beta-réduction
  • Introduction à Haskell

Pas de travaux dirigés le 28 mars 2016 (Lundi de Pâques)

23 mars 2016 
12    Langages fonctionnels : Haskell
  • Récursion
  • Fonctions d'ordre supérieur
  • Module
  • Entrée et sortie

Travaux dirigés #8 (4 avril 2016)

30 mars 2016 
13    Langages fonctionnels : Haskell (suite)
  • Foncteurs
  • Monoïdes
  • Monades

Travaux dirigés #9 (11 avril 2016)

06 avr. 2016 
14    Colatéralité et parallélisme
  • Java thread
  • Akka et Scala Future
  • Go routine et channels
  • Clojure (STM)

Travaux dirigés #10 (18 avril 2016)

13 avr. 2016 
15    Examen final 20 avr. 2016 
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