460 likes | 557 Views
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.
E N D
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) IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Algorithme (définition générale) Description de la résolution d’un problème sous forme d ’une suite finied’opérations élémentaires. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Programme Réalisation d’un algorithme dansun langage qu’un ordinateur est capable d’exécuter. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Langage algorithmique Compromis entre une langue naturelle et un langage de programmation en gardant un bon niveau d ’abstraction. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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ées) et r (résultats) peuvent être composés de plusieurs valeurs. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
ExempleP : x = 4TRAIT : x x + 1Q : x = 5remarque : ici x est à la fois donnée et résultat IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Traduction en Jml /*@ assert P @*/ ; TRAIT ; /*@ assert Q @*/ ; Exemple : /*@assert x ==4; @*/; x = x + 1; /*@assert x ==5; @*/; IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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 IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Affectation variable expression ou variable := expression Traduction Java variable = expression IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Séquence d’instructions : ;trait1; trait2;…traitn;Le point-virgule est aussi utilisé en Java IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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 IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Traduction en Java d’une conditionnelle Syntaxe 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 IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Conditionnelle multiple Dé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 TRAITn finsi Remarque : un seul TRAITi sera exécuté IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Traduction Java if (cond1) { TRAIT1 } else if (cond2) { TRAIT2 } … else if (cond(n-1) ){ TRAIT(n-1) } else { TRAIT_n } IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Traduction Java Imbrication 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; IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Autre notation algorithmique Cas cond1 alors TRAIT1 Cas cond2 alors TRAIT2 …… Cas condn alors TRAITn ou AutreCas TRAITn fincas avec cette formulation il faut vérifier que les conditions sont mutuellement exclusives et que l’une d’elles est vérifiée. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Exemple : résolution d ’une équation du second degré de la forme ax²+bx+c = 0 P = (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))] IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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 IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Itération simple Pour exécuter un traitement un nombre de fois connu à l ’exécution.Notation algorithmique : INIT pour i dans [1..n] faire TITER finpour Soit i une variable qui compte le nombre d ’itérations. Soit n une variable égale au nombre d’itérations à effectuer. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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 IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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) IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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]) IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Algorithme TRAIT : r 0; pour i dans [1..n] faire r r+i² fpour ou r 0; i 1; cond (i <= n) ; tantque cond faire r r+i² ; i i+1; cond (i <= n) fintantque IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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é. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Traduction Java (1) (« boucle while ») initialisation ; while (condition) { instructions } • condition est une expression de type boolean • sémantique : tant que l ’expression conditionest true, les instructions sont exécutées. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Exemple : r = 0 ; for ( i = 1 ; i <= n ; i++ ) r = r + i*i ; ou r = 0 ; i = 1 ; cond = (i <= n) ; while (cond) { r = r + i*i ; i = i+1; cond = (i <= n);} IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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 IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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é IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Exemple int somme( int n) { int r = 0 ; for (i=1; i <= n; i++) r = r + i*i ; return r; } IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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 … IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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 Tableau remarque : T[i] = e IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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}; IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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]); } IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Spécification du maximum des éléments d ’un tableau d’entiersdonné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]) IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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){ … IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
Spécification -----------Algorithme | | | | JML JAVA IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml
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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml