0% ont trouvé ce document utile (0 vote)
11 vues44 pages

Paradigm Es

Le document présente un cours sur les principes et paradigmes des langages informatiques, en mettant l'accent sur la programmation orientée objet avec des exemples en C++ et Java. Il aborde divers paradigmes tels que l'impératif, fonctionnel, logique, déclaratif et événementiel, ainsi que leurs caractéristiques et applications. Enfin, il discute des concepts de typage dynamique et statique, ainsi que des outils et compléments liés à la programmation.

Transféré par

Marc Aurele Emmanuel
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
11 vues44 pages

Paradigm Es

Le document présente un cours sur les principes et paradigmes des langages informatiques, en mettant l'accent sur la programmation orientée objet avec des exemples en C++ et Java. Il aborde divers paradigmes tels que l'impératif, fonctionnel, logique, déclaratif et événementiel, ainsi que leurs caractéristiques et applications. Enfin, il discute des concepts de typage dynamique et statique, ainsi que des outils et compléments liés à la programmation.

Transféré par

Marc Aurele Emmanuel
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Principes & paradigmes

Eric Lecolinet - Télécom Paris – Institut Polytechnique de Paris


http://www.telecom-paris.fr/~elc

2024
Dans ce cours
Organisation du cours

§ principaux paradigmes et principes des langages informatiques

§ orienté objet illustré en C++ (et comparaison Java)

§ autres concepts et compléments

§ programmation événementielle et interfaces graphiques Java Swing

Liens

§ http://www.telecom-paristech.fr/~elc/

§ http://www.telecom-paristech.fr/~elc/inf224/ - lien vers page eCampus

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 2
Paradigmes

Paradigme
§ approche, philosophie
§ la plupart des langages actuels
sont multi-paradigmes

Ali Mili et al. 2004

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 3
Paradigmes
Principaux paradigmes
§ Impératif
§ exécution pas à pas des instructions
§ Fortran, C, Pascal ...

§ Fonctionnel
§ évaluation de formules, lambda-calcul
§ Lisp, Scheme, Caml, Haskell ...

§ Orienté objet
§ modélise des interactions entre des entités
§ Smalltalk, C++, Python, Java, C#, Swift ...

§ Logique
§ recherche via des règles (Prolog)
§ démonstration automatique

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 4
Paradigmes
§ Déclaratif
§ décrire le "quoi" plutôt que le "comment"

§ Evénementiel
§ gérer les réponses à des événements
§ typique des interfaces graphiques, du Web ...

§ Concurrent
§ langages orientés concurrence pour gestion multi-tâches (Go, Erlang ...)
§ partiellement intégré dans langages courants (thread, mutex, future ...)

§ Langages spécialisés
§ pour le Web (PHP, Perl, JavaScript, TypeScript ...)
§ langages de scripts (bash, zsh ...)
§ langages de simulation (circuits)
§ langages réactifs/synchrones (embarqué), etc.

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 5
Paradigme impératif

Principe
§ un programme est :
§ une suite d'instructions
§ à l’intérieur de structures
de contrôle emboîtées
§ exécution pas à pas des instructions

Structures de contrôle de l'exécution :


§ if-then-else, etc.

§ boucles for, while, etc.

§ appels de fonctions

§ exceptions, etc.

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 6
Paradigme impératif

Principe
§ un programme est :
§ une suite d'instructions
§ à l’intérieur de structures
de contrôle emboîtées
§ exécution pas à pas des instructions

La gestion des données incombe au programmeur


§ qui doit :
§ déclarer les variables (et leur type)
§ decider de leur durée de vie (on y reviendra)
§ décider des effets de bord (affectations = ce que les variables contiennent)

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 7
Origines du paradigme impératif

Machine de Turing
§ modèle abstrait permettant des calculs arbitraires

Machine de von Neumann

§ architecture matérielle d'un ordinateur (1945)

§ instructions numérotées :
§ arithmétiques
§ de transfert de données
§ de rupture de séquence (goto) wikipedia

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 8
Exemple : programme d’addition

Pré-conditions
§ B et C sont des variables contenant des entiers positifs
§ on ne sait faire que +1 et -1

Post-conditions
§ A vaut B + C
§ C vaut 0 et B inchangée

organigramme

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 9
Pré-conditions et post-conditions

