FR 2824160 A1 20021031 FR 0201480 A 20020207 La présente invention concerne d'une manière générale un logiciel d'ordinateur. Plus particulièrement elle concerne des structures de mémorisation de données. Dans le domaine de la programmation logicielle, différents types de structures de données peuvent être utilisés par des applications logicielles en fonction des besoins de l'application. Des exemples de structures de données utilisées habituellement incluent des tables de contrôle, des listes, des ensembles, des files d'attente, des réseaux, des arbres et des structures de données plus exotiques comme par exemple noir, rouge, etc. Chaque structure de données possède des avantages et des inconvénients. Certaines structures de données sont bonnes pour la mémorisation de données, mais pas pour la récupération de données. Par exemple une structure de données, qui mémorise des données d'une manière plus efficace que d'autres types peut nécessiter un temps moyen plus grand de récupération des données. L'inverse de la relation espace en fonction du temps peut être vrai pour d'autres structures de données. Par exemple une structure de données qui fournit un accès de récupération rapide peut nécessiter un espace de mémorisation en mémoire supérieur à un espace de mémorisation moyen. Dans des procédés et systèmes existants, un programmeur utilisant des structures de données doit sélectionner un type particulier de structure de données pendant la programmation. Par exemple, dans le langage C++, une structure de données de réseau peut être sélectionnée par la commande "Array myarray= newArray(...);". Un inconvénient de procédés existants est que la structure de données doit être choisie au niveau de "l'extrémité frontale" de l'agencement, pendant la programmation. S'il est déterminé ultérieurement que la structure de données n'est pas optimale pour les données utilisées pendant la durée d'exécution, il est nécessaire de réécrire et de compiler à nouveau le logiciel en utilisant une structure de données différente. Un procédé plus souple de sélection d'une structure de données consiste à utiliser une usine de production d'objets pour retarder le choix d'une structure de données et rendre un peu plus facile le changement de la structure de données à un instant ultérieur. Par exemple, des structures de données du conteneur sont communes dans la bibliothèque de gabarit du C++ standard. Le programmeur demande à l'usine de production d'objets une structure de données particulière. L'exemple de sélection de réseau dans le langage C peut impliquer les commandes "ObjectFactory *ofp= ...; Array myArray = ofp-> createArray (...);". Par exemple au lieu de créer un réseau directement, un programmeur peut, au lieu de cela, appeler un procédé createArray de l'usine de production d'objets. De cette manière, si le programmeur décide ultérieurement de modifier la mise en oeuvre du réseau, le seul emplacement, où le code doit être modifié est le procédé createArray dans l'usine de production d'objets et la réalisation même du réseau. Le programmeur n'a pas à revenir et modifier chaque cellule individuelle qui crée un nouveau réseau. Cette solution est encore limitée étant donné que le programme doit être recompilé pour tirer parti du nouvel agencement du réseau. Cette solution est limitée étant donné que le programmeur s' attend encore à traiter un réseau et est ainsi limité à l'interface qu'un réseau fournit. Ce qui est nécessaire c'est un procédé et un système pour modifier d'une manière plus efficace le type de structure de données afin d'optimiser la structure sur l'application. On décrit un procédé et un système pour créer et utiliser un conteneur générique en tant que structure de données utilisée dans un programme logiciel. La structure de données peut être spécifiée à l'instant de démarrage ou pendant une durée d'exécution. Si la nature des données change d'une exécution à l'autre, la structure de données peut être adaptée à un ensemble spécifique de données. Les structures existantes de données sont résumées à une interface générique destinée à être utilisée dans le conteneur. Le programme coopère avec le conteneur générique en utilisant l'interface générique, ce qui permet au conteneur d'ajouter, de supprimer et de verrouiller les données mémorisées dans le conteneur et de récupérer un code utilisé par le conteneur. Un programme utilise une usine de production d'objets pour créer une instance d'un conteneur générique possédant l'interface générique. Une table de mappage ou une autre structure de données est conservée pour mapper un appel de création de conteneur pour le conteneur approprié. Au moment de l'exécution, l'usine de production d'objets se réfère à la table de mappage pour déterminer quel type de structure de données il faut créer. Pour un programme très simple qui n'utilise qu'une seule structure de données, la table de mappage ne contient qu'une seule entrée. Pour un programme plus complexe, qui possède plusieurs sous-ensembles, dont chacun possède ses propres exigences spécifiques du point de vue mémoire, la table de mappage peut posséder une entrée différente pour chaque système. Les structures de données spécifiées peuvent être modifiées moyennant une modification des entrées dans la table de mappage. De façon plus précise l'invention concerne un procédé pour traiter des données en utilisant des structures de données de conteneur générique, caractérisé en ce qu'il consiste à : demander un conteneur générique pour mémoriser des données pour un sous-système d'un programme; créer une association entre une structure de base spécifique et le sous-système; créer une interface entre la structure spécifique de données et le conteneur générique ; créer la structure spécifique de données en uti- lisant l'association. Selon une autre caractéristique de l'invention, l'étape de demande comprend l'envoi d'une demande à une usine de production d'objets pour créer le conteneur, et que l'étape de création de la structure spécifique de données comprend la création du conteneur en un emplacement dans une mémoire et l'envoi du programme à un pointeur d'adresse de l'emplacement. Selon une autre caractéristique de l'invention, le programme comprend de multiples sous-systèmes. Selon une autre caractéristique de l'invention, l'étape de création d'une association comprend la création d'une entrée dans une table de mappage qui est corrélée à la structure spécifique de données du sous-système. Selon une autre caractéristique de l'invention, l'étape de création de la structure spécifique de données comprend en outre l'envoi, depuis le sous-système à une usine de production d'objets, d'un pointeur de fonction de comparaison pour comparer des entrées de données et un pointeur de fonction d'extraction de code pour extraire une valeur de code à partir du conteneur. Selon une autre caractéristique de l'invention, l'étape de création d'une interface comprend la création de commandes pour ajouter des entrées de données au conteneur, identifier des entrées de données dans le conteneur, retirer des entrées de données à partir du conteneur et extraire un code du conteneur. L'invention concerne également un support lisible par ordinateur, dans lequel est mémorisée une structure de données, caractérisé en ce qu'il comporte : un conteneur générique pour mémoriser des données; et une interface pour traiter les données conformément à des spécifications d'une structure de données sélectionnée, l'interface comprenant : une première interface qui ajoute des entrées de données au conteneur, une seconde interface, qui identifie des entrées de données dans le conteneur, et une troisième interface, qui retire des entrées de données à partir du conteneur. Selon une autre caractéristique de l'invention, la structure sélectionnée de données est spécifiée par une entrée dans une table de mappage, laquelle entrée est lue par une usine de production d'objets avant qu'un programme soit exécuté. Selon une autre caractéristique de l'invention, la structure sélectionnée de données est spécifiée au moment de l'exécution. Selon une autre caractéristique de l'invention, le conteneur comporte en outre un pointeur de comparaison servant à comparer des entrées de données et un pointeur d'extraction de code pour extraire une valeur de code à partir du conteneur. La figure 1 représente un schéma-bloc du système. La figure 2 représente un schéma-bloc d'un système informatique qui peut utiliser le conteneur générique. La figure 3 représente un organigramme du procédé utilisé dans un programme pour créer un conteneur. La figure 4 représente un organigramme du procédé utilisé pour créer un conteneur. La figure 5 représente un organigramme de l'utilisation de pointeurs de fonctions d'extraction de code et de comparaison. La figure 6 représente le schéma-bloc du système utilisant les pointeurs de fonctions d'extraction de code et de comparaison. La figure 1 représente un schéma-bloc du système 10. Le système 10 décrit un procédé de programmation utilisant un conteneur générique 40 en tant que structure de données. Après la programmation, différentes structures de données de mémoire peuvent être reconfigurées avant l'exécution du programme sans modification du code de programme. Le programme demande une structure de données de mémoire dynamique 40 à partir de l'usine 30 de production d'objets. Une table de mappage 50 ou une autre structure est utilisée par l'usine 30 de production d'objets pour décider quel type de conteneur particulier doit être envoyé au programme 20. Un programme logiciel 20 peut comporter une pluralité de sous-systèmes 22,24, 26, qui utilisent les structures de données pour traiter des données. Un programme simple 20 pourrait n'utiliser aucun sous-système, par exemple s'il utilise uniquement une structure de données ou si toutes les structures de données sont du même type. Dans l'exemple représenté sur la figure 1, le premier sous-système 22 peut représenter des "enregistrements de vendeurs", le second sous-système 24 peut représenter des "enregistrements d'employés" et le troisième sous-système 26 peut représenter le "traitement graphique". Le programme 20 comportant de multiples sous-systèmes 22,24, 26 peut utiliser différents types de structures de données pour chaque sous-système. Dans le système 10 de l'exemple représenté sur la figure 1, le sous-système 22 d'enregistrements secondaires utilise une structure de données de liste 44, le sous-système 24 d'enregistrements d'employés utilise une structure de données 42 du type en forme d'arbre, tandis qu'un sous-système 26 de "traitement graphique" utilise une structure de données 46 à table de contrôle. Le système 10 commande des conteneurs génériques 40 devant être utilisés pour mémoriser des données. Pendant le fonctionnement, des conteneurs spécifiques 42,44, 46 sont créés dans une mémoire 340 en fonction de la configuration de la table de mappage 50. Le sous-système de programme 22,24, 26 demande un conteneur générique 40 à partir de l'usine 30 de création d'objets. L'usine 30 de création d'objets crée le conteneur 42,44, 46 dans la mémoire 340 et transmet un pointeur d'adresse 62 du conteneur au sous-système 22,24, 26. Le pointeur 62 désigne dans la mémoire 340 l'emplacement ou la structure de données 42, 44,46 est mémorisée. Le code du sous-système 22,24, 26 interagit avec le pointeur 62. Les conteneurs spécifiques utilisent en commun la même interface de sorte que le programme n'a pas à être modifié pour être utilisé sur l'un ou l'autre des conteneurs spécifiques 42,44, 46. Chaque conteneur spécifique 42,44, 46 possède des propriétés de mémorisation distinctes, qui le rendent plus ou moins intéressant pour des applications particulières. Pour créer une interface de conteneur générique, on supprime des interfaces de différentes structures de données existantes pour créer une interface commune devant être utilisée par le système. Dans une forme de réalisation, chaque structure de données existante 42,44, 46, fournit l'interface suivante : Add (ContainerData, ContainerKey) Get(ContainerKeyData) Remove(ContainerKeyData) GetKey(ContainerKeyData). La commande Add ajoute une entrée au conteneur 40. La commande Get réalise la consultation d'une entrée dans le conteneur 40. La commande Remove retient une entrée du conteneur 40. La commande GetKey extrait ou calcule un code pour une donnée fournie. Les structures de données du type conteneurs peuvent être définies pour dériver d'une classe de base commune, désignée sous l'expression "conteneur" qui possède l'interface commune. Des sous-classes redéfinissent la réalisation d'interfaces pour convenir au type spécifique de mémorisation de données mis en oeuvre. Par exemple, une liste 44 pourrait annexer un nouvel élément de données à la fin de ces éléments existants. Une table de contrôle 46 pourrait, au lieu de cela, extraire le code de l'objet devant être mémorisé et positionner l'objet en fonction de la touche. Le système de programmation d'ensemble est neutre par rapport à un niveau de classe spécifique de la structure de données mise en oeuvre. L'application 20 recherche un conteneur générique de données 30 possédant l'interface correcte. Tant qu'une structure de données particulière ou une mise en oeuvre de classe est interfacée, elle peut être intégrée dans le système de conteneur générique 10. Un fichier de démarrage, par exemple une table de mappage 50, est conservé pour stocker des propriétés de classes de mémorisation de données, et les sous-systèmes correspondant du programme, qui utilisent ce type de mémorisation de données. Lorsque l'usine 30 de production d'objets est créée, il lit le fichier de démarrage 50 pour initialiser le mappage entre des sous-systèmes 22,24, 26 et des structures de données correspondantes 42,44, 46 devant être utilisées. La figure 1 représente une table de mappage de structure de données 50 comportant des entrées pour différents sous-systèmes 22,24, 26. Lorsqu'elle reçoit une demande pour un nouveau conteneur 40, l'usine 30 de production d'objets accède à la table de mappage 50 pour déterminer quel type de structure spécifique de données 42, 44,46 il faut créer et revenir au sous-système demandeur 22,24, 26. Dans l'exemple de la figure 1, la table de mappage 50 montre que le sous-système de traitement graphique 26 utilise une structure arborescente comme cela est représenté par l'entrée "GRAPH1 -> tree". Le soussystème 24 d'enregistrements d'employés utilise des données mémorisées dans une table de contrôle comme représenté par "EMP~DATA -> hash". Le sous-système 22 d'enregistrements de vendeurs utilise une structure de données en forme de liste comme cela est représenté par l'entrée "VEND~DATA -> list". Dans un programme compliqué 20 comportant de multiples sous-systèmes 22,24, 26, la table de mappage 50 possède de multiples entrées. Au démarrage, une structure de données du sous-système peut être modifiée par modification de l'entrée dans la table 50 de mappage de la mémoire de données. Dans une forme de réalisation, le système 10 à conteneur générique peut être utilisé pour tester la performance de programme de manière à déterminer la structure optimale de données pour un programme 20. Le conteneur générique 40 permet un test efficace de sous-classes de conteneurs 42,44, 46 au moyen d'entrées interchangeables dans la table de mappage 50. Un programme en boucle peut être utilisé pour tester différentes structures de données 42,44, 46 par insertion de ces structures de données 42, 44, 46 dans la table de mappage 50, puis en exécutant par exemple des fonctions d'addition, de suppression et de consultation. Le cadencement des boucles fournit une information indiquant si une structure de données 42,44, 46 fonctionne de façon appropriée. Dans une autre forme de réalisation, le système 10 à conteneur générique peut être utilisé pour reconfigurer un programme 20 pour un traitement plus efficace des données. Quelquefois un système 10 fonctionne en général bien, mais rencontre un ensemble particulier de données qui entraînent une dégradation de la performance. Si l'ensemble de données posant un problème est identifié, des structures différentes de données peuvent être testées à la place de la structure existante pour identifier une structure appropriée. Dans une forme de réalisation, le sous-système 22,24, 26 utilise également des fonctions pour extraire un code à partir d'une structure de données 42,44, 46 et pour comparer des entrées dans une structure de données 42,44, 46. Le sous-système 22,24, 26 transmet à l'usine 30 de production d'objets un pointeur 64 désignant la fonction d'extraction de code et un pointeur 66 désignant la fonction de comparaison. L'usine 30 de production d'objets transmet à son tour ces pointeurs 64,66 à la structure spécifique de données 42,44, 46, mémorisée dans la mémoire 340. La figure 2 représente un système informatique 300 comportant un processeur 310 connecté à un dispositif d'entrée 320 et à un dispositif d'affichage 330. Le processeur 310 accède à la mémoire 340 dans le système informatique 300, qui mémorise les données 350. Le logiciel 360 du programme est également mémorisé dans la mémoire 340. La mémoire 340 peut inclure la mémoire d'accès aléatoire (RAM) ou des types similaires de mémoires et peut mémoriser une ou plusieurs applications pour leur exécution par le processeur 310. La mémoire 340 peut également inclure une unité de disque dur, une unité de disquette, une unité de mémoire CD-ROM ou d'autres types de mémoire de données non volatile. Le dispositif d'entrée 320 peut comporter n'importe quel type de dispositif pour introduire une information dans le système informatique 300, comme par exemple un clavier, un bloc de touches, un dispositif de commande à curseur, un dispositif tactile ou un microphone. Le dispositif d'affichage 330 peut inclure n'importe quel autre type de dispositif destiné à présenter une information visuelle comme par exemple un moniteur d'ordinateur, un dispositif d'affichage à écran plat ou un panneau d'affichage. En fonctionnement, le dispositif d'entrée 320 reçoit des commandes qui incitent le processeur 310 à appeler le logiciel 360 pour récupérer ou traiter des données 350. Les résultats du traitement de données peuvent être affichés dans le dispositif d'affichage 330. L'utilisateur peut modifier la spécification du type de conteneur en introduisant des commandes dans le dispositif d'entrée 320, puis en amenant le processeur 310 à exécuter les instructions de programme 360 sur les données 350 pour évaluer la performance de différents types de structures de données. La figure 3 représente un organigramme du procédé de programmation pour créer une structure de données à conteneur générique 40. Le procédé peut être mis en oeuvre par exemple dans des modules logiciels dans des instructions de programme 360 pour leur exécution par le processeur 310. Un sous-système 22,24, 26 du programme 20 demande en 110 à un nouveau conteneur à partir d'une usine 30 de production d'objets ou d'un autre dispositif de création de conteneur. Le sous-système 22,24, 26 reçoit, en 120, de la part de l'usine 30 de production d'objets, un pointeur désignant un emplacement d'un conteneur 40 dans la mémoire 340. Le sous-système 22,24, 26 interagit alors, en 130, avec le conteneur 40 pour manipuler des données au moyen de l'envoi de commandes dans les interfaces désignant le pointeur. La figure 4 représente un organigramme du procédé pour créer un conteneur générique 40 en utilisant par exemple une usine 30 de production d'objets. Le procédé peut être mis en oeuvre par exemple dans des modules logiciels dans des instructions de programme 360 pour leur exé- cution par le processeur 310. Un créateur de conteneurs, tel qu'une usine 30 de production d'objets, reçoit en 210 une demande d'un conteneur 40 à partir du programme 20. L'usine 30 de production d'objets détermine en 220 quel sous-système 22,24, 26 du programme 20 demande le conteneur 40. L'usine 30 de production d'objets accède alors à la table de mappage 50 pour identifier le type de conteneur 40 spécifié pour le sous-système 22,24, 26. L'usine 30 de production d'objets détermine en 240 si le sous-système 22, 24,26 situé dans la table de mappage est assisté - c'est- à-dire s'il existe une préférence de conteneur 42,44, 46 spécifiée. S'il n'est pas assisté, alors dans une forme de réalisation l'usine 30 de production d'objets crée en 280 un type implicite de conteneur 40. Dans une autre forme de réalisation, l'usine 30 de production d'objets peut simplement envoyer une erreur ou une incitation à un utilisateur pour l'exécution d'une entrée. Si le sous-système est assisté, alors l'usine 30 de production d'objets détermine alors en 250 si le type de conteneur spécifié dans la table de mappage 50 est assisté - c'est-à-dire s'il est connu par l'usine 30 de production d'objets. Si le type de conteneur n'est pas assisté, l'erreur est délivrée en 270. Sinon un nouveau conteneur spécifique 42,44, 46 est créé en 260 dans une mémoire 340. L'usine 30 de production d'objets renvoie alors en 290 au sous-système 22,24, 26 du programme 20 un pointeur d'adresse de mémoire 62 désignant dans la mémoire 340 la position, dans laquelle le conteneur 40 a été créé. Puis le programme 20 interagit avec le récipient 40 au moyen de l'envoi de commandes interfacées au pointeur. Dans une forme de réalisation, l'usine 30 de production d'objets met en oeuvre également deux arguments facultatifs pour une fonction de comparaison et une fonction d'extraction de code utilisées par le sous-système 22, 24, 26. Les pointeurs 64,66 désignant ces fonctions sont transmis du sous-système 22,24, 26 à l'usine 30 de production d'objets. L'usine 30 de production d'objets à son tour transmet les pointeurs 64,66 à la structure de données spécifiques 42,44, 46 créée dans la mémoire 340. Le conteneur 40 mémorise les données sans tenir compte du type de données mémorisées. Les pointeurs sont utilisés pour traiter les données. Comme indiqué, différentes structures de données 42,44, 46 utilisent des moyens différents pour exécuter des fonctions de base : insertion, suppression et consultation. Certaines structures de données utilisent un "code" pour identifier l'emplacement de données. Par exemple un réseau utilise un code en tant qu'indice pour le réseau, de sorte que des données insérées ou récupérées à partir d'un code, n, désignent des données mémorisées dans la n-ème position du réseau. Une liste chaînée 44 peut simplement insérer ou supprimer des éléments à partir de l'avant ou de l'arrière de la liste 44, auquel cas aucune valeur de code n'est nécessaire. Une table de contrôle 46 peut permettre la mémorisation de données en n'importe quel emplacement, moyennant l'utilisation des valeurs de codes pour positionner et récupérer les données. De même avec une table de contrôle 46, le code dépend du type de données mémorisées. Pour un enregistrement d'employé, le code pourrait être le nom de l'employé ou le numéro de sécurité sociale. Pour un agencement de circuits intégrés (IC), tel qu'un type à très haute densité d'intégration (VLSI), la valeur de code pourrait être un nom de bloc de circuit. Pour créer une interface commune pour différents types de conteneurs 42,44, 46, on peut utiliser un pointeur d'extraction de code 64 et un pointeur de fonction de comparaison 66. Le pointeur de comparaison 66 permet au système 10 de rechercher des données, par l'intermédiaire d'un dispositif d'entrée 320 et d'un dispositif d'affichage 330, pour déterminer si une entrée particulière de données existe déjà. Par exemple, le pointeur 66 de la fonction de comparaison considère deux éléments de données et détermine s'ils sont égaux et, s'ils ne sont pas égaux, lequel est le plus grand. Cette fonction peut être utilisée pour tester la présence d'une donnée particulière dans un conteneur 40, ou bien peut être utilisée pour trier des données. Le pointeur d'extraction de code 64 permet au système d'identifier une entrée particulière au moyen d'une recherche dans la structure de données, sur la base du code. Par exemple, pour un élément de données, la fonction d' extraction de code extrait le code pour cette donnée. Le conteneur 40 peut alors utiliser le code pour mémoriser des données dans le conteneur 40 ou bien peut tester si les données contenues dans le même code ont déjà été mémorisées. La figure 5 représente un organigramme de l'utilisation des pointeurs 64,66 des fonctions d'extraction de code et de comparaison. Lors de l'exécution du programme 20, le sous-système 22,24, 26 appelle l'usine 30 de production d'objets et demande en 110 un conteneur 40. A cet instant, le sous-système 22,24, 26 sait quelle structure particulière de données 42,44, 46 lui est affectée et sait en général quelles sont les données. L'usine 30 de production d'objets et le conteneur 40 ne connaissent pas nécessairement le type de données qui sont traitées. En tant que partie de sa demande du conteneur 40 en 110, le sous-système 22,24, 26 envoie également, en 112, à l'autre usine 30 de production d'objets, des pointeurs 64,66 pour les fonctions d'extraction de code et de comparaison. La demande faite en 110 peut être séparée de l'émission, en 112, des pointeurs 64,66, ou bien des pointeurs 64,66 peuvent faire partie de l'argument demandant, en 110, le conteneur 40. L'usine 30 de production d'objets crée en 260 un conteneur spécifique 42,44, 46 dans la mémoire 340. L'objet en usine 30 mémorise également en 262 les pointeurs 64,66 des fonctions d'extraction de code et de comparaison dans la mémoire 340 dans le conteneur 42,44, 46. Dans une forme de réalisation, la création 260 du conteneur 44,42, 46 peut être une étape séparée de la mémorisation, en 262, des pointeurs 64,66. Dans une autre forme de réalisation, ces pointeurs peuvent être combinés en une étape 260, 262. L'usine 30 de production d'objets renvoie en 290 au soussystème 22,24, 26 un pointeur d'adresse 62 désignant l'emplacement de mémoire du conteneur 42,44, 46. La figure 6 représente un schéma-bloc d'une partie du système 10 représenté sur la figure 1. Dans la forme de réalisation de la figure 6, le premier sous-système 22 du programme 20 est représenté comme comportant une fonction d'extraction de code 63 et une fonction de comparaison 65. Dans une autre forme de réalisation, les fonctions 63, 65 peuvent être séparées du programme 20 et mémorisées par exemple dans une bibliothèque (non représentée). Le soussystème 22 demande en 110 un conteneur 40 à partir de l'usine 30 de production d'objets. Le sous-système 22 envoie également à l'usine 30 de production d'objets, des références telles que des pointeurs d'adresses en mémoire 64,66 à la fonction d'extraction de code 63 et à la fonction de comparaison 65. L'usine 30 de production d'objets crée en 260 un conteneur spécifique 44 dans la mémoire 340. Dans ce cas, une liste 44 est créée en 260 étant donné que c'est la structure spécifiée pour un sous-système 1 dans la table de mappage 50, ou une autre structure de données de référence. L'usine 30 de production d'objets transmet également les pointeurs 64,66 de fonctions d'extraction de code et de comparaison à la liste 44 créée dans la mémoire 340 de sorte que la liste 44 a accès à ces fonctions pen- dant le traitement. Lors de la création de la liste 44, l'usine 30 de production d'objets envoie au sous-système 22 une référence, comme par exemple un pointeur d'adresse 62, à un emplacement de la mémoire de la liste 44. En fonctionnement, différents conteneurs 42, 44, 46 peuvent utiliser différemment les pointeurs 64, 66 des fonctions d'extraction de code et de comparaison. Par exemple, si un conteneur 40 est une table de contrôle 46 et reçoit une demande de mémorisation de données, il appelle la fonction "extraction de code" 63 pour les données devant être mémorisées, puis mémorise les données devant être corrigées à l'emplacement correct en utilisant le code. Si le conteneur 40 est une liste triée 44, il compare la fonction de comparaison 65 pour comparer les nouvelles données à des données déjà mémorisées, jusqu'à ce qu'il ait identifié l'emplacement correct de la liste 44 pour mémoriser les données. Le programme 20 ne requiert aucun codage différent pour différentes structures de données 42,44, 46. Au lieu de cela, il utilise l'interface générique pour traiter les données, par exemple pour mémoriser de nouvelles données. Le conteneur respectif 42,44, 46 utilise alors un pointeur 64,66 des fonctions de comparaison d'extraction pour traiter la demande. Un pointeur est mémorisé dans un élément de données et, pendant le traitement, le système 10 peut avoir à déterminer si un élément particulier est déjà mémorisé. La fonction de comparaison 65 dirige le pointeur dans les données pour déterminer si un élément de données est déjà mémorisé. Par exemple, si les données sont mémorisées dans le sous-système d'enregistrements d'employés 24, les données devant être mémorisées peuvent être un nom et un numéro de sécurité sociale en une seule structure. L'usine 30 de production d'objets peut envoyer un appel en 110 pour créer un nouveau conteneur 40 pour réaliser le suivi de tous les employés . En tant que partie de l' appel de création 110, l'usine 30 de production d'objets peut également recevoir des pointeurs 64,66 désignant deux fonctions pour le traitement de la structure des employés. Pour un pointeur donné désignant une structure d'employés, la fonction "extraction de code" 63 sait comment récupérer le numéro de sécurité sociale. Lorsque des pointeurs sont donnés pour deux enregistrements d'employés, la fonction "comparaison" 65 sait comment extraire les noms de chaque enregistrement et comment comparer ces deux noms. En tant que partie du processus de création, l'usine 40 de production d'objets transfère les pointeurs de fonctions 64,66 aux moyens de création d'objets tels qu'une usine 30 de production d'objets. Ces moyens de création 30 mémorisent ces deux pointeurs dans l'instance nouvellement créée du conteneur 44. Ce conteneur 44 a alors accès à ces deux fonctions, lorsque cela est nécessaire. Bien que la présente invention ait été décrite en référence à des formes de réalisation particulières, des variantes sont possibles. La présente invention peut être mise en oeuvre selon des formes spécifiques sans sortir du cadre essentiel ou des attributs de ces formes. Par exemple dans certaines formes de réalisation représentées ici une information est mémorisée dans une table de mappage 50. Un spécialiste de la technique constatera que les différentes structures de données peuvent être utilisées à cet effet. De même dans certaines formes de réalisation on décrit le conteneur comme étant créé en utilisant une usine 30 de production d'objets et on se réfère à des techniques de programmation orientées objet. Un spécialiste de la technique constatera que différents procédés peuvent être utilisés pour créer un conteneur générique 40 et que le procédé n'est pas confiné à une programmation orientée objet. En outre, bien que des aspects de mise en oeuvre compatibles avec la présente invention sont décrits comme étant mémorisés en mémoire, le spécialiste de cette tech- nique notera que ces aspects peuvent être également mémori- sés sur ou lus à partir d'autres types de produits de pro- grammes d'ordinateurs ou d'autres supports lisibles en ordinateurs tels que des dispositifs de mémoire secon- daires, incluant des disques durs, des disquettes ou une mémoire CD-ROM ; onde porteuse provenant du réseau Internet ou d'un autre réseau ; d'autres formes de mémoires RAM ou de mémoire à lecture seule (ROM). Il est souhaitable que les formes de réalisation décrites ici soient considérées à tous égards comme illus- trative et non limitative et qu'on puisse se référer aux revendications annexées et à leurs équivalents pour déter- miner la portée de l'invention. REVENDICATIONS 1. Procédé pour traiter des données en utilisant des structures de données (40) de conteneur générique, caractérisé en ce qu'il consiste à : demander (110) un conteneur générique (40) pour mémoriser des données pour un sous-système (22) d'un programme (20); créer une association entre une structure de base spécifique (42) et le sous-système (22); créer une interface entre la structure spécifique de données (42) et le conteneur générique (40); et créer (260) la structure spécifique de données en utilisant l'association. 2. Procédé selon la revendication 1, caractérisé en ce que l'étape de demande (110) comprend l'envoi (110) d'une demande à une usine (30) de production d'objets pour créer le conteneur (40), et que l'étape de création (260) de la structure spécifique de données (42) comprend la création (260) du conteneur en un emplacement dans une mémoire (340) et l'envoi (290) du programme (20) à un pointeur d'adresse (62) de l'emplacement. 3. Procédé selon l' une ou l' autre des revendications 1 et 2, caractérisé en ce que le programme (20) comprend de multiples sous-systèmes (22). 4. Procédé selon l'une quelconque des revendications 1 à 3, caractérisé en ce que l'étape de création d'une association comprend la création d'une entrée dans une table de mappage (50) qui est corrélée à la structure spécifique de données (42) du sous-système (22). 5. Procédé selon l'une quelconque des revendications 1 à 4, caractérisé en ce que l'étape (260) de création de la structure spécifique de données (42) comprend en outre l'envoi, depuis le sous-système (22) à une usine (30) de production d'objets, d'un pointeur de fonction de com- paraison (66) pour comparer des entrées de données et un pointeur de fonction d'extraction de code (64) pour extraire une valeur de code à partir du conteneur (40). 6. Procédé selon l'une quelconque des revendications 1 à 5, caractérisé en ce que l'étape de création d'une interface comprend la création de commandes pour ajouter des entrées de données au conteneur (40), identifier des entrées de données dans le conteneur (40), retirer des entrées de données à partir du conteneur (40) et extraire un code du conteneur (40). 7. Support (340) lisible par ordinateur, dans lequel est mémorisée une structure de données, caractérisé en ce qu'il comporte : un conteneur générique (40) pour mémoriser des données ; et une interface pour traiter les données conformément à des spécifications d'une structure de données sélectionnée (42), l'interface comprenant : une première interface qui ajoute des entrées de données au conteneur (40), une seconde interface, qui identifie des entrées de données dans le conteneur (40), et une troisième interface, qui retire des entrées de données à partir du conteneur (40). 8. Support selon la revendication 7, caractérisé en ce que la structure sélectionnée de données (42) est spécifiée par une entrée dans une table de mappage (50), laquelle entrée est lue par une usine (30) de production d'objets avant qu'un programme (20) soit exécuté. 9. Support selon l' une ou l' autre des revendications 7 et 8, caractérisé en ce que la structure sélectionnée de données (42) est spécifiée au moment de l'exécution. 10. Support selon l'une quelconque des revendications 7 à 9, caractérisé en ce que le conteneur (40) com- porte en outre un pointeur de comparaison (66) servant à comparer des entrées de données et un pointeur d'extraction de code (64) pour extraire une valeur de code à partir du conteneur (40).