IF1 2009-2010 Introduction lÕinfor matique et la prog ...picantin//IF1/amphi2-2009x4.pdf" lecar act...
Transcript of IF1 2009-2010 Introduction lÕinfor matique et la prog ...picantin//IF1/amphi2-2009x4.pdf" lecar act...
Introduction à l’informatique et la programmationIF1 2009-2010
Matthieu Picantin
LIAFA UMR 7089CNRS & Université Paris 7 Denis Diderot
08/10/2009
1 / 20
Algorithmes et modèles Machine de Turing
! machine abstraite inventée en 1936par Alan Turing (1912-1954), pour servir demodèle idéal lors d’un calcul mathématique
! toutes les machines modernes sont conçusselon son principe de fonctionnement
Composition d’une machine de Turing abstraite
! une mémoire infinie représentée par un ruban divisé en cases,chacune pouvant recevoir un symbole de l’alphabet défini pour la machine
! une tête de lecture/écriture capable de parcourir le ruban dans les deux sens! un ensemble fini d’états (dont un état initial et des états accepteurs)! une fonction de transition qui, pour chaque état et chaque symbole lu,
précise" l’état suivant" le caractère à écrire sur le ruban (en remplacement de celui lu)" le sens du prochain déplacement de la tête
0 : 1 , R
0 : 2 , L
1 : 2 , L
2 : 1 , L
1 : 2 , R
2 : 0 , R
2 / 20
Algorithmes et modèles Jeu de la Vie de Conway
?
! automate cellulaire imaginé en 1970par John Horton Conway (1937-)
! modèle composé d’une grille dont les cellules" sont à chaque instant soit vivantes, soit mortes" évoluent selon des règles pré-établies très simples# voisins 0 1 2 3 4 5 6 7 8
naissance !survie ! !
Exemples d’application
! simulation du comportement d’un gaz! étude des matériaux magnétiques selon le modèle d’Ising! alternative aux équations différentielles! conception de machines massivement parallèles! simulation et étude du développement urbain! simulation des processus de cristallisation! simulation de la propagation des feux de forêt
http://golly.sourceforge.net/
3 / 20
Langages de programmation Introduction
Les fonctions du langage
! l’outil d’écriture des programmes" par des hommes ou des programmes" pour la machine ou les autres hommes" à différents niveaux d’abstraction
! le support d’interaction avec la pensée" les langages induisent des styles distincts
impératif, fonctionnel, logique, temporel, etc...
! le support de guerres de religions" rares sont ceux qui aiment deux styles" et ceux qui font abstraction du NIH (Not Invented Here)
4 / 20
Langages de programmation Niveaux d’abstraction
Le langage machine! langage de plus bas niveau (initialement le seul)! programmes directement exécutables par la
machine" programmation fastidieuse" programmes non portables
Le calcul de la factorielle, en code machine Intel10111000 00000001 00000000 00000000 0000000010111010 00000010 00000000 00000000 0000000000111001 1101101001111111 0000011000001111 10101111 110000100100001011101011 1111011011000011
5 / 20
Langages de programmation Niveaux d’abstraction
Le langage machine! langage de plus bas niveau (initialement le seul)! programmes directement exécutables par la machine
" programmation fastidieuse" programmes non portables
Gra
ceH
oppe
r
6 / 20
Langages de programmation Niveaux d’abstraction
Le langage assembleur : représentation textuelle du langagemachine
! utilisation de noms mnémoniques pour les instructions, les registres, etc! utilisation de noms symboliques pour désigner les points dans le
programme, les cases de la mémoire, etc! possibilité de mettre des commentaires sur le code
Le calcul de la factorielle, en langage assembleur Intel;; Calcul de la fonction factorielle;; En entree: l’argument N est dans le registre EBX;; En sortie: la factorielle de N est dans le registre EAX
Factorielle:mov eax, 1 ;; resultat initial = 1mov edx, 2 ;; indice de boucle = 2
L1: cmp edx, ebx ;; tant que indice <= N ...jg L2imul eax, edx ;; multiplier le resultat par l’indiceinc edx ;; incrementer l’indicejmp L1 ;; fin tant que
L2: ret ;; fin de la fonction Factorielle
7 / 20
Langages de programmation Niveaux d’abstraction
Le langage assembleur : représentation textuelle du langagemachine
! utilisation de noms mnémoniques pour les instructions, les registres, etc! utilisation de noms symboliques pour désigner les points dans le
programme, les cases de la mémoire, etc! possibilité de mettre des commentaires sur le code
Compilation du langage assembleur
! calcul des adresses mémoire correspondant aux noms symboliques! encodage sous forme de nombres des mnémoniques d’instructions
et de registres! production d’un listing, d’un index de références croisées, etc,
pour faciliter la relecture du code
Factorielle: mov eax, 1mov edx, 2L1: cmp edx, ebxjg L2 imul eax, edxinc edxjmp L1L2: ret
10111000000000010000000000000000000000001011101000000010000000000000000000000000 0011100111011010 0111111100000110 00001111101011111100001001000010 1110101111110110 11000011
assemblage
désassemblage8 / 20
Langages de programmation Niveaux d’abstraction
Évaluation de formules mathématiques
x1, x2 =−b ±
√b2 − 4ac
2a
FORTRAN (FORmula TRANslator)D = SQRT(B*B - 4*A*C)X1 = (-B + D) / (2*A)X2 = (-B - D) / (2*A)
Assembleurmul t1, b, bmul t2, a, cmul t2, t2, 4sub t1, t1, t2sqrt d, t1mul t3, a, 2sub x1, d, bdiv x1, x1, t3neg x2, bsub x2, x2, ddiv x2, x2, t3
Les langages évolués! plus faciles à comprendre par l’humain! indépendants des machines! les opérations de compilation et/ou interprétation
en permettent l’exécution par une machine
9 / 20
Langages de programmation Compilation et/ou interprétation
machinevirtuelle
10111000000000010000000000000000000000001011101000000010000000000000000000000000 0011100111011010 0111111100000110 00001111101011111100001001000010 1110101111110110 11000011
int fact(int n){ int r=1,i; for(i=2;i<=n;i++) r=r*i; return r; }
Factorielle.c
static int fact(int n){ int r=1,i; for(i=2;i<=n;i++) r=r*i; return r; }
Factorielle.java
Factorielle.py
def factorielle(x): if x == 0: return 1 else: return x * factorielle(x-1)
a.out
10111000000000010000000000000000000000001011101000000010000000000000000000000000 0011100111011010 0111111100000110 00001111101011111100001001000010 1110101111110110 11000011
a.out
Factorielle.class
§!!!:,:§è(,:(§èè;§(è!41§(§è(:§;,è;'(=§'=(è''';;'(§(:::;,"'0988""
compilateur
compilateur
machinevirtuelle
javac
gcc
jvm
bibliothèques
fichier bytecodefichier source
fichier source
fichier source
python
fichier exécutable
exécution
interprétation
compilation
10 / 20
Langages de programmation Petit historique19601954 1965 1970 589108915791 59910991 2000 20022001 2003 2004
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf
11 / 20
Langages de programmation Petit historique
http://www.digibarn.com/collections/posters/tongues/
12 / 20
Langages de programmation Petit historique
50 60 70 80 90 00 10
Fortran
BasicForth PostScript
sh Perl Php
VisualBasicPL1
Algol Pascal
ModulaCSP
Ada
C++CCPL
Simula
LISP
SmallTalk
Scheme
MLISWIM
Prolog Prolog 4
Caml
Haskell
Eiffel
Java
C#
OCaml
13 / 20
Langages de programmation Petit historique
Pourquoi tant de langages ?
! beaucoup d’aspects à traiter ensemble" données, actions = programming in the small" architecture = programming in the large
! beaucoup d’innovations successives" fonctionnel, polymorphisme, modules, objets, parallélisme, etc
! énormément de compromis possibles" plusieurs grandes classes et beaucoup de dialectes
Raisons du succès (dans le temps)
1 S’adresser à un large public C (associé à la popularité d’Unix)2 Faire le job Cobol (conçu pour l’écriture de rapports)3 Offrir une nouvelle fonctionnalité Java (écrit une fois, exécuté partout)4 Combler un créneau Mathematica (approprié aux calculs complexes)5 Offrir un minimum d’élégance Icon (doté d’une syntaxe familière)6 Fédérer autour d’un leader charismatique Perl (élaboré par Larry Wall)
14 / 20
Langages de programmation Petit historique
Les composants d’un langage! des principes de calcul
" impératif, fonctionnel, logique, temporel, etc
! des principes d’architecture" modularité, héritage, polymorphisme, etc
! une syntaxe et un style syntaxique" détermine les programmes bien construits
! un systèmes de types" évite d’additionner des choux et des carottes
! une sémantique plus ou moins formelle" définit le sens des programmes
! un outillage" compilateurs, débogueurs, manuels, exemples,
librairies, interfaces avec d’autres langages! une communauté d’utilisateurs
15 / 20
Langages de programmation Styles de programmation
La programmation impérative
! basé sur l’effet de bord permettant de remplacer en mémoire une valeur par uneautre (opération appelée affectation)
! utilisation de noms symboliques pour les adresses! un programme est une suite de traitements exécutés séquentiellement! possibilité de
" réaliser des tests" itérer des traitements" modulariser le traitement (sous-programmes, procédures, fonctions)
Définition itérative de factorielle (en C)int fact (int n) {// factorielle de nint r = 1, i;for (i = 2; i <= n; i++)r = r * i;
return r;}
16 / 20
Langages de programmation Styles de programmation
Longueur & hauteur dans le problème de Collatz (en Java)static int[] collatz (int n) {// longueur et hauteurint[] t = new int[2]; t[0] = 0; t[1] = n;while (n>1) {if (n % 2 == 0) n = n / 2;else n = 3 * n + 1;t[0]++; //maj longueurif (n > t[1]) t[1] = n; //maj hauteur}
return t;}
17 / 20
Langages de programmation Styles de programmation
La programmation fonctionnelle
! utilise l’évaluation de fonctions comme opération de base! se fonde sur la théorie du λ-calcul (branche de la logique mathématique étudiant
la notion générale de fonction indépendamment de ses domaines)! privilégie la notion de calcul et interdit ou limite les effets de bords! s’appuie sur la notion d’environnement (ensemble de couples [nom,valeur]),
dans lequel une paire ne peut pas être modifiée une fois créée
Définition récursive de factorielle (en Caml)let rec fact n =if n < 2 then 1 else fact(n - 1) * n ;;
La fonction d’Ackerman-Péter (en Python)def ackermann_peter(m, n):
if m == 0:return n + 1
elif n == 0:return ackermann_peter(m - 1, 1)
else:return ackermann_peter(m - 1, ackermann_peter(m, n - 1))
18 / 20
Langages de programmation Styles de programmation
La programmation orientée objet
! permet d’améliorer la gestion et la qualité des grands projets logiciels! consiste à créer une modélisation des éléments du monde réel comme objet
" un identifiant qui permet de définir une référence unique vers un objet" ses attributs qui contiennent des données qui caractérisent l’état de l’objet" ses méthodes qui représentent les actions possibles pour l’objet
activity
namegender age
heightdoctrine
weight
...
setHeight(float h)
birthday()
setName(String w)
getAge()
getName()
setAge(int n)
setWeight(int w)
getBMI()
getBFP()...
setHeight(float h)
birthday()
setName(String w)
getAge()
getName()
setAge(int n)
setWeight(int w)
getBMI()
getBFP()...
setHeight(float h)
birthday()
setName(String w)
getAge()
getName()
setAge(int n)
setWeight(int w)
getBMI()
getBFP()television
Homermale 39
1.78laziness
84
saxophone
Lisafemale 8
1.29Buddhism
26
19 / 20
Langages de programmation Styles de programmation
La programmation logique
! utilise l’expressivité de la logique! s’appuie sur les concepts d’unification, de récursivité et de retour sur trace! demande la construction d’une base de connaissances (prédicats et règles)! permet la formulation de requêtes à la base
Exemple en PrologPere (Homer, Bartholomew).Pere (Abraham, Homer).Pere (x,y), Pere (y,z) :- GrandPere (x,z).
?- GrandPere (GP, Bartholomew).
> GP = Abraham
20 / 20