Cours Paradigm de Programmation
Cours Paradigm de Programmation
2
Ministère de l'Enseignement Supérieur et de la Recherche Scientifique
Institut Supérieur des Arts et du Multimédia de Manouba
Organisation du cours
Cours • 12 semaines
Paradigmes des Langages de Programmation
• 3h/semaine
Master DSIR
• Évaluations : Exposé (30%) + Note examen (70%)
• Questions : [email protected]
Kalthoum REZGUI
2023-2024
3 4
1
29/04/2024
5 6
• Beaucoup de langages sont spécifiques à une machine. • Il n’existe pas de langage universel ultime qui conviendrait pour tout.
• De nouveaux langages sont constamment introduits pour résoudre les • Pour étoffer sa boîte à outils et aborder plus efficacement de nouveaux
limitations (supposées ou non) des langages existants. problèmes.
• Les langages doivent suivre les évolutions des machines et les nouveaux • Pour s’adapter à un domaine/environnement de travail, pour pouvoir
développements en génie logiciel. réutiliser/améliorer les outils de ce domaine.
• Pour des questions de hype et de marketing. • Pour apprendre d’autre paradigmes de programmation.
• Le nombre de degrés de liberté pour le design d’un langage est très ▫ Le langage utilisé façonne le processus de raisonnement
important. ▫ Différents problèmes sont résolus de manière efficace par différentes
• Beaucoup de langages sont spécialisés : web (JS, PHP, HTML), bases de approches.
données (SQL), texte (PERL, TeX), banques (COBOL), maths (Matlab, • Tant qu’on n’a pas testé un langage, on ne sait pas ce qu’on manque.
Mathematica), GPU (Cuda, OpenCL), etc. • Pour le challenge intellectuel.
7 8
2
29/04/2024
9 10
• Programmation :
• Un paradigme de programmation fournit (et détermine) la vue qu’à le
▫ « Ensemble des activités qui permettent l’écriture des programmes
développeur de l’exécution de son programme en situation
informatiques. Elle représente usuellement le codage, i.e., la rédaction
d’exploitation.
du code source d’un logiciel ».
11 12
• Tout problème peut être résolu en se basant sur l’un ou l’autre des
paradigmes de programmation. Si un développeur ne comprend qu’un seul paradigme, il
abordera toujours les problèmes de la même façon quitte à écrire
un code inadapté ou inefficace.
• Un bon programme a presque toujours besoin de plusieurs
paradigmes.
• De fait, un paradigme de programmation est composé d’un ensemble de
concepts. Et on crée un nouveau paradigme en partant d’un paradigme
• Un bon langage doit soutenir plusieurs paradigmes (Ex: l’un pour existant et en lui ajoutant un ou plusieurs nouveaux concepts..
faire les calculs, l’autre pour structurer le problème.)
3
29/04/2024
13 14
• Afin de mieux exprimer des idées complexes • Python, Java, C++ et C# supportent le paradigme impératif structuré,
fonctionnel et objet, par exemple. En fonction du problème à résoudre,
il sera plus intéressant de travailler avec un paradigme plutôt qu’un
• Différentes tâches demandent des approches différentes
autre :
▫ En effet, un calcul matriciel se gère plus facilement avec de l’impératif
• Afin de faciliter l’apprentissage de nouveaux langages structuré.
• Afin de faire les bons choix ▫ De plus, un parcours d’arbre ne peut s’effectuer simplement qu’avec
de la programmation fonctionnelle.
• Afin de suivre l’évolution de l’état de l’art en programmation
▫ Enfin, les interfaces graphiques évoluées font un usage de la POO.
15 16
4
29/04/2024
17 18
Plusieurs paradigmes
• Programmation logique
• Programmation fonctionnelle
• Programmation impérative
• Programmation par scripting/dynamique
• Programmation déclarative
• Programmation orientée aspect
• Programmation concurrente
• et plus…
19 20
• Ensuite, les travaux de Church sur le λ-calcul et les travaux sur la calculabilité
vont faire émerger le paradigme fonctionnel. Le premier langage populaire à
l’implémenter fut LISP en 1958. Mais d’autres comme Haskell en 1990 ou
Scala en 2003 en sont d’autres exemples.
5
29/04/2024
21 22
23 24
6
29/04/2024
25 26
27 28
Fermetures
7
29/04/2024
29 30
31 32
8
29/04/2024
33 34
35 36
9
29/04/2024
37 38
• Encapsulation :
• définir la visibilité et l’accessibilité des propriétés et méthodes d’une classe
pour mieux en maîtriser leur utilisation
• Polymorphisme :
• une entité est alors dite polymorphe si elle peut prendre différentes formes
• Une opération est de fait polymorphe si elle peut prendre des arguments
différents.
• Héritage :
• créer de nouvelles abstractions en se basant sur d’autres abstractions
• sans réécrire le code commun
• éviter le code dupliqué qui est une source de risques
39 40
10
29/04/2024
41 42
43 44
COMMENT
Catégories des Paradigmes QUOI Catégories des Paradigmes
? ?
Programmation Programmation
impérative déclarative
Programmation
modulaire
Programmation
descriptive
11
29/04/2024
45 46
47 48
12
29/04/2024
49 50
• Forme simplifiée de programmation impérative. • Style de programmation adapté aux exigences de projets logiciels plus
volumineux et plus complets.
• Recommande une organisation hiérarchique simple du code.
• Le code source est ici subdivisé de manière ciblée en blocs logiques
indépendants les uns des autres pour plus de clarté et pour faciliter
• Exemple :
le processus de débogage (dépannage).
▫ Utilisation de boucles et structures de contrôle au lieu
d’instructions de saut absolu (instructions entraînant le traitement,
non pas avec l’ordre suivant, mais à un autre endroit). • Les différents blocs, encore appelés modules, peuvent être testés
séparément avant d’être liés au sein d’une application commune.
51 52
13
29/04/2024
53 54
Programmation impérative
Programmation impérative
55 56
14
29/04/2024
57 58
• Avec Python
▫ Le langage Python est un langage multi-paradigme, qui autorise naturellement
la programmation impérative.
Python Explication
tab = [1, 2, 3, 4, 5] On définit le tableau
somme = 0 On initialise la somme des éléments de tab à 0
for elt in tab: On parcourt le tableau tab et on affecte à elt les éléments de tab
somme = somme + elt On ajoute elt à la somme précédente
On affecte à la variable moyenne le quotient de la
moyenne = somme/len(tab)
variable somme et de la taille du tableau tab
print(moyenne) On affiche la moyenne
59 60
Programmation impérative
• Avec Python
• Exemple : Calculer la moyenne du tableau tab = [1, 2, 3, 4, 5] avec code python.
• En programmation procédurale, cela peut donner le code suivant :
Python Explication
tab = [1, 2, 3, 4, 5] On définit le tableau
def somme(tab): On définit la fonction somme qui prend en paramètre tab un
resultat = 0 tableau de nombres et retourne la somme de ses éléments.
for elt in tab:
resultat = resultat + elt
return resultat
def moyenne(tab): On définit la fonction moyenne qui prend en paramètre tab un
n = len(tab) tableau de nombres et retourne la moyenne de ses éléments
return somme(tab)/n
print(moyenne(tab)) On affiche la moyenne
15
29/04/2024
61 62
• L’avantage principal de la programmation impérative est que le code est très • Les modifications qu’une fonction peut effectuer sur l’état du système
lisible, ce qui en facilite l’apprentissage. sont appelées effets de bord.
• Ce paradigme produit toutefois vite des programmes volumineux, les codes
peuvent ainsi perdre en clarté. De plus, en cas de modification ou de mise à • Effet de bord une fonction modifie l'état d'une variable globale.
jour du code, la programmation impérative peut induire un bon nombre de
bugs puisque il faut relire le code dans son entier et effectuer de nombreuses
retouches.
• Risque de se retrouver avec des variables qui auront des valeurs qui
• L’inconvénient immédiat de la programmation impérative et la multiplication n'étaient pas prévues par le programmeur.
des variables.
• On doit souvent se questionner sur l’état d’une variable durant le déroulement • L'état futur des variables est difficilement prévisible à un instant donné.
des instructions. Eviter autant que possible l'utilisation du "global".
• Les fonctions ont-elles connaissance de cet état ? Est-ce une variable globale ?
63 64
COMMENT
Catégories des Paradigmes QUOI Programmation déclarative
? ?
Programmation Programmation
impérative déclarative • En programmation déclarative, on décrit le QOUI, c'est-à-dire le problème.
• En programmation impérative (Ex: C ou Java), on décrit le COMMENT,
c'e-à-d la solution.
16
29/04/2024
65 66
67 68
17
29/04/2024
69 70
• Concepts sous-jacent :
▫ Pureté
▫ Fonction de première classe/ d’ordre supérieur
▫ Notion de fermeture
▫ Lambda-expressions
▫ Evaluation paresseuse
• Avantages :
▫ Stabilité, déterminisme, testabilité, cloisonnement, fluidité
d’utilisation, compositionalité, généralisation, extensibilité, etc.
71 72
• Fonctions impures
▫ Fonctions qui ne respectent pas ce principe.
18
29/04/2024
73 74
• Être de première classe, c’est donc avoir le même statut qu’une valeur • Fonction map
telle qu’un entier ou un caractère, c’est-à-dire :
▫ Permet d’appliquer une fonction à tous les éléments d’un itérable (ex:
▫ Pouvoir être nommé, affecté (et typé) : x = sin tableau, liste, etc.)
▫ Pouvoir être défini et créé à la demande : x= lambda x: x+1 map(func, tab) prend ainsi en paramètres une fonction func et un
tableau tab (ou un objet itérable) ; cette fonction retourne
▫ Pouvoir être passé en argument à une fonction : map(lambda x: x*x, [1, 3, 4 ] ) un itérateur dont les éléments sont les images des éléments de tab par
la fonction func.
▫ Pouvoir être le résultat d’une fonction : (f( 3 ) ) ( 5 )
75 76
19
29/04/2024
77 78
[4, 6, 10]
79 80
20
29/04/2024
81 82
• Inconvénients : • Exemple : Deux manières d’écrire la fonction carre qui prend en paramètre un
▫ Avec fonctions d’ordre supérieur, il fallait à chaque fois commencer par définir la nombre a et retourne son carré.
fonction qu’on souhaitait utiliser, ce qui rend l’écriture un peu lourde.
▫ Dans le paradigme fonctionnel, il existe un opérateur pour définir des fonctions
que l’on peut stocker dans des variables ou passer en paramètre : il s’agit de Fonction classique Lambda fonction
l’opérateur lambda. carre = lambda a : a*a
def carre(a):
la lambda fonction est référencée par la
return a*a
variable carre.
83 84
21
29/04/2024
85 86
Programmation fonctionnelle
Avantages Programmation logique
87 88
• Langage descriptif (faits et relations) et prescriptif (inférence), céad: • Pour utiliser Prolog :
▫ il suffit de décrire ce que l'on sait sur le domaine étudié = Base de
▫ Installer swi-prolog sur votre marchine
connaissances en IA
Fonctionne sous Linux, Windows et MacOS.
▫ puis on pose une question à propos de ce domaine
Disponible gratuitement (licence BSD) au département informatique de
▫ et Prolog va nous répondre, sans que l’on ait à lui dire comment construire l'Université de Psychologie d'Amsterdam http://www.swi-
sa réponse ! prolog.org/download/stable
▫ Utiliser l'interpréteur en ligne swish
22
29/04/2024
89 90
• Une base de connaissance est composée de Clauses : • Choisissez un domaine particulier et déterminez sa base de
▫ Les Faits connaissances.
▫ Les Règles
• Travail en groupe.
• L’utilisateur pose ensuite une Question
91 92
23
29/04/2024
93 94
95 96
Prolog Prolog
Les données Les données
• Sont utilisées dans les règles afin de les généraliser : • Propriété qui lie un certain nombre d’objets
▫ Ex: La possession lie le propriétaire et l’objet possédé
• Peuvent aussi être utilisées dans les faits : • Plusieurs possibilités pour établir la même relation :
24
29/04/2024
97 98
Prolog Prolog
Les faits Les faits
99 100
Prolog Prolog
Prédicats Arité d’un prédicat
25
29/04/2024
101 102
Prolog Prolog
Formule Prolog Règles Prolog
• Enoncent la dépendance d’un prédicat par rapport à • Un programme Prolog contient presque toujours des règles, cependant
d’autres prédicats. ce n’est pas une obligation.
• Si les faits sont les hypothèses de travail, les règles sont des relations qui
• Concernent des catégories d’objets / faits permettent à partir de ces hypothèses d’établir de nouveaux faits par
▫ Fait : homme(socrate). déduction (si on a démontré F1 et F1⇒F2 alors on a démontré F2).
▫ Règle : si X est un homme alors X est mortel qui s'écrit:
mortel(X) :- homme(X). • Cette règle est appelée en logique le Modus Ponens
▫ Le « si » s’écrit « :- » en Prolog et correspond à l’implication ⇒
homme(X) ⇒ mortel(X).
103 104
Prolog Prolog
Règles Prolog Règles Prolog
26
29/04/2024
105 106
Prolog Prolog
Question Prolog Exercice
• Question: est-ce que socrate est mortel? • Exprimer en Prolog les propositions suivantes, identifier les objets,
▫ La question s’exprime avec « ?- » en Prolog les faits, les règles
▫ la chèvre est un animal herbivore
▫ le loup est un animal cruel
• En Prolog la question est un but. ▫ toute chose cruelle est carnivore
▫ un animal carnivore mange de la viande et un animal herbivore mange
• Le canard est un oiseau. Les oiseaux volent. Est-ce que le de l’herbe
canard vole? ▫ un animal carnivore mange des animaux herbivores
▫ les carnivores et les herbivores boivent de l’eau
▫ un animal consomme ce qu’il boit ou ce qu’il mange
▫ Question : y a-t-il un animal cruel et que consomme-t-il ?
107 108
Prolog Prolog
Exercice Question Prolog
27