48
Universit´ e de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du moulin neuf 80000 Amiens E-Mail: [email protected] [email protected] – G´ enie Logiciel – – M´ ethodes de programmation – (fascicule 1 : Introduction) Licence d’informatique Christophe C´ erin version 3.6 au 8/8/2002

Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

Universite de Picardie Jules VerneL@RIA, Bat Curi, 5 rue du moulin neuf80000 AmiensE-Mail: [email protected]

[email protected]

– Genie Logiciel –– Methodes de programmation –

(fascicule 1 : Introduction)

Licence d’informatique

Christophe Cerin

version 3.6 au 8/8/2002

Page 2: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ���������������������������� ��! �"$#���%'&(%'&�)�*�*�) page : 1

Plan general du cours

1. Qu’est ce qu’une specification : Motivations & introductiongenerale ;

2. Elements de logique : ecrire des propositions, utilisationde regles de deduction, schemas de preuve ;

3. Introductiona la derivation rigoureuse de code : pre et postconditions, notion d’invariant – preuve de programmes :correction partielle et totale ;

4. Langage SML (Standard ML) : un langage oriente fonc-tionnel avec des modules (fascicule 6) + Langage PYTHON :Python is an interpreted, interactive, object-oriented pro-gramming language. It is often compared to Tcl, Perl,Scheme or Java (fascicule 7);

5. Introductions aux methodes d’analyse - Comment poseret resoudre un probleme : les etapes du developpe mentd’un logiciel – tactiques, paradigmes. Rediger un travail ;

6. Specifications Algebriques : ecrire des equations pour decrirece que doit faire un systeme ;

Page 3: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ���������������������������� ��! �"$#���%'&(%'&�)�*�*�) page : 2

Objectifs du cours

Au terme du cours :

– Comprehension : passage d’un langage a un autre (ver-bal, graphique, symbolique. . . ) � transposition. Le materielest presente sous un jour, un ordre nouveau � interpreter.Extrapoler.

– Appliquer : utiliser des representations abstraites dansdes cas particuliers.

– Analyser : rechercher, separer, trier des faits, des hy-potheses, des principes d’organisation afin de faire ap-paraıtre leur hierarchie et leurs relations.

– Synthetiser : reunion des elements precedents dans lebut de former un tout ; elaborer un plan d’action.

– Evaluer : formation de jugements, remettre en cause,critiques.

Page 4: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ���������������������������� ��! �"$#���%'&(%'&�)�*�*�) page : 3

Objectifs du cours (suite)

C’est un cours de methodes (ensembles structures de principesqui orientent la facon de concevoir).

Le cours se veut transversal et culturel : faire le lien avecles autres modules, savoir puiser ailleurs pour construire SArepresentation des choses.

Les TD doivent etre le lieu ou l’etudiant pose des questions ;c’est lui l’acteur. Un travail complementaire a la maison doitetre mis en place.

Un bon etudiant : il repere dans un enonce le cœur du problemeet sait tirer la ficelle pour developper une solution (memepartielle) avec des arguments scientifiques et techniques.

Page 5: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ���������������������������� ��! �"$#���%'&(%'&�)�*�*�) page : 4

Reperes bibliographiques

– AnaGram – Raisonner pour programmer – Dunod – 1988.

– George Polya Comment poser et resoudre un probleme –Edition Jacques Gabay, 151bis rue St Jacques 75005Paris – edition 1989.

– D. Solow – How to Read and Do Proofs – John Wiley &Sons – 1990.

– G. Dromey – Program Derivation, The Development of Pro-grams from Specifications – Addison Wesley – 1989.

– D. Gries – The Science of Programming – Springer Verlag– 1989.

– N. Francez – Program Verification, Addison Wesley – 1992.

– E.W Disjkstra – A Discipline of Programming – PrenticeHall – 1976.

Page 6: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ���������������������������� ��! �"$#���%'&(%'&�)�*�*�) page : 5

bibliographie (suite)

– K. Apt et E. Olderog, Verification of Sequential and Concur-rent Programs, 2nd Edition, Springer Verlag, 1997.

– J.F. Morin, Comprendre les methodes formelles, Panorama etoutils logiques, Masson, 1996.

– Habrias, Introduction a la specification, Masson.

– Habrias, Dictionnaire encyclopedique du genie logiciel, Mas-son.

– The Mythical Man-Month, Frederick P Brooks, Jr. AW,ISBN 0-201-83595-9

