Quelques éléments d ’algorithmique et de spécification

46
Quelques éléments d ’algorithmique et de spécification Leur traduction en Java et Jml

description

Quelques éléments d ’algorithmique et de spécification. Leur traduction en Java et Jml. Démarche pour la construction de logiciels. Cahier des charges Spécifications formelles Algorithmes (vérifications) Implantation (codage). Spécifications. - PowerPoint PPT Presentation

Transcript of Quelques éléments d ’algorithmique et de spécification

Page 1: Quelques éléments d ’algorithmique  et de spécification

Quelques éléments d ’algorithmique et de spécification

Leur traduction en Java et Jml

Page 2: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

2

Démarche pour la construction de logiciels

Cahier des charges Spécifications formelles Algorithmes (vérifications) Implantation (codage)

Page 3: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

3

Spécifications

Langage de spécification : logique des prédicats du premier ordre

Détermination des données et des résultats

Précondition: conditions vérifiées par les données

Postcondition: conditions établissant une relation entre données et résultats.

Page 4: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

4

Algorithme (définition générale)

Description de la résolution d’un problème sous forme d ’une suite finie d’opérations élémentaires.

Page 5: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

5

Programme

Réalisation d’un algorithme dans un langage qu’un ordinateur est capable d’exécuter.

Page 6: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

6

Langage algorithmique

Compromis entre une langue naturelle et un langage de programmation en gardant un bon niveau d ’abstraction.

Page 7: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

7

Algorithme (en informatique)

Description du traitement d’une donnée pour obtenir un résultat.

On peut vérifier qu’un traitement est conforme à sa spécification (sous forme de pre-postconditions)

Remarque : d (donnéesdonnées) et r (résultats) peuvent être composés de plusieurs valeurs.

Page 8: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

8

Notation

{ P } TRAIT { Q }

Si la donnée d vérifie la précondition P,alors après exécution des instructions de TRAIT, le résultat r vérifie la postcondition Q.

Page 9: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

9

Exemple

P : x = 4

TRAIT : x x + 1

Q : x = 5

remarque : ici x est à la fois donnée et résultat

Page 10: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

10

Traduction en Jml

/*@ assert P @*/ ;

TRAIT ;

/*@ assert Q @*/ ;

Exemple : /*@ assert x == 4; @*/;

x = x + 1;

/*@ assert x == 5; @*/;

Page 11: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

11

TRAIT : suite d’instructions Java, rencontrées dans le corps d’une méthode Java.

Exemples d’instructions :

instanciation affectation d’une variable appel de procédure

Page 12: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

12

Affectation

variable expressionou variable := expression

Traduction Java

variable = expression

Page 13: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

13

Remarques

- on n’exprime pas les créations d ’objets.

- on n’exprime pas les entrées/sorties.

- les variables peuvent être modifiées au cours du traitement d’un algorithme.

Page 14: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

14

Séquence d’instructions : ;

trait1; trait2;…traitn;

Le point-virgule est aussi utilisé en Java

Page 15: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

15

Conditionnelle simple

Définir un résultat dépendant d’une condition

si cond alors TRAIT1 sinon TRAIT2 finsi

cond est une expression booléenne.

Page 16: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

16

Exemple : maximum de deux entiers

P = (d1, d2: ENTIER)

Q = (r : ENTIER) et (r=d1 ou r=d2) et r d1 et r d2

TRAIT :si d1 < d2 alors r d2 sinon r d1 finsi

Page 17: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

17

Traduction en Java d’une conditionnelleSyntaxe

if (cond) instruction ;ou if (cond) { instructions }

cond est de type boolean

Effet à l’exécution cond est évaluée les instructions sont exécutées seulement si

cond est évaluée à true

Page 18: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

18

Traduction en Java d’une conditionnelle

if (cond) { instructions }else { instructions }

cond est une expression de type boolean

cond est évaluée, si sa valeur est true, les premières instructions sont exécutées, sinon celles après else sont exécutées.

Page 19: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

19

Quelques simplifications indispensables

if (cond)b = true;else b = false ;

s ’écrit

b = cond ; Remarque: ne pas utiliser de conditionnelles

lorsque les résultat sont booléens, dans ce cas utiliser des opérateurs booléens.

Page 20: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

20

Conditionnelle multipleDéfinir un résultat différemment selon plusieurs

cas :

si cond1 alors TRAIT1 sinon

si cond2 alors TRAIT2 sinon……

si cond(n-1) alors TRAIT(n-1) sinon TRAITnfinsi

Remarque : un seul TRAITi sera exécuté

Page 21: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

21

Traduction Javaif (cond1) {

TRAIT1}else if (cond2) {

TRAIT2}…else if (cond(n-1) ){

TRAIT(n-1)}else {TRAIT_n}

Page 22: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

22

Traduction JavaImbrication d’instructions conditionnelles

Une clause else appartient toujours au if le plus proche qui n ’est pas dans un bloc séparé et qui n’a pas encore de else.

Exemple : if (a>=b) if (a>=c) max = a;

else max=c; else if (b>=c) max=b;

else max=c;

Page 23: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

23

Autre notation algorithmique

Cas cond1 alors TRAIT1Cas cond2 alors TRAIT2……Cas condn alors TRAITn

ou AutreCas TRAITnfincas

avec cette formulation il faut vérifier que les conditions sont mutuellement exclusives et que l’une d’elles est vérifiée.

Page 24: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

24

L’instruction switch switch (variable) { case valeur1 : bloc1; break;…case valeurn : blocn ; break;default : bloc_default ; break;}

Remarque : variable doit être de type entier (int, short, byte) ou caractère (char), les autres types ne sont pas autorisés.

