Vous êtes sur la page 1sur 8

Support de Cours

Algos & structures de données

Mr BERREHOUMA N.

Chapitre 3 Types Abstraits de Données

1. Abstraction des données

le langage de programmation met à la disposition du programmeur un certain nombre de types de base (types prédéfinies) permettant de manipuler directement les informations (valeurs) de nature très simple( entier, réel, booléen, caractère). La notion du type est définie comme un ensemble des valeurs munies d’opérations. Mais le programmeur doit également pouvoir manipuler des informations plus complexes ( les nombres rationnels, les nombres complexes, les polynômes…). Donc, il doit se doter des types plus complexes permettant de prendre en compte la complexité de ces informations. L’objectif est de transposer ce qui a été fait sur les types de base à des types plus complexe. C’est à dire décrire formellement ou bien spécifier un type (sort en anglais) en s’affranchissant des considérations d’implémentation (représentation)

Exemple : Le type chaîne de caractères On dispose d’un certain nombre d’opérations qu’on peut faire sur des chaînes de caractères :

1. Ecrire une constante exemple : «Bonjour »

2. Accéder au n ème caractère d’une chaîne.

Exemple :

n ème (‘bonjour’,4)=’j’.

.

3. L’opération de concaténation qui renvoi une chaîne Exemple : concat (‘bonjour’,’monsieur’)=’bonjour monsieur’.

4. Comparer deux chaînes.

Ces opérations nous permettent de manipuler des chaînes de caractères dans un algorithme tout en ignorant la manière dont les chaînes sont représentées sur la machine (même chose pour les entiers, les réels…). Donc, il faut pour chaque nouveau type de disposer un nombre suffisant d’opérations manipulant des informations de ce type.

2. Définition

L’abstraction des données est une méthode consiste à séparer :

D’une part, la façon d’utiliser les informations d’un nouveau type : c’est ce que l’on appellera spécifier un type. De l’autre part, les moyens permettant l’utilisation de ce type : ce que l’on appellera réaliser un type.

1

http://berrehouma.olympe-network.com

Support de Cours

Algos & structures de données

Mr BERREHOUMA N.

Exemple définition d’opérations d’un type date :

Le type date est muni par les opérations suivantes dont on donne les types des paramètres et du résultat :

différence :

date, date entier

/*nombre des jours séparant les deux dates*/

jour_de_la_semaine :

date chaîne de caractère /* la date est exprimée en jour à partir du 1/1/2000 */

en_jour : date entier

ajouter_jour : date, entier date année : date entier

mois :

jour :

date entier date entier

date → entier date → entier

définir_une_date : entier, entier, entier date

/* créer une date à partir de 3 entiers*/

On a défini les opérations sur le type date (on connaît quelles opérations, on peut effectuer sur ce type de données). Ces définitions ne sont pas suffisantes pour définir précisément l’effet de ces opérations. Une manière pour décrire ces effets consiste à écrire des équations qui mettent en rapport ces opérations.

Exemple

différence (d1,d2) =[en_jour(d2)]-[en_jour(d2)] année [definir_une_date(j,m,a)]= a

3. Spécification d’un type Spécifier un type consiste à lui donner :

1. un nom

2. décrire l’ensemble des valeurs qu’il doit représenter

3. définir un nombre suffisant d’opérations permettant d’utiliser ce type comme un type de base.

Un type abstrait de données est donc caractérisé par

1. son nom

2. les sortes qu’il manipule

3. les opérations sur les données

4. les propriétés sur les opérations

Sortes : ce sont des noms servant à représenter des ensembles des valeurs avec lesquelles, on va définir des opérations. Exemple naturel, réel, booléen… N.P on ne donne que leurs noms

Signature : la signature définie pour chaque opération son nom et son profil ( les sortes des paramètres et la sorte du résultat).

2

http://berrehouma.olympe-network.com

Support de Cours

Algos & structures de données

Mr BERREHOUMA N.

Exemple dans la sorte naturel la signature (le profil) de l’opération addition est le suivant :

+ : naturel, naturel naturel

plus (+) est une opération qui a deux paramètres de sorte naturelle , et qui produit un résultat de sorte naturelle.

Pair : naturel booléen

Zéro :

naturel

zéro est une opération constante qui n’a pas des paramètres et retourne un naturel qui sera toujours le même.

La forme générale d’une opération n aire est Opération : sorte 1 ,sorte 2 ,………sorte n sorte n+1

Remarques i. Lorsque on donne la signature d’une opération, il faut indiquer la place de ses arguments par des tirets

_ + _ : entier, entier entier

ii. parmi les opérations certaines sont appelées génératrices.