– Programming Pearls, Jon L Bentley, AW, 2000, ISBN 0-201-65788-0

– The Practice of Programming, Brian W. Kernighan andRob Pike, Addison Wesley, 1999 ISBN 0-201-61586-X

Page 7: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ���������������������������� ��! �"$#���%'&(%'&�)�*�*�) page : 6

bibliographie (suite)

– Christine Froidevaux, Marie Claude Gaudel, Michele So-ria – Types de donnees et algorithmes – McGraw-Hill – 1990.

– Udi Manber – Introduction to Algorithms – A creative ap-proach – Addison Wesley – 1989.

– C.Pair, R.Mohr, R.Schott – Construire les algorithmes –Dunod – 1988.

– Carroll Morgan – Programming from Specifications – Pren-tice Hall – 1990.

– Cliff B.Jones – Systematic Software Development Using VDM– Prentice Hall International – 1986.

– C.B Jones and R.C Shaw – Case Studies in Systematic Soft-ware Development – Prentice Hall – 1990.

Page 8: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ���������������������������� ��! �"$#���%'&(%'&�)�*�*�) page : 7

Reperes Internet (complementaires)

Liste de pointeurs WEB surhttp://w3.u-picardie.fr/˜cerin/licence/

ou encore :

- Dictionary of Algorithms, Data Structures, and Problems(http://hissa.ncsl.nist.gov/˜black/CRCDict/)- Data Structures and Algorithms(http://www.ee.uwa.edu.au/˜plsd210/ds/ds_ToC.html)- ARTFL Project: French-English Dictionary Form(http://humanities.uchicago.edu/forms_unrest/FR-ENG.html)-Collection of Lecture Notes, Surveys, and Papershttp://www.uni-paderborn.de/fachbereich/AG/agmadh/WWW/scripts.html-RESSOURCES INTERNET Mathematiques, Informatiquehttp://bleuet.bius.jussieu.fr/intinfo.html-Dictionary of Algorithms, Data Structures, and Problemshttp://hissa.nist.gov/dads/terms.html-The Stony Brook Algorithm Repositoryhttp://www.cs.sunysb.edu/˜algorith/index.html

Page 9: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ���������������������������� ��! �"$#���%'&(%'&�)�*�*�) page : 8

Peut on definir le Genie Logiciel?

Proposition generalement admise : etude des methodes etoutils qui peuvent etre utilises pour produire des logiciels dequalite.

Consequence : il y a un GL du reseaux, de l’architecture. . .

Les 7 facteurs cles qui commandent les changements fon-dammentaux que l’on observe :

1. le temps critique necessaire a la mise sur le marche ;

2. economie informatique ;

3. la disponibilite de materiel de bureau tres performant ;

4. reseaux locaux et WAN ;

5. disponibilite et acceptation de la technologie objet ;

6. GUI ;

7. caractere impredictible du modele de developpement (nou-velle revolution chaque annee / evolution) ;

Page 10: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ���������������������������� ��! �"$#���%'&(%'&�)�*�*�) page : 9

Les concepts du GL

– abstraction : concentrer l’effort de modelisation et de resolutiona un niveau general / detail.

– Analysing, design, methods (notation : ce sont des outilspour communiquer dans une discipline d’engineering).Quels outils pour une specification non ambigue ? Laconception doit tenir compte des contraintes. On imple-mente sans valider le modele d’analyse et le modele deconception !

– Prototypage (avoir un premier retour afin d’ameliorer l’usagede l’application)

Page 11: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 10

Les concepts du GL

– Modularite et architecture des programmes : facteur in-fluant la qualite. Module � interface bien definie pourautres modules et qui cache une decision d’implanta-tion et qui peut etre teste, prouve independamment desautres modules.Architecture du logiciel : s’interesser a une decompositionmodulaire, data oriented, event oriented, objet oriented,control oriented.Design patterns : decrire les conditions pour l’usage d’unepartie de librairie (classe) en terme de contraintes deconception et de compromis.

– cycle de vie et process (quel type d’infrastructure, quelleorganisation du travail)

– Reuse

– Metrics

– Tools and Integrated environnement

Page 12: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 11

Qu’est ce qu’une specification : Motivations

On oublie pour le moment que par essence la tache d’unprogrammeur est : etant donnee une specification, developperun programme qui satisfait la specification. Notre nouveaurole est de controler le cycle de vie du logiciel et de :

1. analyser les besoins du client ;

2. definir ce que l’on doit faire ;

3. concevoir une solution ;

4. passer la main au programmeur ;

5. valider le systeme (respecte t’il les besoins?) ;

6. verifier que le systeme ��� fait ��� bien ce que l’on souhaitait ;

7. demander l’installation et la maintenance ;

Page 13: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 12

Plan

On va s’interesser aux points 2) et 3) :

