G. Falquet, CUI, Université de Genève 1 de 31
Types abstraits
Abstraction - motivations
Notion de type abstrait
Spécification algébrique des TA
G. Falquet, CUI, Université de Genève 2 de 31
Abstraction
Abstraction = se libérer des détails, simplifier, généraliser
En structures de données
Modèle de la machine : ensemble de cellules mémoire
Types de base : entiers, flottants, caractères, pointeurs
Types composés : tableaux de T, n-tuples de T1, T2, …
Types abstraits : indépendant de la représentation
G. Falquet, CUI, Université de Genève 3 de 31
Types et ensembles
Le même ensemb
le peut représenter des choses de différentes natures
Ensemble des nombres :
1.date (en nombre de jours depuis le 01.01.1900)
2.poids (en grammes)
3.durée (en jours)
4.longueur (en mètres)
Mais les opérations sont différentes
date –
date
OK
date + date
???
poids + poids
OK
poids * poids
???
durée + durée
OK
longueur * longueur
OK
G. Falquet, CUI, Université de Genève 4 de 31
Types et opérations
Un type de données est caractérisé par ses valeurs ET ses opérations
On n’a pas forcément besoin de connaître les valeurs
Pour autant qu’on puisse en extraire l’information voulue par une opération
nom_jour : date --> chaîne de car
actères
nom_mois : date --> chaîne de car
actères
mois : date --> entier
année : date --> entier
Peu importe la représentation utilisée pour les valeurs de date :
nb. jours depuis 1.1.1900, nb. minutes depuis 1.1.1900, 3 entiers (J, M, A), etc.
G. Falquet, CUI, Université de Genève 5 de 31
Représentation d’un objet complexe
Différentes représentations d’un graphe
Matrice booléenne
Listes d’adjacence
Tableau des arcs
etc.
Remarques
Pour chaque représentation écriture de programmes différents
p.ex. “trouver les tâches dépendant de T”
Comment se libérer de la diversité des représentations ?
G. Falquet, CUI, Université de Genève 6 de 31
Représentations d’un graphe
The Design and Analysis of
Computer Algorithms
Aho, Hopcroft, Ullman
G. Falquet, CUI, Université de Genève 7 de 31
Signification des opérations
Représentations identiques (deux entiers), mêmes opérations, sens différents
Opérations
opér
ation
Comparer
(a, b : Coordonnées) {
retourner a.x = b
.x et a.y = b
.y }
opération Comparer(a, b : Fraction) {
retourne a.num * b
.den = a.den * b
.num }
prodédure
Additionner
(a, b : Coordonnées) {
c.x = a.x + b
.x; c.y = a.y + b
.y; retourner c }
procédure
Additionner
(a, b : Fr
actions) {
c.num = a.num*b
.den + b
.num*a.den; c.den = a.den*b
.den;
retourner c }
G. Falquet, CUI, Université de Genève 8 de 31
Conséquences
Séparer
la définition (spécification) abstraite du type
son implémentation (structures de données et algorithmes)
Comment définir abstraitement les opérations ?
approche orientée modèle
approche algébrique
En programmation :
sépararer
l’interface d’un type (partie publique)
son implémentation (par
tie privée)
=> programmation modulaire, encapsulation, "data hiding", programmation OO
G. Falquet, CUI, Université de Genève 9 de 31
Deux approches
Spécification orientée modèle
Types "prédéfinis" : entier, réels, booléens, …, séquence, ensemble, fonction
Construction d’une représentation par composition des types prédéfinis
Opérations :
spécification implicite par pré et post condition
spécification explicite : opér
ations sur les représentations
Approche algébrique
Uniquement basée sur les opérations
Définition des propriétés des opérations par des équations (=)
G. Falquet, CUI, Université de Genève 10 de 31
Types abstraits algébriques
Présentation d’un TA = {signatures d’opérations} + {propriétés}
On ne dit rien sur la représentation des objets de ce type
On définit le sens des opérations par des équations
plus abstrait (général) que des algorithmes
Spécification algébrique
SORTES : noms donnés aux différents types de valeurs
PROFIL d’une opération : sorte des paramètres et du résultat
AXIOMES : équations qui spécifient le comportement des opérations
forme :
expression == expression
ou
expression == expression ET … => expression == expression
G. Falquet, CUI, Université de Genève 11 de 31
SPECIFICATION Booléens
sortes
bool
opérations
vr
ai
:
-> bool;
// constante
faux
:
-> bool;
// constante
non _
: bool
-> bool;
_et_
: bool, bool
-> bool;
// notation infixée
_ou_
: bool, bool
-> bool;
axiomes
variables
X, Y
: bool;
// pour tout X et tout y
1.
non vr
ai == faux;
2.
non non X == X;
3.
vr
ai et X == X;
4.
faux et X == faux;
5.
vr
ai ou X == vr
ai;
6.
faux ou X == X; etc.
G. Falquet, CUI, Université de Genève 12 de 31
Utilisation des axiomes
1.
non vr
ai == faux;
2.
non non X == X;
3.
vr
ai et X == X;
4.
faux et X == faux;
5.
vr
ai ou X == vr
ai;
6.
faux ou X == X;
(non vr
ai) ou faux
== faux ou faux
(par 1.)
==faux
(par 6.)
non (vr
ai et faux)
== non (faux)
(par 3.)
== non (non vr
ai)
(par 1.)
== vr
ai
(par 2.)
G. Falquet, CUI, Université de Genève 13 de 31
Exemple: Cercle
SPECIFICATION
Cercle
SORTES
entier
, r
ationnel, cercle
OPERATIONS
cercle-unité : -> cercle
// centre (0, 0), r
a
y
on 1
tr
anslater : cercle, entier
, entier -> cercle
elargir : cercle, entier -> cercle
perimetre : cercle -> r
ationnel
r
ay
on : cercle -> entier
centre-
x : cercle -> entier
// coordonnée x du centre
centre-
y : cercle -> entier
// coordonnée y du centre
G. Falquet, CUI, Université de Genève 14 de 31
Graphiquement
tx
ty
translater(cercle-unité, tx, ty)
er
elargir(C, er)
C
cercle-unité
G. Falquet, CUI, Université de Genève 15 de 31
Axiomes
VARIABLES
X, Y
, Z, DR: entier; C: cercle;
Coordonnées du centre et r
a
y
on du cercle unité
centre-
x (cercle-unité) == 0
centre-
y (cercle-unité) == 0
r
ay
on (cercle-unité) == 1
La tr
anslation modifie les coordonnées du centre
centre-
x(tr
anslater(C, X, Y)) == centre-
x(C)+X
centre-
y(tr
anslater(C, X, Y)) == centre-
y(C)+Y
mais pas le r
ay
on
r
ay
on(tr
anslater(C, X, Y)) == r
a
y
on(C)
G. Falquet, CUI, Université de Genève 16 de 31
Axiomes (suite)
Elargir ne modifie pas les coordonnées du centre
centre-
x(elargir(C, Z)) == centre-
x(C)
centre-
y(elargir(C, Z)) == centre-
y(C)
mais change le r
ay
on
r
a
y
on(elargir(C, Z)) == r
a
y
on(C)+Z
L’élargissement ne doit pas donner un cercle de rayon négatif
Précondition à l’application de l’opération :
PRE
elargir(C, Z) == r
ay
on(C) + Z >= 0
elargir(cercle-unité, -2) n’est pas défini --->
fonction partielle
G. Falquet, CUI, Université de Genève 17 de 31
Exemples
r
ay
on(tr
anslater(elargir(cercle-unité, 12), 5, 7)
== r
ay
on(elargir(cercle-unité, 12)
== r
ay
on(cercle-unité) +12
== 1 + 12
== 13
r
ay
on(elargir(elargir(cercle-unité, 5), –8))
pas défini car
elargir(elargir(cercle-unité, 5), –8)
défini seulement si
r
a
y
on(elargir(cercle-unité, 5)) + –8 >= 0
mais
r
a
y
on(elargir(cercle-unité, 5))
== r
a
y
on(cercle-unité) + 5 == 6
et 6 + –8 pas >= 0
G. Falquet, CUI, Université de Genève 18 de 31
SPECIFICATION Naturels
UTILISE
Bool
SORTES
nat
OPERATIONS
0 : -> nat;
// constante
succ : nat -> nat;
// successeur
_+_ : nat, nat -> nat;
_–_ : nat, nat -> nat;
_*_ : nat, nat -> nat;
_^_ : nat, nat -> nat;
_=_ : nat, nat -> bool;
G. Falquet, CUI, Université de Genève 19 de 31
AXIOMES (nat)
VAR
X, Y : nat;
1.
X + 0 == X;
2.
X + succ(Y) == succ(X + Y);
3.
0 – X == 0;
// éviter de sortir des entiers naturels.
4.
X – 0 == X;
5.
succ(X) – succ(Y) == X – Y
;
6.
X * 0 == 0;
7.
X * succ(Y) == X + (X * Y);
8.
X ^ 0 == succ(0);
9.
X ^ succ(Y) == X * (X ^ Y);
10.
0 = 0 == vr
ai;
11.
succ(X) = 0 == faux;
12.
0 = succ(X) == faux;
13.
succ(X) = succ(Y) == X = Y
G. Falquet, CUI, Université de Genève 20 de 31
Tableaux
Un tableau est un ensemble d’éléments numérotés à partir de 0.
Les éléments n’ont aucune propriété particulière à satisfaire
spécification
Element
sortes elem
spécification
T
ableau(Element)
utilise
Bool, Nat
sortes
tab
opérations
init : elem -> tab;
// initialise le tableau a
v
ec une
v
aleur elem
_ [ _ ] : tab
, nat -> elem;
// accéder à un élément : a[i]
_ [ _ ]
_ : tab
, nat, elem -> tab;
// modifier un élément : a[i]
x
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !