Telechargé par Tenshi Kuro

Paradigmes des langues de programmation part 1

publicité
1
Paradigmes des
langages de
programmation :
SUPPORT DE COURS
Introduction

(langages de programmation L.P)
Langage ? (Déf. Larousse)

Capacité, observée chez tous les hommes, d'exprimer leur pensée et
de communiquer au moyen d'un système de signes vocaux et
éventuellement graphiques (la langue).

Tout système structuré de signes non verbaux remplissant une fonction
de communication : Langage gestuel. Langage animal.

Ensemble de caractères, de symboles et de règles qui permettent de
les assembler, utilisé pour donner des instructions à un ordinateur.
2
Introduction

(langages de programmation L.P)
Langage de programmation ? (quelques déf. possibles)

Déf.1 : Notation systématique avec laquelle on peut décrire un
d’étapes
nécessaires
à
une
machine,
pour
ensemble
l’accomplissement d’une tâche donnée (résolution d’un problème)

Déf.2 : Formalisme artificiel permettant d’exprimer des algorithmes, tout
en étant un langage pouvant être étudié en utilisant des
outils/concepts propres à la linguistique

Déf.3 : Notation pour la description d’algorithmes et structures de
données pouvant être implémentée sur ordinateur
3
Introduction

(langages de programmation L.P)
Langage de programmation ? (différents aspects, niveaux de
description)
1.
Syntaxe (ou grammaire)
2.
Sémantique
3.
Pragmatique (aspect pratique)
4
Introduction

(langages de programmation L.P)
Langage de programmation ? (différents aspects, niveaux de
description)
1.
Syntaxe (ou grammaire) :

« Forme du L.P »,

On définit d’abord les symboles du langage (alphabet), puis les mots ou
unités lexicales du langage (séquence de symboles de l’alphabet), puis les
phrases du langage (séquence de mots du langage)

Répond à la question ‘cette phrase du langage est elle correcte ? ’
5
Introduction

(langages de programmation L.P)
Langage de programmation ? (différents aspects, niveaux de
description)
2.
Sémantique :

« Sens du L.P» ,

Répond à la question ‘quel est le sens (signification) d’une phrase
correcte du langage?’

Mets en relation par exemple, une phrase correcte du langage et une
fonction de calcul mathématique
6
Introduction

(langages de programmation L.P)
Langage de programmation ? (différents aspects, niveaux de description)
3.
Pragmatique (aspect pratique) :


« implémentation du L.P »
Répond à la question « comment le sens d’une phrase correcte est il traduit en
calcul/traitement ? »

La traduction du sens d’une phrase correcte en traitement peut varier dans le
temps et n’est pas définitivement fixée lors de la définition du L.P

Le choix entre différents modes de passage de paramètres aux fonctions ou bien
l’utilisation de différents types de boucles itératives sont des aspects pratiques du
L.P (diff. Trad. pour un même sens)
7
Introduction

(langages de programmation L.P)
Pourquoi étudier les L.P?
1.
Augmente la capacité d’expression d’idées (plus complexes); en ayant
des connaissances sur des concepts appartenant à d’autres L.P, le
programmeur n’est plus limité aux caractéristiques d’un seul L.P
2.
Augmente les possibilités de choix d’un langage approprié pour un
problème donné
3.
Augmente la capacité d’apprentissage de nouveaux L.P
8
Introduction

(langages de programmation L.P)
Pourquoi étudier les L.P?
4.
Améliore la compréhension des différentes implémentations de
concepts dans les différents L.P, permettant une meilleur utilisation de
ceux-ci
5.
Meilleurs utilisation/maîtrise des L.P supposés déjà connus
6.
Permet de faciliter la création de nouveaux L.P et contribue de façon
générale, au développement du domaine informatique
9
Introduction

(langages de programmation L.P)
Domaines des applications informatiques et leurs L.P associés