1. Motivations ;

2. Poser, concevoir resoudre un probleme (Polya, Solow);

3. Panorama des tactiques de constructions les plus usuellesdes programmes (Groupe AnaGram);

4. Batterie d’exemples synthetisant des differentes approchesde conception a base de fonctions ;

5. Introduction aux methodes formelles (Gries, Dromey, Disjkstra) ;

6. Specifications algebriques (”Types de donnees. . . ” – Gaudel);

Page 14: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 13

Specifications–idees de base

– Pourquoi des specifications formelles :

– pour � � comprendre � � les langages, analyser leurs pro-prietes essentielles ;

– pour nous guider vers la realisation de nouveaux langages ;

– pour nous aider a faire de la verification (correctionet terminaison) ;

– pour modeliser certains aspects comme le passagede parametres, donnees vues – donnees cachees. . . quiont un impact important sur la qualite des program-mes ;

– Limitations generalement reconnues : elles sont difficilesa apprendre, a ecrire, a lire (nombreuses notations heriteesde la logique des predicats, des mathematiques discretes).

Page 15: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 14

Le role des mathematiques et de la logique

The problem is to recognize computing science forwhat it really is, a mathematically-based disciplineconcerned with the application of rigourous methodsfor the specification, design, and implementation ofcomputer systemsGeoff Dromey – Program Derivation – AddisonWesley

– les programmes peuvent etre prouves corrects de la memefacon que les theoremes des mathematiques ;

– l’assertion selon laquelle un programme satisfait une spe-cification est une ”phrase” mathematique ;

Page 16: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 15

Comment les programmes sont ils construits?

Les principales etapes dans la derivation d’un programmesont : la specification, la conception d’un algorithme, l’im-plantation.

– premierement : construction d’une specification qui doitetre non ambigues, consistante et complete (definitions) ;

– une sequence de raffinements et de decisions de con-ception sont effectuees ;

– apres avoir introduit suffisamment de details, transcrip-tion du texte dans un langage de programmation ;

Page 17: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 16

Les etapes dudeveloppement d’un logiciel

—=0

��

programmation, la specification � � * %un projet bien conduit ����� % a)�* % de

validee / phase precedentechacune des phases du developpement doit etre

successifsdeveloppement et conception par raffinements

analyse des besoins - cahier des charges

Expressiondes besoins

Specificationglobales

Specificationdetaillees

Programme

� � � �

� � �

� � � �

specification

conception

realisation

Page 18: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 17

Quelques definitions

Une specification est une collection de criteres qui, s’ils sontverifies par le programme la codant, le qualifiera de correct.

Pour formuler de tels criteres � langage (avec une syn-taxe et une semantique rigoureuse) capable d’etre manipuleformellement (pour raisonner). Ce langage exprime ce quiest requis.

Une implantation correcte (Pascal, C, LISP. . . ) decrit com-ment les criteres sont concretises (en pratique).

Testing can reveal the presence of errors, not their ab-sence.E.W Disjkstra

Page 19: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 18

Les langages de programmation

C’est la vue des annees 1990 !

Lispfortranasm

CPascal

Simula C++Smalltalk ML - Miranda

Prolog Occam

� � � ���

� � ���

� � � � �� � ��

� �������

�� ���� ���� ��

�� ���� ��

�� ��typage fortfonctionnels et

calculs

fonctionnelleprogrammation

par objetsprogrammation

modules

classesnotion de

forttypage

types

LogiqueProgrammation

ParalleleProgrammation

ApplicativeProgrammationProgrammation

Imperative

FIG. 1 – les langages de programmation

Page 20: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 19

Syntaxe et semantique

– syntaxe : caracterise la structure des programmes bien ecrits ;

– semantique : caracterise les effets du programme et lesvaleurs produites ;

– un langage c’est de la syntaxe et de la semantique !

– limitations de la representation BNF pour decrire la syn-taxe d’un langage de programmation : comment decrirequ’un nom de variable ne doit etre declare qu’une seulefois?

Page 21: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 20

Exemple de langage : LISP

– le constituant de base est la ”liste” qui sert a representeraussi bien les donnees que les programmes ;

– operateurs d’affectation et de manipulation de listes :

(setq L ’(1 2 3 4))(apply ’+ L)> 10;;;;;;;;;;;;;;(defun firstn (n l)(cond

((null l)())((<= n 0)())(t (cons (car l)

(firstn (1- n) (cdr l))))))(firstn 2 ’(1 2 3 4))>(1 2)

Page 22: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 21

Exemple de langage : ML

– Pas d’affectation globale ; on ne fait que composer desfonctions qui s’appliquent sur des types de donnees evo-lues ;

– la fonction ”fibonacci” :

#let rec fib n =if n < 2 then 1 else fib(n-1) + fib(n-2)

;;fib : int -> intfib = <fun>

– type de donnee :

#load "float";;#type RECT = Rect of float * float;;Type RECT defined#Rect(3.3,4.4);;- : RECT- : Rect(3.3 , 4.4)

Page 23: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 22

Les langages imperatifs (rappels)

The book carries a message, and the message is: Allprograms have a common theory and design method.K. Mani Chandy – An Introduction to Parallel Pro-gramming – Jones & Bartlett

– caracteristiques fondamentales des langages imperatifs(ceux que nous etudions) : l’instruction, la mise en sequence,l’assignation, le choix, la repetitive ;

– Reference transparente : substitution d’egal a egal : � ��. Une proposition ������� vraie pour � est encore vraie

lorsqu’on remplace � par�

Page 24: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 23

Programmes vs Mathematiques

de � ��

et � + ��� � on deduit que� + ��� �

En informatique : function f(x:integer):integer;begin

y := y + 1;f := y + x

endsi on declare � ��� � ��� ��������� et � � � � � alors l’executionde � ��� � puis celle de � ��� � ne retourne pas le meme resultat.D’ou le besoin de techniques fondamentales pour raisonnersur les objets.

� n’est pas une fonction au sens mathematique !

Page 25: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 24

Definitions vs egalite

– Soient ��� � � ��� � et soit � �� )�� � � . Si � � � alors. . .

– Utiliser des symboles distincts (par exemple := et =)

– procede mnemotechnique : remplacer le symbole par unoperateur relationnel �� � et si la formule a encore unsens, il s’agit de =, sinon c’est :=

– Pour la clause � � � ( � vaut � ), l’expression � ne doitcontenir que des objets definis precedemment. Principede non creativite d’une definition.

Page 26: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 25

Langage et Meta-langage

– decrire ou etre decrit? Quand on decrit les concepts d’unlangage de programmation, on applique un certain en-semble de notations a la description d’autres notations.� � � � � ��� ��� � � � � + � ����� � � � � � � � �

����

cela peut devenir dangereux !

– Circularite dans les descriptions. On peut se demandercomment la definition du meta langage a ete definie (parexemple comment a t’on defini le langage algorithmique).

Page 27: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 26

Les fonctions en informatique

– L’en-tete : declaration du nom, l’ensemble de depart etl’ensemble d’arrivee (typage des argument � parametres) ;

– Le corps : les equations en mathematiques ;

– le type du resultat donne l’ensemble d’arrivee ;

� : E � F� �� � ��� �

Page 28: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 27

Les fonctions en informatique

mathematique Pascal

������� � �� � �� � � � ����� function

� � ( � :real):real;begin� � � � ������� end;

� � ������� � � ������� � �� ������� �� �"!#�function

� )( � :real; � :integer):real;

begin� ) � �%$'&)(+* � ��!#�end;

�+,-��� � ./ � �� /0� � 12 3

4 �65

function�

( / : integer):integer;var 5 � $87:9;9=< � 5 / *><@?A<'( ;begin$87:9;9=< � � *

;for 5 � � � to / do$87+9;9=< � �B$87:9;9=< � 5 ;� � �%$87:9;9=<

end;

Page 29: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 28

Les fonctions en informatique

– variables libres (les parametres des fonctions informa-tiques) ;

– variables liees (elle correspondent aux variables internesde la fonction) ;

– effets de bord produits par les fonctions en informatiques ;

– utilisation de types complexes :function Rel(x:record, rel,im:real):real

– les fonctions dans les langages fonctionnels :

let � � � � ��� � + �;;

let � � � � � ��� � � ��� � � � ;;

– la lambda notation :� �� � � � � devient � � � � ��� � �

