Université du Québec en Outaouais Département d'informatique et d'ingénierie
Sigle : INF4083  Gr. 01
Titre : Langages de programmation
Session : Hiver 2019  Horaire et local
Professeur : Taleb, Mohamed
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.

Descriptif – Annuaire

2. Objectifs spécifiques du cours :

L'objectif de ce cours est de permettre aux étudiants de :

  • Comprendre les différences entre différents paradigmes de programmation ;
  • Développer des algorithmes de résolution de problèmes ;
  • Développer des programmes dans différents langages de programmation.
3. Stratégies pédagogiques :

Le cours se donne sous forme magistrale de trois (3) heures par semaine à la salle B1004 et le cours est avec des TD, pour une durée de quinze (15) semaines.

4. Heures de disponibilité ou modalités pour rendez-vous :

Sur rendez-vous par courriel.

5. Plan détaillé du cours sur 15 semaines :
Semaine Thèmes Dates
1   

Présentation du Plan de cours

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
  • Pas de TD la 1re semaine
09 jan. 2019 
2   
  • Expression et arbre syntaxique : notation préfixe, suffixe et infixe
  • Tokens (expressions régulières) et notation BNF
  • Analyse syntactique
16 jan. 2019 
3   

Langages logiques avec PROLOG

  • Historique
  • Analyse sémantique
  • Types de données
  • Les faits et base de faits
  • Procédures
  • Les questions
  • Les règles
  • Les prédicats et formules
  • Le COUPE-CHOIX (!)
  • Les variables anonymes
  • Clauses de Horn

TD #1 : lundi 14 janv. – Les clauses

23 jan. 2019 
4   

Langages logiques avec PROLOG (suite)

  • Requêtes avec valeurs et avec variables comme paramètres
  • Processus par déduction
  • Unification et résolution
  • Opérateurs arithmétiques
  • Opérateurs logiques et relationnels
  • Opérateurs et opérations booléens

TD #2 : lundi 21 janv. – Unification, les booléens

30 jan. 2019 
5   

Langages logiques avec PROLOG (suite)

  • Qualificateurs : fail, forall
  • Le traitement des listes de la programmation logique

TD #3 : lundi 28 janv. – Les listes

06 fév. 2019 
6   

Les langages fonctionnels avec Common LISP

Éléments de base de la programmation fonctionnelle

  • Historique
  • Analyse sémantique
  • Types de données
  • Représentation des listes
  • Expressions et fonctions
  • Arité des fonctions
  • Évaluation des expressions
  • Les fonctions mathématiques prédéfinies
  • Les fonctions prédéfinies de construction de listes
  • Les fonctions prédéfinies d’accès aux listes

TD #4 : lundi 4 févr. – Expressions booléennes, fonctions de construction de listes, fonctions d’accès aux listes

13 fév. 2019 
7   

Les langages fonctionnels avec Common LISP (suite)

Éléments de syntaxe

  • Flux de contrôles
  • Variables et liens
  • Contexte et lien enchâssé
  • Définition des fonctions
  • Fonction d’ordre supérieur
  • Composition des fonctions

TD #5 : lundi 11 févr. – Traitement des listes et définition des fonctions

20 fév. 2019 
8   

Les langages fonctionnels avec Common LISP (suite)

  • Variables et affectations
  • Création de modification d’une liste
  • Récursivité
  • Structures, arbres, nombres, tri, et fouille

TD #6 : lundi 18 févr. – Structure, arbre, nombres, tri, fouille

27 fév. 2019 
9   

Semaine d’études

06 mars 2019 
10   

Examen intra

13 mars 2019 
11   

Programmation orientée-objet avec Ruby

  • Historique
  • Analyse sémantique
  • Types de données
  • Variables
  • Chaînage d’instructions d’affectation
  • Instructions d'affectation parallèles
  • Tableaux réguliers et associatifs
  • Flux de contrôle
  • Entrées/Sorties

TD #7 : lundi 18 mars – Tableaux réguliers, tableaux associatifs, fonctions

20 mars 2019 
12   

Programmation orientée-objet avec Ruby (suite)

  • Classes, objet et passage de messages
  • Modules
  • Les expressions régulières
  • Introspection

TD #8 : lundi 1er avril – Héritage, itérateur, expression régulière, modules, introspection

27 mars 2019 
13   

Étude comparative des langages

03 avr. 2019 
14   

Étude comparative des langages (suite)

Révision pour l’examen final

10 avr. 2019 
15   

Examen final

17 avr. 2019 
6. Évaluation du cours :
  • Travail pratique 1 : 15 %
  • Travail pratique 2 : 15 %
  • Examen intra : 30 %
  • Examen final : 40 %
7. Politiques départementales et institutionnelles :
8. Principales références :

Volumes de référence pour le cours :

  1. Michael L. Scott. Programming Language Pragmatics, Third Edition, Elsevier, 2009.
  2. Ivan Bratko. Prolog Programming for Artificial Intelligence, Fourth Edition, Addison Wesley, 2012.
  3. Leon Sterling and Ehud Shapiro. The Art of Prolog: Advanced Programming Techniques, second edition, MIT Press, 1994.
  4. Patrick Henry Winston and Berthold Klaus Paul Horn. LISP, 3rd Edition, 1989.
  5. Sonja E, Keene. Object-Oriented Programming in Common Lisp, Addison Wesley, 1989.
  6. Michael Fitzgerald. Learning Ruby, O’Reilly, 2007.
  7. Jeri R. Hanly and Elliot B. Koffman. C Program Design for Engineers, Second Edition, Addison Wesley, 2001.

Le matériel du cours présenté en classe par le professeur est disponible sur https://moodle.uqo.ca.

9. Page Web du cours :
https://moodle.uqo.ca