Applications scientifiques (FORTRAN & ALGOL60)
o
Priorité pour l’efficacité du programme
o
Structures de données peu complexes
Applications du monde des affaires (COBOL)
o
Facilité de création de rapports riches et détaillés
o
Facilité de manipulation des nombres décimaux et données de type caractères
Intelligence artificielle (LISP & PROLOG)
o
Manipulation de données symboliques et non pas numériques
o
Listes chainées à la place de tableaux
10
Introduction

(langages de programmation L.P)
Domaines des applications informatiques et leurs LP associés


Programmation système (PL/S, EXTENDED ALGOL, C)
o
Efficacité d’exécution (temps/ressources)
o
Inclure des possibilité d’accès de bas niveau à des dispositifs externes
Applications WEB (JAVA, PHP, JAVASCRIPT)
o
Langage de balisage (HTML qui n’est pas un L.P)
o
Langages de scripts, embarqué dans le document HTML par exemple
(PHP,JS)
11
Introduction

(langages de programmation L.P)
Critères d’évaluation des L.P :
Un Besoin d’évaluation des L.P se fait ressentir à cause de leurs grand
nombre
Trois critères peuvent être considérer :
1.
Lisibilité
2.
Facilité d’écriture
3.
Fiabilité
12
Introduction

1.
(langages de programmation L.P)
Critères d’évaluation des L.P :
Lisibilité
facilité avec laquelle un programme écris dans un L.P donné est lu et
compris, parmi les caractéristiques qui affecte ce critère, on peut citer :

Simplicité générale du L.P (ex: il est préférable d’avoir un nombre réduit
de concepts/composants de base)

Orthogonalité : possibilité de combiner différents composants de base
du langage de plusieurs façon, chaque combinaison ayant un sens

Type de données : disponibilité de types et structures de données et/ou
les moyens de leurs définition/création
(type booléen : True plus lisible
que 1)
13
Introduction

1.
(langages de programmation L.P)
Critères d’évaluation des L.P :
Facilité d’écriture (1)
facilité avec laquelle un programme est écris dans un L.P pour un type de
problème donné, parmi les caractéristiques qui affecte ce critère, on peut
citer :

Simplicité du L.P : trop de concepts et de composants dans un L.P peut
mener à la surutilisation (ou mal utilisation) d’un sous ensemble de
composants au détriment d’un autre

Orthogonalité : trop de combinaison possibles entres composants du
langage peut empêcher la détection d’erreurs
14
Introduction

1.
(langages de programmation L.P)
Critères d’évaluation des L.P :
Facilité d’écriture (2)


Possibilités d’abstractions :

Capacité à définir des structures de données complexes tout en ignorant les
détails de leurs implémentations lors de leurs utilisation

2 types d’abstraction peuvent être supporter dans un L.P : données /
processus

Exemple d’Abstraction de processus : sous programme

Exemple d’Abstraction de données : arbre (classe avec données et
pointeurs)
Expressivité : beaucoup de traitement avec peu de code, exemple : i++
au lieu de i = i + 1
15
Introduction

1.
(langages de programmation L.P)
Critères d’évaluation des L.P :
fiabilité
On dit qu’un programme est fiable s’il accomplis ses tâches sous n’importe
quelles conditions, les points suivants affectent la fiabilité des programmes d’un
L.P

Vérification de type : détecter les erreurs de type dans un programme, de
préférence lors de la compilation

Gestion des exceptions : capacité du programme à intercepter les erreurs à
l’exécution, prendre les mesures correctives nécessaire, puis à continuer
l’exécution ou le traitement

Aliasing : plusieurs noms (références) pour une même cellule mémoire, peut
conduire à des erreurs (caractéristique dangereuse dans un L.P)

Lisibilité et facilité d’écriture : plus il est facile d’écrire un programme, plus il
aura de chance d’être correcte; un programme difficile à lire, sera difficile à
modifier (maintenance)
16
Introduction

(langages de programmation L.P)
Critères d’évaluation des L.P :
Autres critères :


Coût d’un L.P:

exécution et compilation des programmes

Création, tests et utilisation des programmes,

Maintenance des programmes
Portabilité :
indépendance des programmes écris dans un L.P des
architectures matérielles (machines)
17
Introduction