Page 30: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 29

Utilisation des fonctions

– appel d’une fonction : � � � ����� � � � � ��� donc si � est unevariable de type ’real’ l’instruction Pascal � � � � � � ����� �aura pour effet d’affecter a � la valeur � � ��� .

– Definition d’une fonction a partir d’une autre. On utiliseainsi l’operation naturelle de composition des fonctionspar exemple :

� � ��� � �

�� � � � � � � �

�� � ��� + � �

peut s’ecrire en Pascal:

function �( � :real):real;

begin�� � ��� � � � � � � � � � � � � � � ��� + � �

end;

Page 31: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 30

Fonctions definies recursivement

��� �� � ! � �� ! � � ��� � � � !

let fact n=if n=0 then 1 else n*fact(n-1);;

��� ���� � � � � � � � � ��� � � �� � � � � � � � � ��� � � � + � � � � � � � � � �

function � � � � � ( � :integer):integer;begin

if � � � then � � � � � � � �else � � � � � � � � + � � � � � ��� � � �

end;

Page 32: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 31

Fonctions definies recursivement

On peut egalement avoir des doubles recurrences comme :�� ������������� ��������� ����������������� ����!"���#�$�%�&����'��() �����+*,�.-0/#1���324����'��() ��������� ���5�6�����7�8���6�"�9���%�:�#�$�%������� ������*,�;-</%1

Comment ecrire de ��� bonnes definitions ��� par induction?

Qu’entend t’on par ��� bonnes definitions ��� ?

Page 33: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 32

Langages de programmation : quelques concepts resumes

– Au final : �� ans d’experiences (Fortran 1957) ;

– Au final : des emprunts et des influences entre les lan-gages. Ex : les exceptions de C++ sont heritees de cellesde ML; C++ � Simula + C;

– Un langage : un outil pour commander les machines,un moyen de communication entre les informaticiens,un vehicule pour l’expression des conceptions a hautniveau d’abstraction, une notation pour les algorithms,une facon d’exprimer des relations entre des concepts,un outil pour l’experimentation. . . certainement : des moyenspour organiser des calculs (interactions)

Page 34: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 33

Langages de programmation : quelques concepts (resumes)

– Aujourd’hui : un paradigme dominant : Object Program-ming (origine : Simula developpe entre 1961 et 1967)

– These : tous les problemes communs ont des algorithmesconnus, efficaces disponibles dans des bibliotheques ou-vertes a tous. Exemple : le tri. Par contre on peut avoirbesoin, au sein d’une meme application de trier des en-tiers mais aussi des enregistrements et faire en sortequ’une seule espece de clients puisse trier les entiersmais pas les enregistrements.

– La nature du probleme est d’ordre organisationnelle !!!– Alors, pourquoi ne pas etudier QUE le paradigme objet?

Parce qu’il ne rassemble pas tous les concepts, les id-iomes qui peuvent servir les objectifs fixes a un langagede programmation.

– Quant a l’argument : les langages compiles sont plusperformants que les langages interpretes. . . sens avecproc a

��� ��� et � � ��� RAM.

Page 35: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 34

Concept 1 : Verification de types

– Dans certains langages il n’y a qu’un seul objet de sorteque les valeurs, les donnees et les programmes sontrepresentes de la meme facon ;

– Dans certains langages : un systeme de deduction de typesstatique ou dynamique. C’est un ensemble de regles quipermettent d’associer a toutes les expressions du lan-gage un type (eventuellement de communiquer le typedes objets (typeof))

– PROBLEME : pour deduire le type d’une expression ona besoin d’information de contexte. Exemple : quel est letype de l’expression � + �

dans

- let val x=4.2 in x+2 end;stdIn:1.1-2.20 Error: operator and

operand don’t agree [literal]operator domain: real * realoperand: real * intin expression:x + 2

Page 36: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 35

Le B-A-BA de la verification de type

– Les regles dans un systeme de type suivent la proprietesuivante des fonctions mathematiques : quand une fonc-tion d’un ensemble � � � est appliquee a un elementde l’ensemble � , le resultat est un element de l’ensem-ble �

– Exemple de regle : si E et F (deux expressions) sont detype entier alors le resultat est de type entier ;

– Dans l’exemple de la page precedente il y a un problemede surcharge (un meme symbole, le + a deux significa-tions). C’est le + entre deux reels qui est attendu puisque� est de type reel (deduit lors de l’affectation x=4.2) etpas le + entre deux entiers dans x + 2.