4. Choix des opérations Dans la spécification d’un TAD on s’intéresse seulement par les opérations primitives, c'est-à-dire des opérations qui manipulent directement la structure de données. Dans l’exemple des nombres rationnels, les opérations d’addition, soustraction, multiplication et division sont des opérations primitives. Par contre, une opération qui calcule la moyenne des deux rationnels n’est pas primitive, car elle peut être faite par l’addition de deux nombres puis la multiplication par ½ . Parmi les primitives, on distingue généralement :

Opération dite interne : si elle rend un résultat d’une sorte définie. Toutes valeur d’une sorte définie est le résultat d’une opération interne. Elle sert à construire les valeurs de sorte Exemple l’opération successeur permet de construire tous les entiers à partir de la constante 0. succ(0)=1, succ(1) =2, succ(succ(0))=2

Opération dite ‘observateur’ :si elle au moin un argument d’une sorte définie, et elle rend un résultat d’une sorte prédéfinie. Elle sert à vérifier les valeurs d’une sorte Exemple l’opération qui permet de vérifier si un nombre naturel est pair ou non.

A partir des opérations primitives, on peut par la suite enrichir le nouveau TAD par ajout d’opérations non primitives. Les opérations qui n’ont pas des arguments s’appellent des opérations constantes.

3

http://berrehouma.olympe-network.com

Support de Cours

Algos & structures de données

Mr BERREHOUMA N.

5. Une règle méthodologique

Quand on écrit une signature d’un TAD, on donne les opérations internes et les observateurs sur la sorte définie. On n’ajoute pas des opérations sur les sortes prédéfinies.

Exemples

i. Signature du TAD rationnel

Sorte

rationnel

Utilise

entier,booléen Opérations r : entier,entier rationnel num : rationnel entier den : rationnel entier equivalent : rationnel, rarionnel booléen inverse : rationnel rationnel

Opérations internes : r, inverse ; Opérations observateurs : num, den, equivalent.

ii. Signature d’un TAD vecteur

Sorte

Utilise

vecteur

élément, entier,booléen Opérations vecteur : entier,entiervecteur changer_i ème : vecteur,élément,entier vecteur i ème : vecteur,entier élément borne_inf :vecteur entier borne_max : vecteur entier init : vecteur, entier booléen

6. Les Axiomes Le problème est de donner une signification ou une sémantique au nom de la signature, aux sortes et aux opérations. Pour définir un TAD, on énonce les propriétés des opérations sous forme d’axiomes. Définition d’une terme : c’est une expression construite à l’aide des opérations, des variables et qui respecte la signature.

4

http://berrehouma.olympe-network.com

Support de Cours

Algos & structures de données

Mr BERREHOUMA N.

Exemple

Zéro

Pair(zéro)

Y+x+zéro

Les axiomes décrivent les propriétés des opérations sous forme d’équivalence entre termes

Exemple x+y = y+x x+zéro =zéro

(= signifie équivalent) (+) est une opération commutative

On peut remplacer ce qui à gauche par ce qui à droite et en vis versa. L’application des axiomes à des termes et à des sous terme permet d’obtenir d’autre expressions équivalentes

Exemple

zéro + x= x + zéro

En générale, on trouve une valeur d’une expression en la réduisant à l’aide des axiomes à une expression équivalente qui ne contient que des constantes et des opérations génératrices.

Remarque on peut remplacer les équations par d’autre équation contenant des conditions

b=vrai t 1 =t 2

 

t 1 = si b alors t 2 sinon t 3

b=faux t 1 =t 3

7. Le choix des axiomes

Règle1 : il faut écrire les axiomes qui définissent le résultat de la composition des observateur avec toutes les opérations interne.

Règle2 : dans le cas où certaines opération internes restent indéfinies, il faut écrire les axiomes qui définissent les résultats de ces opérations internes avec d’autre opérations internes.

Exemple revenons à l’exemple des rationnels

num(r(x,y) )= x den(r(x,y)) = y equivalent(r(x,x), r(1,1)) = vrai r(a,b) = mul (mul(a, inverse(b)), r(1,1)) inverse(r(a,b)) = r(b,a)

5

http://berrehouma.olympe-network.com

Support de Cours

Algos & structures de données

Mr BERREHOUMA N.

8. Préconditions

Ce sont des propriétés qui doivent être vérifiées pour que l’exécution de l’opération soit

possible. Les propriétés sont destinées à restreindre l’utilisation des opérations à des opérandes vérifiant certains prédicats. Remarque si une opération n’a pas des préconditions, c'est-à-dire que le domaine de cette opération est défini sur tout le produit cartésien des sortes d’argument Syntaxe opération (arguments) est définie ssi condition