(langages de programmation L.P)
Méthodes d’implémentation des L.P (1) :
Les L.P peuvent êtres implémenter par l’une des trois méthodes
suivantes :
1.
Compilation
2.
Interprétation pure
3.
Système hybride
18
Introduction

1.
(langages de programmation L.P)
Méthodes d’implémentation
des L.P (2) :
Compilation :

Le
programme
(code
source) est traduit en code
machine par le compilateur,
et est ensuite directement
exécuté par l’ordinateur

produit des programmes
rapides à l’exécution une
fois la compilation terminée
19
Introduction

2.
(langages de programmation L.P)
Méthodes d’implémentation des
L.P (3)
Interprétation pure :

Un interpréteur est requis durant
l’exécution d’un programme, il lit
les instructions du programme
source plus ou moins une à la fois,
et les exécute progressivement

L’interpréteur implémente une
machine virtuelle, qui a pour
‘langage machine’, le langage
de programmation en question
20
Introduction

3.
Méthodes
des L.P (4)
(langages de programmation L.P)
d’implémentation
Implémentation hybride:

Code source compilé en
code intermédiaire, qui est
ensuite interprété par un
interpréteur

L.P
indépendant
de
l’architecture de la machine,
un interpréteur (MV) pour
chaque type de machine
21
Introduction
(langages de programmation L.P)
Classification des L.P :
1.
2.
Langages déclaratifs

Programmation fonctionnelle

Programmation logique
Langages impératifs

Programmation procédurale

Programmation orientée objets

Programmation concurrente
22
Introduction
(langages de programmation L.P)
Historique (1) :

PLANKALKÜL

Langage développé en 1945 par Zuse en Allemagne mais jamais
implémenté, travaux publiés en 1972

Zuse a écris des algorithmes dans son langage pour une large variété
de problèmes,

Langage contenant des structures de données avancées telles les
enregistrements (pouvant être imbriqués ) et les tableaux

Les travaux de Zuse incluaient des programmes et des algorithmes
d’une grande complexité :
o
tri de tableau de nombres
o
analyse de la syntaxe de formules logiques (avec parenthèses)
o
Jeu d’Echecs
23
Introduction
(langages de programmation L.P)
Historique (2) :


langage machine

Langage bas niveau utilisé pour programmer les premiers ordinateurs

les opérations et calculs à réaliser sont représentés en binaire

Instructions élémentaires (addition, charger une valeur dans un registre)

Code très difficile à écrire/lire/maintenir/modifier

Considéré comme langage de première génération (1GL)
Nécessité de développer un langage qui se rapproche plus du
langage naturel de l’utilisateur de la machine
24
Introduction
(langages de programmation L.P)
Historique (3) :

langage d’assemblage (assembleurs)

Représentation symbolique du langage machine, plus proche du
langage naturel

un programme appelé ‘assembleur’ traduit du code écrit en langage
d’assemblage vers du code en langage machine

Chaque modèle de machine a son propre langage d’assemblage, ce
qui réduit la portabilité des programmes en assembleurs

Langage bas niveau de deuxième génération (2GL)
25
Introduction
(langages de programmation L.P)
Historique (4) :

Pseudocodes (1)

Apparus dans un contexte où les programmes étaient écris en langage
machine (14 représente un ADD par exemple) sur des ordinateurs lents,
coûteux, peu fiables, avec peu de mémoire en plus d’être difficile à
programmer

Short Code :
o
Langage développé par John Mauchly en 1949 pour l’ordinateur BINAC
initialement, puis porté sur l’ordinateur UNIVAC 1
o
Basé sur des valeurs d’une suite de paire de bytes (byte de 6bit) représentant
des expressions mathématiques à évaluer
o
Exemple : l’expression X0 = X1 + X2 est codée en : 00 X0 03 X1 07 X2
o
Langage interprété et non pas traduit en un code machine
26
Introduction
(langages de programmation L.P)
Historique (5) :

Pseudocodes (2)


