Pourquoi faire de l informatique? Science : discipline scientifique à part entière champ d étude, méthode, principes, objets étudiés Technique : outil scientifique dans toutes les disciplines simulation, recueil et analyse de données, modèles Métiers : cursus professionalisants Pédagogie : vision nouvelle de concepts récurrents dans les sciences fonction, ensemble, modèle, calcul, etc.
Cours sur deux ans MIAS 1 : notions de base Que contient un langage de programmation? Que permet-il de faire? MIAS 2 : notion de langage Comment est fabriqué un langage de programmation? 12 cycles : Cours, ED, ED-machine Structure : cadre : notion, notation, typage, évaluation exemples concrets mise en application systématique sur machine
Chaque année : examen écrit (3/4) exament de TP (1/4, pondéré par contrôle continu) La note de MIAS 1 est intégrée au calcul pour la validation de modules par compensation La note de module tient compte de la note de MIAS 2 et de MIAS 1
Utilisez le matériel et le logiciel Libre-service Documentation électronique Discutez avec vos enseignants Soyez actifs Nous faisons des erreurs, repérez-les Participez aux ED et TP Expérimentez Ne croyez que ce que dit la machine Analysez tout ce que dit la machine, surtout lorsque c est inattendu!
Définition 1 : description symbolique d une relation fonctionnelle entre deux ensembles (l ensemble des données et l ensemble des résultats)» un programme est l expression d un modèle» analogue à une équation physique (mais qui serait orientée) Définition 2 : mécanisme qui calcule la valeur du résultat à partir de la valuation des données» un programme est la résolution d un modèle» analogue à l application numérique en physique
Que peut-on faire avec un programme? le construire» algorithmique, génie logiciel le valider» s assurer qu il est correct le transformer» pour le rendre plus efficace» pour le rendre exécutable l exécuter» quelquefois...
valeur : objet informatique qui ne peut plus être transformé par le mécanisme de calcul courant. Définition relative, en particulier à la notion de calcul calcul : application automatique de règles de transformation qui produisent une valeur finale (le résultat) à partir des données (valeurs initiales) réduction de * réduction de + 2*3 + 4 6 + 4 10 valeur finale Calcul
Nom : symbole, défini par le programmeur, qui dénote une valeur. Pi, vitesse, g, f, position_du_mobile, v90 sont des noms Pi-deux, vitesse du mobile, 14v ne sont pas des noms. Les noms permettent d écrire des expressions lisibles x = 1/2 * g * t * t + v0 * t 2 * Pi * rayon
Liaison : association entre un nom et une valeur Notation Caml let nom = valeur ;; let nom1 = valeur1 and nom2 = valeur2 ;; Règle des noms Un nom doit être lié avant d être utilisé let a = b * 2;; incorrect let b = 4;; let a = b * 2;; correct
Un seul mécanisme en Caml : la réécriture Tout ce qui est remplaçable est remplacé par sa valeur Les remplacements s arrêtent lorsque plus rien ne peut être remplacé (on obtient le résultat) Chaque construction Caml possède sa règle d évaluation qui explique comment s effectue la réécriture Nom : _ + _ : let n = v : remplacement par la valeur liée évaluation des arguments si les deux sont des valeurs, remplacement par la somme évaluation de partie droite liaison avec le nom L évaluation commence lorsque le symbole ;; est rencontré.
Type = Un ensemble de valeurs Un ensemble d opérations sur les valeurs Une expression de type Exemples : type des nombres entiers valeurs: -1, 0, 1,... opérateurs : +, -, *, / <, <=, >, >=, = expression int type des nombres décimaux valeurs: -1.0, 0.0, 0.1,... opérateurs : +., -., *., /. <., <=., >., >=., = expression : float type des valeurs logiques valeurs: true, false opérateurs : &, or, not, = expression : bool
CAML : langage fortement typé toute expression possède un type type d un nom : type de la valeur qui lui est liée permet le contrôle des programmes» assure qu on n additionne jamais des chèvres avec des choux!» un programme incorrectement typé est un programme faux!» mais l inverse n est pas vrai : un programme correctement typé a de bonnes chances d être correct Avant toute évaluation, CAML s assure que le typage est correct
Inférence de type : Ensemble des règles permettant de calculer le type d une expression Mécanisme qui porte sur le texte des programmes et expressions raisonnement sur les programmes aide à la programmation (et à la conception d algorithmes) Assistance tout résultat Caml s affiche comme un type et une valeur un type inattendu = très probablement une erreur!
Concept les nombres entiers relatifs, limités en taille Notation Notation usuelle pour les nombres et les opérations le type est noté int Typage Une expression de la forme a + b est de type int si a et b sont de type int Une expression de la forme a = b est de type bool si a et b sont de type int Evaluation Règles de calcul usuelles pour les opérations usuelles
Concept les nombres décimaux, limités en taille Notation Notation usuelle pour les nombres, les opérations ont un point le type est noté float Typage a +. b est de type float si a et b sont de type float a >. b est de type bool si a et b sont de type float sqrt a est de type float si a est de type float Evaluation Règles de calcul usuelles pour les opérations usuelles
Concept valeurs logiques Notation valeur : true et false type : bool opérations : et ou non Typage similaire aux types numériques Evaluation règles usuelles (tables de vérité) & or not
Concept expression de calculs dépendants de conditions Notation if <expression_booléenne> Typage then <expression 1> else <expression 2> l expression est bien typée si l expression derrière if est de type bool, et les expressions derrière then et else sont de même type. le type de l expression est celui des expressions suivant then et else
Evaluation (if b then v1 else v2) = v1 si b est évalué à (if b then v1 else v2) = v2 Exemples symbole de Kroneker : (if i = j then 1 else 0) valeur absolue (if a > 0 then a else -a) + 2 true false
Caml offre une notation très proche des mathématiques f : D R x expression (x) carre : ℵ ℵ x x 2 carre(3) carre(2+2) let f = function x -> expr (x);; let carre = function x -> x * x;; carre 3;; carre (2+2);; La théorie complète au prochain cours!