Académique Documents
Professionnel Documents
Culture Documents
C’est :
Exemples :
(tableau[entier][max]) insérer(tableau[entier][max] T;
entier i,c,n)
(salaireTad) créerSalaire()
trier (tableau[entier][n] T)
18
Spécifier une méthode abstraite
Les clauses : la pré-condition
Exemples :
(tableau[entier][max]) insérer(tableau[entier][max] T;
entier i,c,n)
PRE : les valeurs de c sont calculées par la fonction
calcul. n est la taille de T. i est une position dans T.
(salaireTad) créerSalaire()
PRE : salaireTad est un type abstrait spécifié ou construit.
19
Spécifier une méthode abstraite
Les clauses : la post-condition
Exemple :
(tableau[entier][max]) insérer(tableau[entier][max] T;
entier i,c,n)
PRE : Les valeurs de c sont calculées par la fonction calcul.
n est la taille de T. i est une position dans T.
POST : Insère c dans T en position i. Retourne un accès à T.
MOD : T.
21
Spécifier une méthode abstraite
Les clauses : remarque
Une fois spécifiée, une méthode peut être utilisée dans un programme
en langage algorithmique et permet ainsi de retarder, quand cela est
nécessaire, un choix de construction dans un langage algorithmique ou
de mise en œuvre dans un langage de haut niveau.
23
Exemple
24
CANEVAS POUR
SPECIFICATION DE TAD
EN-TETE
SI COLLECTION SI NON COLLECTION
DESC DESC
Éléments de la collection et leur types Caractéristiques des entités et leurs types
(éventuels commentaires) (éventuels commentaires)
OP OP
AVEC PARCOURS SANS PARCOURS Primitives de gestion
créer une instance du type
affecter des valeurs aux caractéristiques
modifier ces valeurs
Primitives pour parcourir accéder à une valeur
initier un parcours, détruire
se positionner, Primitives de gestion
progresser, créer, insérer, choisir,
terminer appartenir, vider,
supprimer un élément,
détruire
25
Spécifier un type abstrait
C’est :
Exemples :
salaireTad(créerSalaire, affecterSalaire, modifierSalaire,
accéderSalaire, détruireSalaire) -> Solution 2 pour l’exemple 1 p.6
29
Spécifier un type abstrait
Exemple 1 (Solution 2) :
le TAD salaireTAD
salaireTad(créerSalaire, insérerSalaire, modifierSalaire, accéderSalaire)
DESC : Caractéristiques :
charge de type réel (charge salariale d’une année),
année de type entier (année correspondant à charge).
OP :
(salaireTad) créerSalairep()
POST : Crée une entité salaire avec une valeur par défaut.
Retourne un accès à cette entité.
affecterSalairep(salaireTad s; réel s1; entier s2)
PRE : le couple (s1, s2) est une valeur possible de s.
POST : affecte la valeur (s1, s2) à s.
MOD : s
modifierSalairep(salaireTad s; réel/entier v; entier i)
PRE : i = 1 si 1ère composante de s, i = 2 si seconde. v est réel ou entier.
POST : modifie la ième composante de s. La nouvelle valeur est celle de v.
MOD : s.
(réel/entier ) accéderSalairep(salaireTad s; entier i)
PRE : i = 1 si 1ère composante de s, i = 2 si seconde.
POST : retourne la valeur de la ième composante de s (réel ou entier).
30 + détruireSalairep(salaireTad s)
Mise en œuvre d’une abstraction
Exercice (suite solution 2)
Question 1 :
En utilisant le TAD salaireTad de la solution 2 précédente, écrire un
programme en ALGO créant et retournant une entité salaire quand les
valeurs de ses caractéristiques (charge et année) sont données en entrée.
31
Mise en œuvre d’une abstraction
Exercice (fin solution 2)
Question 2 :
En supposant qu’il existe une fonction saisie donnant les salaires des
50 dernières années, écrire la fonction (réel) masseSalariale () qui
calcule et retourne la masse salariale des 10 dernières années.
(réel) masseSalariale2() {
inclure saisie // saisie retourne un tableau des salaires
réel s ← 0 // des 50 dernières années
tableau[salaireTad][50] T ← saisie()
pour i de 41 à 50
s ← s + accéderSalairep(T[i], 1)
retourner(s)
}
32
Autre exemple :
LE TAD GENERIQUE ensemble
ensemble[elt](créerEns,insérerEns,choisirEns,appartientEns,oterEns,videEns)
DESC : Toute entité de type ensemble[elt] est une collection sans doublon d’éléments
de type elt. elt doit être défini ou construit.
OP :
(ensemble[elt]) créerEnsp()
POST : Crée un ensemble d’éléments de type elt initialement vide.
Retourne un accès à cet ensemble.
(ensemble[elt]) insérerEnsp(ensemble[elt] E, elt e)
PRE : La valeur de e n’est pas dans E.
POST : insère la valeur de e dans E et retourne E.
MOD : E
(elt) choisirEnsp(ensemble[elt] E)
PRE : E n’est pas vide.
POST : retourne un élément quelconque de E.
(booléen) appartientEnsp(ensemble[elt] E, elt e)
POST : retourne vrai si e est dans E, faux sinon.
(ensemble[elt]) oterEnsp(ensemble[elt] E, elt e)
PRE : La valeur de e est dans E.
POST : supprime la valeur de e de E et retourne E.
MOD : E
(booléen) videEnsp(ensemble[elt] E)
POST : retourne vrai si E est vide, faux sinon. + détruireEnsp(ensemble[elt] E)
33
Spécifier un type abstrait
Intérêts
35
SOLUTION QUESTION 1
ensemble[salaireTad] saisie10()
{
// Voir spécifications TADs
salaireTad s
// salaireTad, ensemble[elt]
entier a ← 2000
réel c
ensemble[salaireTad] E ← créerEnsp()
pour i de 1 à 10
{ s ← créerSalairep()
écrire(“année : “, a, “ charge ? “)
lire(c)
affecterSalairep(s, c, a)
E ← insérerEnsp(E,s)
a ← a+1
}
retourner(E)
}
36
SOLUTION QUESTION 2
Attention :
(réel) moyenne ()
utiliser le TAD ensemble
{ inclure saisie10
signifie que la collection
salaireTad s manipulée ne contient pas
réel v ← 0 de redondance d’éléments.
ensemble[salaireTad] E ← saisie10()
tant que videEnsp(E) = FAUX
{ Si des redondances de
s ← choisirEnsp(E) valeurs de salaires étaient
constatées, on utiliserait
E ← ôterEnsp(E, s)
plutôt le TAD liste (défini
v ← v + accéderSalairep(s, 1) plus loin dans un exercice).
}
retourner(v/10)
}
37
EXERCICE
Spécification :
partieInf(elt v; ensemble[elt] E)
PRE : Les valeurs de v et E sont connues.
POST : Supprime tous les éléments de E plus
grands que v selon la relation d’ordre sur
le type elt définie dans la fonction supérieur.
MOD : E.
39
SOLUTION (suite)
Programme en ALGO :
partieInf(elt v, ensemble[elt] E)
{
elt x
ensemble[elt] A ← créerEnsp()
tant que NON(videEnsp(E))
{
x ← choisirEnsp(E)
E ← ôterEnsp(E, x)
si NON(supérieur(x, v))
A ← insérerEnsp(A,x)
}
E←A
40
}
EXERCICE
41
1 – Fonction compter
SPECIFICATIONS :
(entier) compter (ensemble[elt] E)
POST : Compte et retourne le nombre d’éléments de E.
MOD : E peut être vidé s’il n’est pas sauvegardé.
PROGRAMME EN ALGO :
(entier) compter (ensemble[elt] E)
{ ensemble[elt] A ← créerEnsp()
A←E // A permet une sauvegarde de E
entier compte ← 0
elt x
tant que videEnsp(A) = FAUX
{ x ← choisirEnsp(A)
compte ← compte+1
A ← ôterEnsp(A, x) }
retourner(compte) }
42
2 – Fonction transférer
SPECIFICATIONS :
(tableau[elt][n]) transférer(ensemble[elt] E)
PRE : n est plus grand ou égal au nombre d’éléments dans E.
Utiliser la fonction compter avant de fixer la taille d’un tableau T déclaré localement.
POST : Insère les éléments de E dans T et retourne T.
MOD : E peut être vidé s’il n’est pas sauvegardé.
PROGRAMME EN ALGO :
(tableau[elt][n]) transférer (ensemble[elt] E)
{ tableau[elt][n] T // n est plus grand ou égal au nombre d’éléments de E
elt x
entier i ← 1
tant que (videEnsp(E) = FAUX) et (i ≤ n)
{ x ← choisirEnsp(E)
T[i] ← x
i←i+1
E ← ôterEnsp(E, x) }
retourner(T)
} 43 // E est vide à la fin car on a choisi de ne pas sauvegarder E
CANEVAS POUR
SPECIFICATION DE TAD
EN-TETE
SI COLLECTION SI NON COLLECTION
DESC DESC
Éléments de la collection et leur types Caractéristiques des entités et leurs types
(éventuels commentaires) (éventuels commentaires)
OP OP
AVEC PARCOURS SANS PARCOURS Primitives de gestion
créer une instance du type
affecter des valeurs aux caractéristiques
modifier ces valeurs
Primitives pour parcourir accéder à une valeur
initier un parcours, détruire
se positionner, Primitives de gestion
progresser, créer, insérer, choisir,
terminer appartenir, vider,
supprimer un élément Diapositive 25
détruire
44
REMARQUE
45
TAD et approche objet
46