Speedcoding :
o
Développé par Backus pour l’IBM 701
o
Langage interprété
o
Etend le langage machine afin de supporter des opérations en virgule
flottante, inclut également les instructions de saut (C ou I) entre autres
Compilateurs UNIVAC :
o
Une série de compilateurs nommés A-0, A-1 et A-2 développés par Grace
Hopper et son équipe entre 1951 et 1953
o
Étend du pseudo code en code machine (même principe d’une macro)
27
Introduction
(langages de programmation L.P)
Historique (années 50 et 60)

Apparition des MAINFRAMES :

(ordinateur central), ordinateurs à usage général, très coûteux et de
grande taille (remplis une chambre), utilisé par du personnel spécialisé

Méthode de Traitement en Batch (par lots), programmes exécutés
séquentiellement en ayant toutes les ressources de la machine à
disposition

Les premiers L.P de haut niveau ont été développé pour ce genre de
système, L.P produisant des programmes qui ne permettent pas
beaucoup d’interaction avec la machine et qui sont exécuté du début
à la fin sans intervention externe
28
Introduction
(langages de programmation L.P)
Historique (années 50 et 60)

FORTRAN (FORmula TRANslation)

Peut être considéré comme le premier L.P impératif de haut niveau

Développé par John Backus et son équipe en 1957 à IBM

Destiné à des applications de type scientifique/numérique

Conçu pour produire des programme facile à écrire et performant à
l’exécution (IBM 704 comme ordinateur de référence)

Premier L.P
symboliques

Plusieurs ajouts au fil des versions (if then else, gestion dynamique de la
mémoire…etc.)

Types de base limités (types numériques, booléen, file, string, tableaux)
à
permettre
l’utilisation
d’expressions
arithmétiques
29
Introduction
(langages de programmation L.P)
Historique (années 50 et 60)

ALGOL (ALGOrithmic Language)

Plus qu’un langage, il s’agit d’une famille de langages impératifs, le premier,
ALGOL 58, a été développé en 1956 par un comité dirigé par Peter Naur

L.P prédominant dans le domaine académique mais pas de vrai succès
commercial

L.P universel, et non pas orienté vers un type d’application, se voulant
indépendant de la machine

L.P qui a grandement influencé les L.P modernes, il a apporté entre autres :


Structuration du programme en blocs

Passage de paramètres par nom

Récursivité des procédures

Tableaux dynamique

If then else, for et while (ALGOL60), case (ALGOL68)
ALGOL 60 (1960) est la version la plus importante
30
Introduction
(langages de programmation L.P)
Historique (années 50 et 60)

LISP (LISt Processor)

Développé par une équipe du MIT (Massachusetts Institute of
Technology) dirigée par John McCarthy en 1960

Orienté vers des applications non-numérique (traduction automatique
de textes), permet la manipulation d’expressions symboliques (des listes
composées d’atomes), utilisé dans le domaine de l’intelligence
artificielle

Langage fonctionnel et interprété en général (interactif), dont les
programmes sont des séquences d’expressions qui sont évalués, ou des
fonctions appliquées à des arguments
31
Introduction
(langages de programmation L.P)
Historique (années 50 et 60)

COBOL (COmmon Buisness Oriented Language)

Orienté applications commerciales et développé avec pour objectif
une syntaxe aussi proche que possible de l’anglais

Langage développé initialement par une équipe dirigée par Grace
Hopper au département de la défense US, standardisé en 1968,
toutefois, COBOL n’a eu que peu d’influence sur le développement des
L.P

Programmes longs et peu efficaces

Parmi ses contributions :

DEFINE (pour les macros)

Structures de données hiérarchiques (enregistrements)
32
Introduction
(langages de programmation L.P)
Historique (années 50 et 60)

SIMULA

Extension du L.P ALGOL, développé depuis 1962 au centre de calcul
norvégien par Nygaard et Dahl,

Destiné aux applications de simulation à événements discrets (situations
avec files d’attentes par exemple)

Sa version la plus importante, SIMULA67 a introduit pour la première fois,
les concepts de classes et d’objets entre autres, considéré comme le
premier L.P orienté objets

SIMULA67 ajoute différents mécanismes à ALGOL60 :

Pointeurs

Co-routines (procédures concurrentes, proche du concept de thread)

