1 / 46

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

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.

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  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. 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 finied’opérations élémentaires. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

  5. 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

  6. 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

  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ées) et r (résultats) peuvent être composés de plusieurs valeurs. 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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

  9. 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

  10. 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

  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 IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

  12. Affectation variable  expression ou variable := expression Traduction Java variable = expression 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. 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 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. 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 IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

  17. 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

  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. 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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

  20. 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

  21. 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

  22. 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

  23. 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

  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. 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 = 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

  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 IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

  27. 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

  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 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) 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]) IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

  31. 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

  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é. 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 conditionest true, les instructions sont exécutées. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

  34. 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

  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 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. 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é 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; } 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 … 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  Tableau remarque : T[i] = e 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}; 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]); } IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

  43. 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

  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){ … IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

  45. Spécification -----------Algorithme | | | | JML JAVA 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. IB1 2007-2008 Structures algorithmiques, Traduction Java et Jml

More Related