Académique Documents
Professionnel Documents
Culture Documents
données
Chapitre 3: Les types de données abstraits (TDA)
Principes du TDA
Se placer à un niveau d'abstraction élevé
éviter les erreurs de conception
Programmer avec des opérations de haut niveau
qui ne dépendent pas de la représentation interne
qui permettent de changer de représentation
Encapsuler les données
n'accéder à la représentation interne que via des fonctions
l'utilisateur ne voit que les services (l’interface) pas la représentation
interne
Définition
Un ensemble de données organisé pour que les spécifications des
objets et des opérations sur ces objets soient séparées de la
représentation interne des objets et de la mise en œuvre des
opérations.
ELTINT.h ….
ELTINT.c ….
Ce fichier contient les
implémentation des signatures
des fonctions selon le type choisi.
Types de données
TD simple ou élémentaire ou primitif (entier,
booléen,…) : chaque variable de ce type peut
prendre une seule valeur du domaine à la fois
TD composé ou structuré (ou de référence en
java) (tableau, enregistrement…): permet le stockage
sous un même nom de variable de plusieurs valeurs
de même type (exemple tableau d’entiers) ou non
(exemple: type enregistrement)
Structures de Données
TD simples TD composés
TD individuels TD collectifs = SD
7
TDA ELEMENT: ELTPRIM.h
/***************************************************
* Fichier : ELTPRIM.H
* Contenu : Déclaration des primitives du TDA ELEMENT.
***************************************************/
#ifndef _ELTPRIM_H
#define _ELTPRIM_H
#include "ELTSDD.H"
/* Affectation du 2eme argument dans le 1er qui est donc modifié et passé par adresse */
void elementAffecter(ELEMENT*, ELEMENT);
TDA ELEMENT: ELTPRIM.h
/* Copie du contenu du deuxième argument dans le premier, les deux arguments
ont des adresses différentes (duplication)*/
void elementCopier(ELEMENT *, ELEMENT) ;
/* Libération de mémoire */
void elementDetruire (ELEMENT);
#endif
Stockage direct vs. indirect
On va considérer deux exemples (un TDA entier, un TDA
client.
On distingue les éléments à stockage
Direct: Un conteneur en stockage direct est propriétaire
des objets qu’il contient cad ses objets sont alloués et
libérés de façon automatique en même temps que le
conteneur.
e Valeur
Stockage direct vs. indirect
Indirect: Un conteneur en stockage indirect n’est pas
propriétaire des objets qu’il contient i.e. il n’est pas
responsable de l’allocation/libération des objets pointés. En C,
c’est la responsabilité du programmeur de libérer la mémoire
allouée dynamiquement.
e @ Valeur
TDA ELEMENT: ELTINT.h
Ce fichier contient la définition de l’élément entier:
/***************************************************
* Fichier : ELTINT.H
* Contenu : Déclaration de la structure de données adoptée
* pour une réalisation du TDA ELEMENT.
***************************************************/
#ifndef _ELTINT_H
#define _ELTINT_H
#endif
TDA ELEMENT: ELTINT.c
/********************************************************
* Fichier : ELTINT.C
* Contenu : Définition des primitives pour une réalisation par des
entiers du TDA ELEMENT.
********************************************************/
#include <stdio.h>
#include "ELTPRIM.H"
#define ELEMENT_VIDE 32767
void elementLire(ELEMENT * elt) {
printf(« \nun entier svp :") ;
scanf("%d",elt);
}
void elementAfficher(ELEMENT elt) {
printf(" %d ",elt);
}
TDA ELEMENT: ELTINT.c
void elementAffecter(ELEMENT * e1, ELEMENT e2) {
*e1 = e2 ;}
#ifndef _ELTCLT_H
#define _ELTCLT_H
typedef struct
{
char nom[20];
char adresse[30];
ELEMENT ici est un
int cin;
} elem, *ELEMENT; pointeur sur une structure
#endif
TDA ELEMENT: ELTCLT.c
/*************************************************
* Fichier : ELTCLT.C
* Contenu : Définition des primitives pour une réalisation par des clients du TDA
ELEMENT.
************************************************/
e1 @ cl1 e1 @ cl1
ali hamed
@ cl1 adr1 @ cl1 adr2
10 20
e2 e2
hamed hamed
adr2 adr2
20 20
TDA ELEMENT: ELTCLT.c
#ifndef _ELTSDD_H
#define _ELTSDD_H
#include "ELTCLT.H"
#endif