Classes et objets
33
Introduction
(langages de programmation L.P)
Historique (années 70)

Microprocesseurs et mini ordinateurs

Machines de Petite taille par rapport aux Mainframes

Systèmes plus interactifs avec entrée/sorties plus complexes

Temps de réponse d’un programme est devenu important, et
l’utilisation de timeouts
34
Introduction
(langages de programmation L.P)
Historique (années 70)

C

Développé par Dennis Ritchie et Ken Thompson dans les laboratoires
BELL en 1972

L.P Initialement Orienté applications systèmes pour UNIX, très vite
devenu L.P universel

Grandement inspiré d’ALGOL68,

permet un accès au fonctionnalités bas niveau de la machine, et la
programmation de systèmes plus interactifs

Syntaxe compacte et compilateur générant du code machine efficace
35
Introduction
(langages de programmation L.P)
Historique (années 70)

Pascal

Développé en 1971 par Niklaus Wirth à partir de l’ ALGOL W, en visant
un maximum de simplicité et d’expressivité

L.P d’apprentissage le plus utilisé jusqu’à la fin des années 80

Premier L.P à introduire le concept de code intermédiaire (P-code) pour
la portabilité des programmes

Langage plus sûr, ne fournissant pas d’opérations dangereuses de
manipulation de pointeurs par exemple
36
Introduction
(langages de programmation L.P)
Historique (années 70)

PROLOG

L.P logique développé en 1972 par Pierre Roussel et Alain Colmerauer

LP interprété

Une des application de PROLOG, création d’une sorte de BDD
intelligente qui contient un ensemble de faits et de règles, utilisant des
mécanismes de déduction (logique de premier ordre) pour répondre à
des requêtes (réponse : vrai ou faux)
37
Introduction
(langages de programmation L.P)
Historique (années 80)

Apparition des PC

Micro ordinateur personnel pour le grand publique avec un O.S
interactif basé sur des fenêtres graphiques

Apparition des systèmes embarqués dans des domaines où l’erreur est
intolérable

Apparition des systèmes temps réel nécessitant des LP dédiés
38
Introduction
(langages de programmation L.P)
Historique (années 80)

C++

Première version définis par Bjarne Stroustrup en 1986 dans les
laboratoires BELL

Ajout de concepts orienté objets au langage C (classes, héritage
…etc.)

Efforts pour Maintenir une retro compatibilité avec les programmes C
39
Introduction
(langages de programmation L.P)
Historique (années 80)

ADA

Le Département américain de la défense lance une compétition entre
plusieurs groupes de développeurs (académique et industriel) pour le
développement d’un nouveau LP répondant à ses exigences

Le vainqueur, Jean Ichbiah, propose un langage basé sur PASCAL,
incluant plusieurs nouveaux composants pour la programmation temps
réel et des systèmes embarqués :
o
Concept de tâches
o
Mécanismes de synchronisation et de gestion d’erreurs (exceptions)
o
Mécanismes pour l’exécution concurrente de tâches
40
Introduction
(langages de programmation L.P)
Historique (années 90)

Internet et le WWW

Possibilité de connecter des millions de systèmes par des réseaux pour le
partage de données et de programmes

Transmission de données et accès à des informations à distance à
travers des canaux partagé par des milliers d’utilisateurs soulève des
problèmes à tous les niveaux d’un système, y compris le L.P :

Efficacité

Fiabilité

Sécurité
41
Introduction
42
(langages de programmation L.P)
Historique (années 90)

JAVA

Développé par une équipe dirigée par Jim Gosling chez SUN, première
version fonctionnelle en 1992

Les développeurs se sont basé sur C++, ajoutant/supprimant/modifiant
ses composants, résultat : L.P puissant et flexible à l’image de C++, mais
en même temps, réduit, plus simple et plus sûr/fiable

Purement orienté objet (à l’opposé de C++), un programme JAVA est
un ensemble de classes

Utilisation d’un ramasse-miettes

Utilisation d’un code intermédiaire + machine
l’interprétation de ce code sur la machine cible
virtuelle
pour
Téléchargement