9. Structure générale d’une signature d’un TAD

Sorte

nom de la sorte définie

Utilise

noms des sortes prédéfinies Opérations signatures des opérations Préconditions Préconditions éventuelles pour certaines opérations Axiomes

Exemple TAD tableau

Sorte

Utilise

tableau

Entier,élément, booléen Opérations tab : entier, entier tableau changer_i ème : tableau, élément, entier tableau i ème : tableau,entier élément borne_inf : tableau entier borne_sub : tableau entier init : tableau, entier booléen Préconditions i ème (T,i) est définie ssi borne_inf(t)iborne_sub(T) Axiomes

borne_inf(T)iborne_sub(T) i ème (changer_ i ème (T,i,e),i)= e

borne_inf(T)iborne_sub(T) et borne_inf(t)jborne_sub(T) et ij

i ème (i ème (changer_ i ème (T,i,e),j),j)= i ème (T,j)

Init (tab (i,j),k) = faux

borne_inf(T)iborne_sub(T) init(changer_ i ème (T,i,e),i)= vrai

borne_inf(T)iborne_sub(T) et ij init(changer_ i ème (T,i,e),j)= init(T,j)

borne_inf(tab(i,j))= i

borne_sub(tab(i,j))= j

borne_inf(changer_ i ème (T,i,e))= borne_inf(T) avec T: tableau, e: élément , I :entier

6

http://berrehouma.olympe-network.com

Support de Cours

Algos & structures de données

Mr BERREHOUMA N.

10. Implémentation des TAD

A partir d’une spécification de TAD, on peut créer des types concrets. On choisie un langage de programmation, ses propres types concrets d’objets et les opérations sur les valeurs de ces types nous permettent d’implémenter une spécification de TAD. La réalisation d’un type abstrait consiste donc à :

1. choisir une structure interne des données construite à partir des types de base du

langage (prédéfinis) et/ou des types déjà définis (tableaux ,pointeur,enregistrement

) ceci veut dire qu’on doit fixer une représentation des objet du TAD spécifié par ceux du langage de programmation.

2. analyser et programmer chaque opération du TAD. La programmation et réaliser en tenant compte de la structure choisie.

Pour l’analyse et la programmation deux points de vues peuvent être adopter

Statique (fonctionnel stricte)

Les opérations du TAD sont réalisées sans modification d’opérandes, on a alors des véritables fonctions mathématiques

Exemple Ajouter un élément à un tableau, le nouveau tableau porte un nom différent et l’ancien tableau est entièrement préservé

Remarque Très coûteux, car on doit souvent dupliquer des objets ou parties d’objets.

Dynamique (procédural) Les opérations du TAD sont réalisées avec modification des opérandes pour une question d’efficacité

Exemple Quand on ajoute un élément à un tableau, le nouveau tableau remplace l’ancien, il est désigné par le même identificateur, c'est-à-dire qu’il occupe le même emplacement mémoire donc l’ancien tableau est perdu. Cette solution est efficace en temps et en espace mémoire.

Remarques

a.

On peut mélanger les deux points de vues, en créant pour certaines opérations une version statique et une version dynamique.

b.

Une représentation est correcte si elle vérifie la spécification algébrique : on doit trouver que chaque axiome est respectée par les opération quand elles sont utilisées dans les cas prévus par les préconditions.

c.

Plusieurs implémentations satisfaisant la spécification algébrique peuvent être réalisées.

7

http://berrehouma.olympe-network.com

Support de Cours

Algos & structures de données

Mr BERREHOUMA N.

11. Démonstration des propriétés En logique mathématique, une spécification algébrique peut être considérée comme une théorie du calcul des prédicats, on appliquant les règles des déduction de la logique à partir des axiomes, on peut démontrer des propriétés, c'est-à-dire des théorèmes de cette théorie.

Consistance d’une spécification algébrique C’est une propriété importante pour une théorie logique.

Définition Une théorie logique équationnelle du premier ordre est dite consistante si elle ne contient pas de contradiction, c'est-à-dire elle ne contient pas des théorème vrai = faux . En spécification algébrique, on a un point de vue incrémentale un peu différent :

On suppose qu’on construit une spécification SPEC1 en utilisant un un SPEC0, on exige alors en plus de la simple consistance logique. Définition Une spécification SPEC1 qui utilise une SPEC0 est consistante relativement à SPEC0,si on ne peut pas démontrer dans SPEC0 un théorème nouveau Exemple Si on trouve pour une spécification un tableau T et un indice i tel qu’on puisse démontrer que i ème (T,i)=0 et i ème (T,I)=1, alors cette spécification n’est pas consistante par raport au TAD tableau

8

http://berrehouma.olympe-network.com