Page 37: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 36

Le B-A-BA de la verification de type

– QUESTION : quelles sont les regles de deduction detype dans le programme C suivant de nom e.c :

main(){int i,j;float k,l;

i = 3; k = 3.123456789;j = i + k;l = j + i + k;}

Compilation :

fatboy.etud-sc.u-picardie.fr> gcc e.cfatboy.etud-sc.u-picardie.fr>

Il n’y a aucun message particulier a la compilation !!!Quand on sait que l’explosion de la fusee Ariane V estdue au fait qu’il manquait trois bits a une valeur numerique,on peut se poser des questions !!!

Page 38: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 37

Polymorphisme

– Une fonction polymorphe c’est generalement une fonc-tion qui a un type general (generic type) qui importe peuqui decrit les operations a realiser pour empiler (par ex-emple un pile d’entiers, de reels. . . )

– Besoin : on veut des fonctions d’ordre general qui s’ap-pliquent sur n’importe quel type d’objet;

– En Pascal ou en C les fonctions polymorphes sont lesoperations sur les type de base comme le + . En C++il y a le suport des type parametre d’un fonction via unconstructeur particulier : template (patron), en ML lanotion de type parametrique est tres etendue;

Page 39: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 38

Fonction polymorphe en C++

AVANT :

void swap(int& x, int& y){int tmp = x;x = y;y = tmp;

}

APRES :

template<class T>void swap(T& x, T& y){T tmp = x;x = y;y = tmp;

}/* Every time we used "swap()" with a given pair of types, the compilerwill go to the above definition and will create yet another"template function" as an instantiation of the above. E.g., */main(){int i,j; /*...*/ swap(i,j); //instantiates a swap for "int"float a,b; /*...*/ swap(a,b); //instantiates a swap for "float"char c,d; /*...*/ swap(c,d); //instantiates a swap for "char"String s,t; /*...*/ swap(s,t); //instantiates a swap for "String"

}

Page 40: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 39

Classe polymorphe en C++

AVANT : (on ecrit ici une classe tableau d’entiers)

Consider a container class of that acts like an array of integers:

//this would go into a header file such as "Array.h"class Array {public:Array(int len=10) : len_(len), data_(new int[len]){}˜Array() { delete [] data_; }int len() const { return len_; }const int& operator[](int i) const { data_[check(i)]; }

int& operator[](int i) { data_[check(i)]; }Array(const Array&);Array& operator= (const Array&);

private:int len_;int* data_;int check(int i) const{ if (i < 0 || i >= len_) throw BoundsViol("Array", i, len_);return i; }

};

Just as with ”swap()” above, repeating the above over and over for Array of float, of char, ofString, of Array-of-String, etc, will become tedious.

Page 41: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 40

Classe polymorphe en C++

APRES : (on ecrit ici une classe tableau de n’importe quoi)

//this would go into a header file such as "Array.h"template<class T>class Array {public:Array(int len=10) : len_(len), data_(new T[len]) { }˜Array() { delete [] data_; }int len() const { return len_; }const T& operator[](int i) const { data_[check(i)]; }

T& operator[](int i) { data_[check(i)]; }Array(const Array<T>&);Array& operator= (const Array<T>&);

private:int len_;T* data_;int check(int i) const{ if (i < 0 || i >= len_) throw BoundsViol("Array", i, len_);return i; }

};

Page 42: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 41

Classe polymorphe en C++

Maintenant on utilise et on instancie les type desires pourai, af, ac. . . :

main(){Array<int> ai;Array<float> af;Array<char*> ac;Array<String> as;Array< Array<int> > aai;

} // ˆˆˆ-- note the space; do NOT use "Array<Array<int>>"// (the compiler sees ">>" as a single token).

Page 43: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 42

Type polymorphe/parametre en ML

Polymorphisme sur des fonctions predefinies : La fonction hdrepourne le premier element d’un liste, independammentdu type des objets de la liste.

- hd [1,2,3,4];val it = 1 : int- hd ["bonjour","a vous","tous"];val it = "bonjour" : string- hd;val it = fn : ’a list -> ’a

Note : le symbole ’ sert a reperer un type (parametre).Ceci constitue un premier exemple d’illustration de fonc-tions polymorphes.

Type de donnees abstrait polymorphe :

