Upload
roary-brennan
View
22
Download
2
Embed Size (px)
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
Citation preview
Quelques éléments d ’algorithmique et de spécification
Leur traduction en Java et Jml
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)
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 finie d’opérations élémentaires.
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.
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éesdonné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
Exemple
P : x = 4
TRAIT : x x + 1
Q : x = 5
remarque : 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 expressionou 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 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
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 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é
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}
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;
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.
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 = 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))]
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 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.
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
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
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 condition est 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 ;
our = 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 Tableauremarque : 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’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])
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.