Types et langages de programmation Fichier

publicité
1
TYPES ET LANGAGES
DE PROGRAMMATION
Algorithmique et Programmation
Unisciel/K.Zampieri
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
3
Le choix d'un langage n'est pas neutre
Y-a-t-il un langage
universel?
LISP
L'assembleur
C
PASCAL
C++
JAVA
Delphi
4
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…
5
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
6
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
7
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.
8
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).
9
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.
10
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 ?
11
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
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
13
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.
14
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.
15
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é.
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
17
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é.
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
19
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.
20
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.
21
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, VPascal) : 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].
22
Compilation
• Analyse lexicale
• Analyse syntaxique
• Analyse sémantique
1.
2.
• Génération de code
• Optimisation
3.
position := initiale + vitesse *
60
:=
position
+
initiale
*
vitesse
60
empiler adresse de position
empiler valeur de initiale
empiler valeur de vitesse
empiler 60
*
+
:=
23
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.
Téléchargement