Types et langages de programmation

publicité
Types et langages de
programmation
Algorithmique et Programmation
Unisciel/K.Zampieri
1
Généalogie partielle des langages
de programmation
FORTRAN
ALGOL60
LISP
COBOL
BASIC
ML
PL/1
C
SIMULA 67
PASCAL
SMALLTALK
PROLOG
ADA
C++
MODULA-2
JAVA
Plus de 4000 langages
2
Le choix d'un langage n'est pas
neutre
Y-a-t-il un langage
universel?
LISP
L'assembleur
C
PASCAL
C++
JAVA
Delphi
3
Le choix d'un langage n'est pas
neutre (2)
Un langage facilite la résolution de classes de problèmes :
• C : système d'exploitation (Unix/Linux)…
• C++ : applications de grande taille…
• JAVA, C# : applications de grande taille, web…
• LISP : prototypage, systèmes experts…
4
Paradigmes des langages évolués
(dits aussi de haut niveau)
• Désigner :
– Expliciter une entité en la nommant et en lui associant
une définition (au moins intuitive)
• Typer :
– Connaître les propriétés pertinentes d'une entité
• Paramétrer :
– Traiter un problème plus général que le problème posé
– Améliorer la résistance de la solution aux changements
– Réutiliser
5
Paradigmes des langages évolués
(dits aussi de haut niveau) (1b)
• Sérialiser :
– Construire des séquences d'actions
• Décomposer par cas :
– Découper le domaine des données initiales
• Itérer :
– Introduire un sous-problème intermédiaire paramétré
Réduire la complexité d'un problème
6
Les types de programmation
Application informatique : Mise en oeuvre des traitements
des données et des relations entre les deux.
Génération 1 : Programmation Spaghettis :
• Assembleur, Fortran I, Basic
• Logique de saut « goto ». Absence totale d'entités
autonomes et modifiables indépendamment du reste du
programme.
• Code et données étroitement imbriqués.
7
Les types de programmation (2)
Génération 2 : Programmation Structurée :
• Pascal, C, Algol, Perl, Python
• Expression séparée des données et des traitements.
• Modularité :
– Données typées. Possibilité de création de types complexes.
– Structures de contrôle remplaçant les sauts.
– Notion de sous-programmes et compilation séparée (entités
autonomes).
8
Les types de programmation (3)
Génération 3 : Programmation par Objets :
• Simula, SmallTalk, Eiffel, C++, Pascal objet, Java, C#
• Modularité qui regroupe les données et les traitements dans
une même entité appelée objet.
• Les objets peuvent être vus comme des tentatives de simuler
une situation réelle (objets « chronomètre », « voiture »). Les
objets réels ne sont ni des traitements purs, ni des données
pures mais une combinaison des deux.
9
Les types de programmation (4)
Programmation Structurée
Programmation par Objets
Équation de WIRTH
Algorithmes + SDD
= Programmes
Équation de la POO
Méthodes + Données
= Objets
Que doit faire le
programme ?
Sur quoi porte le
programme ?
10
Les types de programmation (5)
Programmation Structurée
Données
Fonctions
Hiérarchie des
fonctions
Données
Hiérarchie des
données
Programmation par Objets
Messages
Objet
Données
Hiérarchie des
objets
11
Langage de programmation
Comment rendre des instructions
« sophistiquées » (de l'humain)
compréhensibles pour l'ordinateur
qui doit les exécuter ?
Réponse : En disposant d'un programme capable de
transformer une séquence d'instructions de haut
niveau (aussi appelée code source) en une séquence
d'instructions machine (aussi appelée code objet ou
binaire).
12
Langage de programmation (2)
Traducteur : programme qui convertit un programme
quelconque écrit dans un langage source en un programme
écrit dans un langage cible.
• Assembleur : traducteur de langage objet
• Compilateur : traducteur de langage source évolué
Interpréteur : programme qui traduit puis exécute un
programme quelconque écrit dans un langage source.
Langage de programmation : instructions et données de plus
haut niveau que le traducteur est capable de traiter.
13
Langage de programmation :
résumé
Un langage de programmation est
• un moyen formel permettant de
• décrire des traitements (i.e. des tâches à effectuer) sous
• la forme de programmes (i.e. de séquences d'instructions et
de données de « haut niveau », c.à.d. compréhensibles par le
programmeur) pour lesquels il existe
• un traducteur pour en permettre
• l'exécution effective par un ordinateur.
14
Compilateur
Compilateur (ou assembleur) :
• Traduit une seule fois les programmes dans leur ensemble :
tout le programme est fourni au compilateur pour la traduction
et son résultat (code objet) peut être soumis au processeur pour
traitement.
• Un langage de programmation pour lequel un compilateur est
disponible est appelé un langage compilé.
15
Langage compilé
Compilateur
Assembleur
Editeur de liens
Chargeur
0x8048470
0x8048471
0x8048473
0x8048478
0x8048480
0x8048481
0x8048481
Programme source Programme cible
push %ebp
movl %esp, %ebp
pushl $0x80484dc
call 0x80483bc <printf>
addl $0x4, %esp
leave
ret
Code machine
$ emacs monProg.cpp
$ gcc monProg.cpp –o monProg
$ ./monProg
16
Interpréteur
Interpréteur :
• Traduit les programmes instruction par instruction et soumet
chaque instruction traduite au processeur pour exécution.
• Un langage de programmation pour lequel un interpréteur est
disponible est appelé un langage interprété.
17
Langage interprété
Interpréteur
0x8048470
0x8048471
0x8048473
0x8048478
0x8048480
0x8048481
0x8048481
Programme source
push %ebp
movl %esp, %ebp
pushl $0x80484dc
call 0x80483bc <printf>
addl $0x4, %esp
leave
ret
Code machine
$ emacs monProg.l
$ lisp monProg.l
18
Interpréteur v.s. Compilateur
Un langage interprété est adapté pour le développement rapide
et le prototypage :
• Cycle de test plus court qu'avec les langages compilés.
• Souvent possible de modifier/rectifier le programme en
cours d'exécution (test).
• Langages offrant une plus grande liberté d'écriture.
19
Interpréteur v.s. Compilateur (2)
Un langage compilé est préférable pour la réalisation
d'applications efficaces et/ou de grande envergure :
• Programme plus efficace : le compilateur peut effectuer des
optimisations plus facilement que l'interpréteur (puisqu'il
possède une visibilité globale sur le programme)
• Traduction une unique fois.
• Meilleure détection des erreurs : structuration plus
rigoureuse et typage.
• Protection de la propriété intellectuelle : la compilation
permet de diffuser les programmes sous forme binaire sans
en imposer sa diffusion sous forme lisible.
20
Interpréteur v.s. Compilateur (3)
Langages compilés, interprétés, semi-compilés :
• Certains langages (LISP par exemple) peuvent être
indifféremment interprété ou compilé ; d'autres ne sont que
compilé jamais interprété (C, C++, Pascal, ADA) ; certains
ne sont qu'interprété (Prolog).
• Certains sont semi-compilés (par exemple Java, V-Pascal)
: ils sont compilés en langage de type « assembleur »
(byte-code) puis traitée par une « machine virtuelle » qui
interprète le byte-code [l'idée sous-jacente est de rendre le
programme indépendant de la plateforme].
21
Compilation
•
•
•
•
•
Analyse lexicale
Analyse syntaxique
Analyse sémantique
Génération de code
Optimisation
1.
2.
3.
position := initiale + vitesse * 60
:=
position
+
initiale
*
vitesse
60
empiler adresse de position
empiler valeur de initiale
empiler valeur de vitesse
empiler 60
*
+
:=
22
Compilation (2)
Note : Les aspects syntaxiques (règles d'écriture des
programmes) et sémantiques (définition des instructions)
d'un langage de programmation sont spécifiés de manière
précise dans un manuel de référence.
• Compilation : analyse syntaxique et traduction en binaire.
• Édition des liens : production du fichier exécutable.
23
Téléchargement