IF1 2009-2010 Introduction lÕinfor matique et la prog ...picantin//IF1/amphi2-2009x4.pdf" lecar act...

5
Introduction à l’informatique et la programmation IF1 2009-2010 Matthieu Picantin LIAFA UMR 7089 CNRS & Université Paris 7 Denis Diderot 08/10/2009 1 / 20 Algorithmes et modèles Machine de Turing machine abstraite inventée en 1936 par Alan Turing (1912-1954), pour servir de modèle idéal lors d’un calcul mathématique toutes les machines modernes sont conçus selon 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 1970 par 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

Transcript of IF1 2009-2010 Introduction lÕinfor matique et la prog ...picantin//IF1/amphi2-2009x4.pdf" lecar act...

Page 1: IF1 2009-2010 Introduction lÕinfor matique et la prog ...picantin//IF1/amphi2-2009x4.pdf" lecar act re cr ire sur ruban (en remplacement de celui lu) ... les registres , etc ... "

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

Page 2: IF1 2009-2010 Introduction lÕinfor matique et la prog ...picantin//IF1/amphi2-2009x4.pdf" lecar act re cr ire sur ruban (en remplacement de celui lu) ... les registres , etc ... "

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

Page 3: IF1 2009-2010 Introduction lÕinfor matique et la prog ...picantin//IF1/amphi2-2009x4.pdf" lecar act re cr ire sur ruban (en remplacement de celui lu) ... les registres , etc ... "

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

Page 4: IF1 2009-2010 Introduction lÕinfor matique et la prog ...picantin//IF1/amphi2-2009x4.pdf" lecar act re cr ire sur ruban (en remplacement de celui lu) ... les registres , etc ... "

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

Page 5: IF1 2009-2010 Introduction lÕinfor matique et la prog ...picantin//IF1/amphi2-2009x4.pdf" lecar act re cr ire sur ruban (en remplacement de celui lu) ... les registres , etc ... "

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