Université Côte d'azur

UE Paradigmes et interpétation

Code de l'ECUE : SLUIN604

Ce cours donne droit à 6.0 ECTS.
PORTAIL SCIENCES ET TECHNOLOGIES
Informatique
Campus Valrose
Licence 3
Semestre pair
Français

PRESENTATION

Un paradigme de programmation oriente la manière dont un développeur conçoit un programme. Par exemple, en programmation orientée objet, un programme est vu comme un ensemble d'objets qui interagissent en s'envoyant des messages. En programmation fonctionnelle, un programme sera plutôt défini par l'évaluation d'une fonction sans état. Chaque paradigme va ainsi promouvoir, ou à l'inverse interdire, un certain nombre de techniques.

Ce cours s'intéresse à la compréhension de différents concepts sous-jacents aux paradigmes de programmation. Leur analyse permet d'appréhender les avantages et les inconvénients de chaque style de programmation. Ces concepts sont introduits tout au long du cours au travers d'exemples et de cas d'étude. Chacun d'entre eux est par la suite mis en avant dans un langage minimal pour lequel un interpréteur est réalisé.

Le cours se base sur le livre Programming languages: Application and Interpretation, également disponible au format pdf, et s'inspire des cours de Shriram Krishnamurthi et de Matthew Flatt. Les langages définis dans le cours ont une syntaxe du LISP afin de faciliter l'écriture d'interpréteurs. Ceux-ci sont en effet écrit dans une variante du langage Racket à l'aide du logiciel DrRacket. La maîtrise de ce langage n'est pas un prérequis au cours, la syntaxe et les structures utilisées sont introduites quand cela s'avère nécessaire. Vous pouvez vous référez au livre Premiers cours de programmation avec Scheme pour une introduction à Racket.

Responsable(s) du cours

Présentiel

  • 24h de cours magistral
  • 6h de travaux dirigés
  • 24h de travaux pratiques

PREREQUIS

Avant le début du cours, je dois ...
  • Avoir programmer dans différents paradigmes (impératif, fonctionnel, orienté objet, ...).

OBJECTIFS

A la fin de ce cours, je devrais être capable de...
  • Reproduire les fonctionnalités des principaux paradigmes dans un interpréteur.
  • Comprendre l'origine des avantages et des limitations des différents style de programmation.
  • Analyser les concepts sous-jacents aux langages de programmation.

CONTENU

    • Présentation de l'organisation du cours, de ses objectifs et de sa méthodologie.
    • Introduction au langage Racket qui sert de support aux exemples et aux interpréteurs.
    • Expressions arithmétiques
    • Analyse syntaxique
    • Fonctions, appels de fonctions et substitution
    • Optimisation de la substitution : notion d'environnement
    • Introduction de valeurs multiples
    • Ordre supérieur
    • Espaces de noms
    • Notion d'état
    • Valeur mutable minimale : boîtes
    • Simulation de la mémoire dans un interpréteur purement fonctionnel
    • Enregistrements
    • Variables
    • Appels par valeur, appel par référence
    • Langage noyau et sucre syntaxique
    • Introduction au lambda-calcul
    • Définition de fonctions récursives
    • Évaluation paresseuse
    • Pile d'exécution et continuations
    • Capture et saut de contexte
    • Gestion explicite des erreurs
    • Encapsulation des données et des comportements : notion d'objet.
    • Implémentation soft par sucre syntaxique et implémentation classique.
    • Classes, héritage, appels statiques et dynamiques.
    • Expressions invalides : grammaire vs sémantique.
    • Types et système de typage
    • Inférence de types : algorithme d'unification
    • Sous-typage des enregistrements.
    • Sous-typage des fonctions : covariance et contravariance.
    • Impact des états sur le sous-typage.
    • Typage et sous-typage en programmation orientée objet.
Accéder au Syllabus complet (Authentification requise)
Important
Ce syllabus n’a aucune valeur contractuelle. Son contenu est susceptible d’évoluer en cours d’année : soyez attentifs aux dernières modifications.