- datatype ’a MyADT = MyNil | Cons of ’a*(’a MyADT);datatype ’a MyADT = Cons of ’a * ’a MyADT | MyNil- Cons(1,Cons(2,MyNil));val it = Cons (1,Cons (2,MyNil)) : int MyADT- Cons("A",Cons("BBB",MyNil));val it = Cons("A",Cons ("BBB",MyNil)):string MyADT

Page 44: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 43

Equivalence de type

Les cinq derniers exemples tournent autour de la notion detype (qui est fortement presente en ML). Question : quandest ce que 2 types sont egaux?

Equivalence structurelle : deux expressions de types sont struc-turellement equivalentes ssi elles sont equivalentes selonles trois regles suivantes :

1. un nom de type est structurellement equivalent a luimeme ;

2. deux types sont structurellement equivalent si ils sontformes en apliquant le meme constructeur de type ades types structurellement equivalents ;

3. apres une definition de type type n=T, le nom detype n est structurellement equivalent a T.

Exemple : C/C++ utilisent l’equivalence structurelle pour tousles types exceptes les types enregistrements (les noms destructures sont seulement equivalents a eux memes)

Page 45: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 44

Concept 2 : Abstraction

– Ce sont les proprietes essentielles du dispositif a con-struire ; Les details qui peuvent etre ignores seront a pri-ori caches ;

– Differentes formes d’abstraction : procedures (on y re-vient pas), modules (collection de variables (data) et deprocedures (operations), constantes et types), types dedonnees definis par l’utilisateur, objets (un systeme estvu comme une interaction d’objets qui envoient et recoiventdes messages) dans une classe ;

– L’abstraction s’obtient egalement en cachant de l’infor-mation (information hiding) afin de rendre les programmesplus faciles a lire et a maintenir ;Il s’agit de controler la visibilite des noms.

Page 46: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 45

Concept 2 : Abstraction

Alors quelles sont les differeces entre les notions de classes(C++) et de modules (SML)?

1- En ML on ecrit module.fonction() alors que l’on peuts’en passer en C++.

2- en C++ on initialise les objets a la creation.

En fait il n’y a rien de bien fondamental de different (repren-dre les exemple C++ precedents) : les deux langages con-courent aux memes objectifs.

Page 47: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 46

Concept 2bis : Modules

– ������ � ��� � �� � � � � � � � � + ��� � � � � � � � � � � � � . Cette equation est

particulierement vraie en ML (il faut s’en souvenir : c’estla demarche de programmation que vous allez suivrelorsque vous programmerez avec les modules SML)

– Le point delicat : exporter (rendre visibles) des noms d’unmodule a un autre module ;En C++ c’est la notion de friend. On rompt l’encap-sulation des donnees quant on utilise une methode getou put publique sur une donnee privee. A priori, si unedonnee est privee, on doit la mettre a jour que dans saclasse et pas ��� partager � � les endroits de programmesou l’on peut la mettre a jour.class Cell {

int info;Cell *next;

Cell(int i){ info=i; next=this; }Cell(int i, Cell *n){ info=i; next=n;}

friend class Liist;};Les fonctions de la classe List peuvent accederaux donnees privees de la classe Cell (il n’ya que des donnees privees ici car pas de public:)

Page 48: Genie´ Logiciel – – Methodes´ de programmation – (fascicule 1: …cerin/licence/chap1.pdf · 2003. 10. 2. · Universite´ de Picardie Jules Verne L@RIA, Bat Curi, 5 rue du

�� ���������� ������ ���������� � �������� �� �"$# � %�&�%'&�)�*�*') page : 47

Concept 3 : Heritage

– L’exemple precedent nous amene tout naturellement ala question de la hierarchie de classes et donc a l’heritage.

– Comment exprime t’on l’heritage en C++?By the ": public" syntax:

class Car : public Vehicle {//ˆˆˆˆˆˆˆˆ---- ": public" is pronounced "is-a-kind-of-a’

//...};

We state the above relationship in several ways:* Car is "a kind of a" Vehicle* Car is "derived from" Vehicle* Car is "a specialized" Vehicle* Car is the "subclass" of Vehicle* Vehicle is the "base class" of Car* Vehicle is the "superclass" of Car (this not as commonin the C++ community)

– Si j’ai deux classes avec une fonction print dont l’uneest “incluse dans l’autre” (classe amie), comment dis-tinguer les print lors d’un appel ? Voir la notion devirtual function et suite dans l’option de C++ dusecond trimestre.