Pré-conditions
§ conditions qui doivent être vérifiées avant le traitement

Post-conditions
§ conditions qui doivent être garanties après le traitement

Invariants
§ conditions toujours vraies

Il faut :
§ les expliciter (documentation)
§ si possible les vérifier dans les fonctions
§ au moins en phase de développement
§ pour détecter les erreurs
organigramme

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 10
Programmation structurée
Théorème de Boehm et Jacopini (en substance)
§ toute fonction calculable peut être calculée en combinant des sous-programmes
via trois structures de contrôle :
§ séquencement
§ tests (if-then)
§ itérations (boucles)

Programmation structurée
§ dérivée de Boehm et Jacopini
§ tout programme peut s'écrire en n'utilisant que while et if-then (donc sans goto)

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 11
Programmation structurée

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 12
Paradigme fonctionnel
Origine
§ dérivé de la théorie du λ-calcul (Church, années 30)
§ langage Lisp (J. McCarthy, années 50)

Principe
§ repose sur l'évaluation de fonctions
§ pas d'effets de bord (en fonctionnel "pur")
§ repose largement sur la récursivité (pas de boucles !)

Factorielle en Lisp et en C
(notation préfixe en Lisp, infixe en C)
Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 13
Lisp
Programme = donnée
§ fonctions de "première classe"
(peuvent être un argument)

§ une fonction est une donnée


(c'est une liste)

Lambda = fonction anonyme


§ notée (λx .x + 1)
dans la théorie du λ-calcul

§ cette notion :
§ a été reprise dans les langages courants (C++, Java, Python ...)
§ où elle est liée à la capture de variables

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 14
Lisp
Tout s'exprime sous forme de listes
§ Listes chaînées composées de doublets
§ (cons x y) crée un doublet
§ (car d) renvoie la composante gauche
§ (cdr d) renvoie la composante droite
§ nil ou () est la liste vide
§ (null x) est vrai si x est vide

§ Un programme est une liste !

Gestion mémoire automatique


§ le programmeur n'a pas à gérér la mémoire !
§ ramasse-miettes (garbage collector)
§ idée reprise dans Java, Python, etc.

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 15
Lisp
Reflexivité
§ Lisp est écrit en Lisp (en théorie)
§ Lisp est réflexif

Reflexion : deux notions


§ 1) Introspection : un programme peut examiner son état (ou ses classes)

§ notion la plus courante


§ métaclasses de Java, C#, Python, JavaScript ...
§ ex : class Class de Java

§ 2) Code auto-modifiant : un programme peut modifier son comportement


