Table des matières
Introduction *
1) Les tableaux, les listes et les fichiers *
2) Les tableaux et les fichiers vus en cours de programmation *
3) Classes et hyperclasses HBDS versus classes C++ *
Les langages procéduraux comme le C présentent les notions de tableau infini, de liste et de fichier. Les tableaux et les listes servent plus particulièrement à stocker des éléments en mémoire alors que les fichiers sont souvent associés à la sauvegarde des éléments sur un disque.
Les langages orientés-objets comme C++ ou ADL (avec la méthode HBDS) introduisent les notions de classes, de membres (ou d'attributs), de pointeurs (ou de liens). Ces concepts "abstraits" sont souvent source de confusion pour le néophyte. On se propose ci-dessous de mettre en exergue les correspondances.
1) Les tableaux, les listes et les fichiers
Un tableau est une suite de variables de même type en accès direct : si T est un tableau alors Ti est une case de T (autrement dit une variable).
Une liste est une suite d'éléments chaînés entre eux. Contrairement à un tableau, la cardinalité (c'est-à-dire le nombre maximum d'éléments) d'une liste est non prédéfini.
Un fichier est un "récipient" (identifié par un nom) qui
contient des informations auxquelles, on peut accéder de façon
simple, fiable et rapide. Les accès sont séquentiels, directs
ou séquentiels indexés.
2) Les tableaux et les fichiers vus en cours de programmation
Pour simuler les tableaux, les listes et les fichiers théoriques, la CPRI vous fournit une bibliothèque de classes génériques ("templates") écrites en C++ en s'appuyant sur les tableaux et les fichiers C.
3) Classes et hyperclasses HBDS versus classes C++
Supposons que notre modèle HBDS soit composé d'une hyperclasse hD avec un attribut aD contenant 2 classes cA et cB ayant respectivement un attribut aA et aB et un lien L entre la classe cA et une classe cC portant un attribut aC. On suppose en outre que la classe cB possède un attribut contenant un algorithme mAlgo(param).
class hD {
public :
type_de_aD aD ;
virtual void Initialise( )=0 ; // fonction virtuelle pure qui empêche la création d'objet…
} ;
class cC ; // prototype de la classe cC nécessaire pour définir cA (elle se trouve plus loin)…
class cA : public hD { // cA hérite de la classe virtuelle hD
public :
type_de_aA aA ;
cC *L ; // liste d'objets de cC
void Initialise( ) { aD = (type_de_aD)0 ; aA = (type_de_aA)0 ; }
} ;
class cB : public hD { // cB hérite de la classe virtuelle hD
public :
type_de_aB aB ;
void Initialise( ) { aD = (type_de_aD)0 ; aB = (type_de_aB)0 ; }
type_du_retour_de_mAlgo mAlgo(type_de_param param) ; // prototype…
} ;
class cC {
public :
type_de_aC aC ;
} ;
// plus loin dans le fichier .cpp
type_du_retour_de_mAlgo cB::mAlgo(type_de_param param) {
…………..
instructions
…………..
} // cB::mAlgo
Pour faciliter la compréhension, on peut changer artificiellement le modèle HBDS pour l'adapter à la programmation :