Tableaux, listes, fichiers, classes et hyperclasses présentés par la méthode HBDS et simulés en C++

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++ *

Introduction

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).

La traduction directe en C++ est la suivante :

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 :