Page 25: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

25

Exemple : résolution d ’une équation du second degré de la forme ax²+bx+c = 0P = (a, b, c : REEL a 0)

Q = (nbsol : ENTIER s,t : REEL) [ (nbsol = 0)

((nbsol = 1) (as²+bs+c = 0)) ((nbsol = 2) (as²+bs+c = 0)

(at²+bt+c = 0) (s t))]

Page 26: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

26

Algorithme

TRAIT :disc b² - 4ac ;si disc = 0 alors nbsol 1; s -b/2a sinon

si disc > 0 alors nbsol 2; s …; t … sinon nbsol 0

finsi

Page 27: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

27

Itération simplePour exécuter un traitement un nombre de fois connu à l ’exécution. Notation algorithmique :

INITpour i dans [1..n] faire TITERfinpour

Soit i une variable qui compte le nombre d ’itérations.

Soit n une variable égale au nombre d’itérations à

effectuer.

Page 28: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

28

Itération conditionnelle (1)

Pour exécuter un traitement un nombre de fois

inconnu à l’exécution. Notation algorithmique :

INIT;cond expression ;tant que cond faire

TITER;cond expression

fintantque

Page 29: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

29

Itération conditionnelle (2)INIT ;arrêt expression ;jqa arrêt faire TITER;arrêt expression ;finjqa

arrêt : variable booléenne qui exprime la condition d ’arrêt. Remarque : arrêt = non (cond)

Page 30: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

30

Exemple :

Une itération sert très souvent à calculer le dernier terme d’une suite définie par une relation de récurrence.

Calcul de la somme des carrés des n premiers nombres entiers positifs.

P = ( n entier ; n > 0)

Q = ( r = i² pour i [1..n])

Page 31: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

31

TRAIT :r 0;pour i dans [1..n] faire r r+i² fpour

our 0;i 1;cond (i <= n) ;tantque cond faire r r+i² ; i i+1;

cond (i <= n)fintantque

Algorithme

Page 32: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

32

Traduction Java (boucle « for »)for (exprinit ; condition ; expincr)

{ instructions }

condition est de type boolean Effet à l ’exécution

exprinit est évaluée tant que condition est true, les instructions

sont exécutées, puis expincr est évalué.

Page 33: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

33

Traduction Java (1) (« boucle while »)initialisation ;while (condition)

{ instructions }

condition est une expression de type boolean

sémantique : tant que l ’expression condition est true, les instructions sont exécutées.

Page 34: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

34

Exemple :r = 0 ;for ( i = 1 ; i <= n ; i++ ) r = r + i*i ;

our = 0 ;i = 1 ;cond = (i <= n) ;while (cond)

{ r = r + i*i ; i = i+1;cond = (i <= n);}

Page 35: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

35

Traduction Java (2) : (« boucle do while ») initialisation ;

do {instructions}

while (condition) ; condition est une expression de type

boolean sémantique : condition est évaluée après

chaque itération

Page 36: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

36

Les fonctions fonction nom_fonction (param : type):

resultat : type; instructions

signature corps de la fonction : description algorithmique du calcul des

résultats à partir des données.

Page 37: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

37

Les fonctions en Java type_retour nom_fonction (params : type) {

instructions ;return expression ;

}

l ’instruction return permet de retourner un résultat type_retour précise le type du résultat retourné

Page 38: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

38

Exemple

int somme( int n) {int r = 0 ;for (i=1; i <= n; i++) r = r + i*i ;return r;

}

Page 39: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

39

Les tableaux

Collection d’éléments de même type, auxquels on peut accéder grâce à un indice.

Les éléments sont de type : primitifs (réel, entier, caractère, …) objets plus complexes (produits cartésiens …

Page 40: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

40

Type Tableau

bi : Tableau Entier indice minimal

bs : Tableau Entier indice maximal

longueur : Tableau Entier nombre d’éléments

accès : Tableau x Entier E remarque : accès(T, i) est noté T[i]

change : Tableau x Entier x E Tableauremarque : T[i] = e

Page 41: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

41

Les tableaux en Java (Array)

Déclaration : nom_type [] nom_tableau ; Définition: nom_tableau = new nom_type[n]

; Les composantes d’un tableau commence à

l’indice 0 et jusqu’à (n-1), si le tableau a n éléments.

Accès à un l’élément d ’indice i : t[i] Modification de l’élément d ’indice i : t[i]=nv Autre façon de définir un tableau : exemple

boolean [] t = {true, false, true};

Page 42: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

42

Les tableaux en Java (suite) int [] t = { 9, 10, 12, 13, 19, 8, 7, 0 }; length fournit le nombre d’éléments du tableau

t.length renvoie 8

t[3] = 20 ; parcours des éléments d’un tableau :

for (i = 0; i < t.length; i++) {

...System.out.println(t[i]);

}

Page 43: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

43

Spécification du maximum des éléments d ’un tableau d’entiers

données : t : tab[1..n] d ’entiersrésultat : max : entier, maximum de tPrécondition : n > 0Postcondition : (i [1,n] max =t[i]) et (j [1,n] max t[j])

Page 44: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

44

Traduction en JML

/*@ requires t.length > 0; @ ensures (\exists int i; i 0 && i < t.length; @ \result == t[i]) && @ (\forall int j; j 0 && j < t.length; \result t[j]); @*/ public int maximum ( int [] t){ …

Page 45: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

45

Spécification -----------Algorithme | | | | JML JAVA

Page 46: Quelques éléments d ’algorithmique  et de spécification

IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

46

Exercice

Ecrire un algorithme qui remplit n éléments d’un tableau avec les carrés des n premiers nombres entiers. Faire la traduction Java de cet algorithme.