Beruflich Dokumente
Kultur Dokumente
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
L'assembleur PASCAL
C
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é
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
10
Les types de programmation (5)
Programmation Structurée Programmation par Objets
11
Langage de programmation
Comment rendre des instructions
« sophistiquées » (de l'humain)
compréhensibles pour l'ordinateur
qui doit les exécuter ?
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é
Assembleur
Compilateur Editeur de liens
Chargeur
0x8048470 push %ebp
0x8048471 movl %esp, %ebp
0x8048473 pushl $0x80484dc
0x8048478 call 0x80483bc <printf>
0x8048480 addl $0x4, %esp
0x8048481 leave
0x8048481 ret
$ 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 push %ebp
0x8048471 movl %esp, %ebp
0x8048473 pushl $0x80484dc
0x8048478 call 0x80483bc <printf>
0x8048480 addl $0x4, %esp
0x8048481 leave
0x8048481 ret
$ 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 1. position := initiale + vitesse * 60
• Analyse syntaxique 2. :=
position +
• Analyse sémantique initiale *
• Génération de code vitesse 60
3. empiler adresse de position
• Optimisation 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