University Côte d'azur

UE Paradigmes et interpétation

ECUE's code : SLUIN604

This course give 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.

Course's manager(s)

In class

  • 24h of lectures
  • 6h of directed studies
  • 24h of practical work

PREREQUISITES

Before the start of the course, I must ...
  • Avoir programmer dans différents paradigmes (impératif, fonctionnel, orienté objet, ...).

OBJECTIVES

By the end of this course, I should be able to...
  • 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.

CONTENT

    • 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.
Access to complete Syllabus (Authentification required)
Important
This syllabus has no contractual value. Its content is subject to change throughout this year: be aware to the last updates