Vous êtes sur la page 1sur 24

Module 1

Mondher Bouden
Maître assistant

2019-2020
Objectifs

• Introduire les différents paradigmes de la


programmation de haut niveau.

– Ce cours présente les principales approches de programmation


et les langages qui les implémentent.
– Il propose également une mise en pratique de plusieurs
principes de programmation importants via une présentation
comparative.
– Il permet à l’étudiant de se familiariser avec différents styles
de programmation informatique qui se différencient par la
façon dont les solutions aux problèmes doivent être formulées
dans un langage de programmation donné.
2
Contenu

• Programmation procédurale.
• Programmation orientée objet.
• Programmation fonctionnelle (vs impérative).
• Introduction aux autres types de programmation:
– Programmation parallèle.
– Programmation logique.
– Orientée aspect, orientée agents.
– Programmation Web, événementielle, par contrat.
– etc.
PS. Le contenu du cours peut être modifié
selon notre avancement, vos connaissances et
vos attentes.
3
Langages de programmation

• Outil qui sert d’intermédiaire entre le


programmeur et l’ordinateur.

• Un langage de programmation fournit le support


pour une expression symbolique des algorithmes.

• Motivations :
– Abstraction.
– Expressivité.
– Cohérence. 4
Motivations : Abstraction
• Délier le programmeur de la spécification des
détails non pertinents qui seront à la charge du
compilateur ou de l’interpréteur du langage :

– Fonction : Abstraction de calcul (calcul latent).


– Manipulation implicite de la mémoire (explicite en
assembleur).
– Structures symboliques.

5
Motivations : Expressivité
• Nouveaux mécanismes de structuration :
– Données.
– Programmes.
• Nouveaux mécanismes de modularité :
– Concept de modules.
– Paramétrisation.
• Nouveaux mécanismes de contrôle (itérateurs,
continuations, etc.).

6
Motivations : Cohérence
• Concevoir des langages qui détectent le plus tôt
possible, et ce avant toute exécution, des
programmes ayant des comportements non-
souhaitables.
– Typage.
– Analyse statique.

7
Définition d’un langage

• Définir un langage revient à préciser :


– sa syntaxe : décrire la structure des programmes bien
formés.
– sa sémantique : attacher un sens à chaque
construction syntaxique.

8
Syntaxe

• Deux types de syntaxe :


– Syntaxe concrète.
– Syntaxe abstraite.

9
Syntaxe concrète
• Procure un certain confort à l’utilisateur.
• Décrit la forme externe (structure) des
expressions en utilisant les grammaires BNF.
• Une grammaire est un quadruplet :
– Un ensemble de symboles terminaux.
– Un ensemble de symboles non terminaux.
– Un symbole non terminal dit racine.
– Un ensemble de règles ou de productions.

10
Syntaxe concrète

• Exemple

• Mais parfois, on a besoin de :


– oublier certains détails de représentation;
– se concentrer sur la structure des expressions.

11
Syntaxe abstraite
• Montrer la structure d’une construction
indépendamment de la notation d’origine.

• Spécifier au moyen d’une grammaire dite


« grammaire abstraire ».

• Exemple :

12
Sémantique
• Quoi ?

– Attache un sens à chaque construction syntaxique.

• Pourquoi ?

– Aide à la compréhension du langage.


– Support pour la standardisation du langage.
– Guide pour la conception du langage.
– Guide pour l’évolution du langage.
– Aide pour le développement d’outils et d’évaluateurs.
– Aide à la vérification.

13
Sémantique

• Comment ?

– Description en langage naturel :

• + facile.
• - précise.

– Description formelle :

• + précise.
• - facile.

14
Sémantique

• Deux types de sémantique :

– Sémantique statique.

– Sémantique dynamique.

15
Sémantique statique
• La sémantique statique est la description des contraintes
qui ne peuvent être capturées par des descriptions
syntaxiques.

• Exemple :

• Ajouter un mécanisme qui vérifie quelques contraintes de


formation et de typage.

16
Sémantique statique

• Pourquoi le qualificatif statique ?

– Ne pas exécuter le code.

– Analyse statique :

• Règle de typage.

• Contraintes structurelles de bonne


formation.
17
Sémantique dynamique

• Décrit la signification des expressions, ou les effets


résultants de l’exécution d’une expression.

• L’utilisateur doit savoir ce que fait chaque


instruction.

• Plusieurs types de sémantique dynamique.


– La plus couramment utilisée est la sémantique
opérationnelle.

18
Cohérence
• S’assurer que le résultat de la sémantique dynamique est
conforme au résultat de la sémantique statique.

• Soit P un programme alors si :


SD(P) → v
SS(P) → t
alors la valeur v doit être de type t
• Exemple 1 :
SD(P) → 1
SS(P) → int correct
• Exemple 2 :
SD(P) → 1
SS(P) → string problème !!
19
Historique
• Ordinateur = grosse calculatrice !

• Les premières machines à calculer datent des années 1600.


• Blaise Pascal a réalisé en 1642 à l'âge de 19 ans la "Pascaline", qui
effectue les quatre opérations arithmétiques sans utiliser
l'intelligence humaine.
Historique
• Applications militaires : La machine Enigma, développée au début
des années 1920, était une machine de chiffrement
électromécanique à cylindres utilisée pour coder des messages,
notamment pendant la 2e guerre mondiale par les Allemands.

• Alan Turing a participé à la création d'une machine qui, étant donné


un message crypté, était capable de retrouver les réglages de la
machine Enigma, pour ensuite décrypter les messages.
Historique
• L'assembleur fut inventé en 1948.
• Fortran (1956), Cobol (1959) et Lisp (1959).
• Le Basic est créé en 1965 et le Pascal en 1968.
• Le C et Prolog voient le jour en 1972 et Smalltalk, le
premier langage objet, la même année.
• La programmation orientée objet prendra son essor
avec C++, créé en 1983.
• En 1986 est créé Perl. Le HTML est créé en 1990.
Python est créé en 1991 et 1995 verra l'apparition de
Java et de PHP.
• 2000 voit l'apparition de C# et en 2004, F# (descendant
de22Ocaml), etc.
Pensez-y...
• Sortez de votre poche votre téléphone intelligent, et ouvrez
Facebook. Que se passe-t-il ?

• À partir d'une interface tactile conviviale sur un système


d'exploitation embarqué où vous et moi pouvons partager des
applications mobiles, votre téléphone se connecte via un réseau
planétaire sur un serveur distant partageant la tâche d'agréger
et combiner des données (texte, photo, vidéo) partagées par des
millions d'utilisateurs à travers le monde, tout en apprenant à
partir de vos actions pour vous afficher des publicités ciblées.

• Ce téléphone possède plus de puissance computationnelle que


l'ensemble de la NASA lorsque l'homme a marché sur la lune.
Conclusion
• Étude des principaux paradigmes de
programmation.
• Étude de certains aspects des langages de
programmation :
– Syntaxe.
– Sémantiques dynamique et statique.

• Sûreté des programmes :


– À travers le typage.
– À travers l’étude d’au moins un langage représentatif.

24