§ Lisp peut redéfinir print() ou eval() en cours d'exécution

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 16
Paradigme fonctionnel
Lisp a été source d'inspiration
§ de langages fonctionnels plus récents (Scheme, Caml, Erlang, F# ...)

§ dans le monde académique mais aussi l'industrie (Erlang = Ericson language)

§ des langages courants :


§ C++, Java, C#, Python, etc.
§ récursivité, ramasse-miette, lambdas, réflexion, etc.

Avantages / inconvénients du fonctionnel


§ plus robuste, plus facile à vérifier et à maintenir
§ du fait de l'absence d'états / d'effets de bord

§ généralement moins performant que l'impératif

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 17
Paradigme logique
Programmation logique
§ issue de la démonstration automatique
§ repose sur :
§ une base de faits
§ une base de règles logiques
§ un moteur d'inférence
§ forme de programmation déclarative

Prolog
§ Colmerauer, années 1970, Marseille
§ basé sur les clauses de Horn

Clause Prolog :

signifie :
(clause de Horn)

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 18
Prolog
atomes terme composé
Faits : variables

Règles :

Buts (queries) :

tester chercher

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 19
Prolog
Méthode de résolution SLDNF
(Selection, Linear, Definite, Negation as failure)

§ Unification
g( f(X, Y), Z, 2, U) et g( f(1, 3), Y, T, V)
§ trouver les valeurs pour que
deux termes soient identiques => X = 1, Y = Z = 3, T = 2, U = V

§ Résolution d'un but p(a,b) avec une clause p(x,y) :- q1(...), ..., qn(...).
§ unifier p(a,b) avec p(x,y)
§ si succès, résoudre q1(...), etc. but : parent(X, camille)
dans l'environnement résultant
§ et ainsi de suite, récursivement

§ Négation par l'échec

§ ce qui n'est pas vrai est faux

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 20
Prolog
En pratique
§ la combinatoire sous-jacente peut rendre le temps excessif

§ => opérateur de cut qui détruit une branche de recherche

§ l'ordre des clauses compte !


§ peut vite devenir assez complexe ...

Utilisation, évolutions
§ utilisé principalement en IA et traitement linguistique

§ diverses extensions (équations, arbres infinis, contraintes, etc.)

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 21
Paradigme déclaratif
Principe
§ on décrit le "quoi" plutôt que le "comment"

§ paradigme "transversal" (combiné avec d'autres)

Exemples
§ programmation logique ou par contraintes
§ ex Prolog : base de faits et de règles

§ programmation fonctionnelle pure (sans boucles ni affectations)


§ ex Lisp : évaluation de fonctions / formules

§ langages descriptifs
§ ex HTML : décrit une page Web (pas comment la construire)
§ contre-exemple : programme Javascript / DOM qui crée une page Web

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 22
Paradigme objet
Historique
§ origine : Smalltalk, programmation structurée

§ fort développement dans les années 80


§ devient dominant dans les années 90
§ ex : C++, Eiffel, Java, C#, Python, Swift ...

Principe
§ modélise des interactions entre des entités
appelées objets

§ les objets sont des instances des classes

— exception : langages de prototypes :


§ pas de classes mais des objets
qui servent de modèles
§ ex : Javascript (initialement)

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 23
Paradigme objet
Point de vue
§ modèle "social" d'interaction entre acteurs

STP envoie moi


le rapport

Alice (manager)
§ ne fait pas le rapport (ce n'est pas son rôle)
§ ne "farfouille" pas dans les affaires de Bob !

Bob (ingé thermique)


§ est responsable du rapport thermique (c'est sa spécialité)

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 24
Paradigme objet
L'orienté objet c'est pareil !

bob.performReport()

L'objet Alice
§ ne fait pas le rapport => envoie un message
§ ne "farfouille" pas => les données de Bob sont privées

L'objet Bob
§ est responsable du rapport => décide des actions à exécuter

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 25
Paradigme objet
L'orienté objet c'est pareil !

bob.performReport()

principes de l'OO
L'objet Alice qu'on verra plus loin

§ ne fait pas le rapport => envoie un message appel de méthode

§ ne "farfouille" pas => les données de Bob sont privées attributs


encapsulation
droits d'accès
L'objet Bob
encapsulation
§ est responsable => décide des actions à exécuter abstraction

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 26
Paradigme objet
Polymorphisme d'héritage

bob.performReport()

mallory.performReport()

Même message, effet différent !


§ Bob = expert thermique
=> fait le rapport thermique

§ Mallory = expert électricité


=> fait le rapport électrique

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 27
Paradigme objet
Polymorphisme d'héritage classe Employé

classe Ingénieur
performReport()

classe IngeThermique classe IngeElectrique


performReport() performReport()

Polymorphisme: même message, effet différent


§ Bob = instance de IngeThermique => performReport() fait le rapport thermique

§ Mallory = instance de IngeElectrique => performReport() fait le rapport électrique

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 28
Compléments, outils

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 29
Types
Type
§ Définit ce qu'une variable peut faire

Typage dynamique
§ type déterminé à l'exécution
§ il peut changer Python affiche toto

Typage statique
int i = 1; Java, C++
§ type déterminé à la compilation
i = "toto"; ne compile pas !
§ il peut ne peut pas changer

Inférence de type
a = 1: Python
§ type déterminé automatiquement
auto i = 1; C++
§ dynamiquement (Python) ou statiquement (C++, Java) var i = 1; Java

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 30
Typage dynamique vs. statique
Avantages / inconvénients
§ typage dynamique : plus pratique, facilite l'écriture

§ typage statique : moins d'erreurs à l'exécution, moins de déboguage

=> c'est à la fois un des principaux avantages et inconvénients de Python !

Python

ne détecte pas d'erreur et pourtant ...

OK

Erreur à l'exécution !

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 31
Polymorphisme
Polymorphisme = plusieurs formes
§ même interface pour différents types

Polymorphisme d'héritage
§ la même méthode a un effet différent suivant la sous-classe (cf. prédédemment)
=> abstraction, spécialisation

§ souvent appelé "polymorphisme" (sans préciser "d'héritage")

Polymorphisme paramétré
§ les types sont des paramètres d'autres types
§ ex : Generics de Java, Templates de C++

var table = new ArrayList<String>(); Generics Java

auto table = new vector<string>(); Templates C++

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 32
Interprétation vs compilation

Code interprété
§ décodé et exécuté au fil de l'eau
=> pratique (résultat visible immédiatement)
=> performance —
interpréteur Python
§ Python (en apparence)

Code compilé
§ traduit en un éxécutable par un compilateur
§ éxécutable = code machine
§ propre à un type de machine
=> non portable
=> performance +++
§ C, C++

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 33
Interprétation vs compilation

Bytecode
§ Approche mixte :
§ 1) le programme est compilé en bytecode
§ 2) le bytecode est interprété par une machine virtuelle
=> portable
=> performance +
§ Java + JVM (Java Virtual Machine)
§ Python (en réalité)

Compilation JIT (juste-à-temps)


§ une partie du bytecode est compilé en code machine pendant l'exécution
=> performance ++
§ Java, JavaScript

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 34
Compilation séparée
myprog.cpp Car.cpp Truck.cpp
#include "Car.h" #include "Car.h" #include "Truck.h"
#include "Truck.h"
void Car::start() { void Truck::start(){
int main() { .... ....
.... } }

Compilation
myprog.o Car.o Truck.o Bibliothèques

binaires de
Editions de liens fonctions compilées

exécutable

§ les fichiers sources sont compilés indépendamment

§ l'éditeur de liens (linker) :


§ resout les symboles des fichiers générés
§ les lie aux bibliothèques
§ génère un exécutable

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 35
Librairies statiques et dynamiques
myprog.cpp Car.cpp Truck.cpp
#include "Car.h" #include "Car.h" #include "Truck.h"
#include "Truck.h"
void Car::start() { void Truck::start(){
int main() { .... ....
.... } }

Compilation
myprog.o Car.o Truck.o Bibliothèques

binaires de
Editions de liens fonctions compilées

exécutable

§ Bibliothèques statiques
§ leur code binaire est inclus dans l'exécutable

§ Bibliothèques dynamiques
§ les liens sont faits à l'exécution
§ avantage : programmes (beaucoup) moins gros et plus performants

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 36
Performance
Critères
§ 1. temps d'exécution

§ 2. consommation énergétique

§ 3. occupation mémoire

§ 4. (éventuellement) temps de compilation

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 37
Performance

Ranking Programming
Languages
by Energy Efficiency
Rui Pereiraa et al.
in Science of Computer
Programming, Elsevier

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 38
Performance
Conséquences
§ ne pas négliger l'impact énergétique (et le CO2 induit !)

§ utiliser / combiner au mieux les langages


§ ex : du Python qui appelle des routines C/C++

§ optimiser l'exécutable
§ cf. mode "Debug" vs. "Release"

§ optimiser le code source


o jamais "au juger" => inefficace et source de bugs
o utiliser des outils de profilage

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 39
Optimiser l'exécutable
Mode développement (Debug) § les options dépendent
des compilateurs
§ exécutable non optimisé
§ les modes des IDEs
§ options de compilation (g++) : affectent ces options
§ -g : pour utiliser un débogueur

Mode déploiement (Release)


§ exécutable optimisé
§ options :
§ -O2 : optimisé en vitesse
void foo(int i) {
§ -O4 / -Ofast : super-optimisé (parfois faux!) assert(i > 0);
§ -Os / -Oz : optimisé en taille
#ifdef XYZ
.....
Notes #endif
§ -DXYZ : pour tests / messages de mise au point }

§ -DNDEBUG : ignore assert()

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 40
Optimiser le code
Profileurs
§ affichent le temps passé dans chaque fonction : indispensables pour optimiser !

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 41
Deboguage

Debogueurs
§ exécution pas à pas

§ points d'arrêt

§ contexte en cas
de plantage

Notes
§ compiler avec option –g (ou équivalent)
§ exécutable plus gros !

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 42
Deboguage
Analyseurs statiques
§ détectent des erreurs formelles de programmation ou de conception

Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11 43
Popularité

Sept
2024

https://www.tiobe.com/tiobe-index/ 44

Vous aimerez peut-être aussi