Brevet FR2844068A1 — publié le 20040305

La présente invention concerne, globalement, des systèmes d'ordinateur et, plus particulièrement, un procédé pour sauvegarder et restaurer automatiquement des données dans un système d'ordinateur employant un logiciel orienté objet. Lorsque l'on manipule des informations mémorisées dans un système logiciel orienté objet, les développeurs du logiciel doivent souvent sauvegarder certaines ou la totalité des valeurs des données contenues dans un objet de mémorisation de données, de sorte que les valeurs peuvent être restaurées à leurs états d'origine après qu'elles ont été modifiées. Afin de procurer un point de reprise des données pour un objet de mémorisation de données (ou simplement "objet de mémorisation"), des procédés existant précédemment affectent typiquement des variables pour contenir des copies de chaque valeur de données individuelles qui doit être sauvegardée, mémorisent les valeurs de données dans les valeurs correspondantes et restaurent les valeurs aux valeurs de point de reprise d'origine après que toutes les modifications sur les données ont été effectuées. En variante, une copie de sauvegarde complète de l'objet de mémorisation de données est effectuée et la version de travail de l'objet de mémorisation est remplacée par la copie de sauvegarde entière après avoir effectué les modifications sur les données dans l'objet de mémorisation. Ce dernier procédé demande de copier le contenu entier de l'objet de mémorisation de données et ces deux procédés demandent au développeur de se souvenir de réinitialiser les valeurs de données après que toutes les modifications sur les données d'origine ont été effectuées. Le procédé décrit propose un système qui sauvegarde l'état d'un objet de mémorisation de données et restaure automatiquement l'état sauvegardé après que les données d'origine ont été modifiées. Dans un mode de réalisation, "un objet point de reprise" est créé à l'intérieur d'une fonction utilisateur, avec un pointeur sur l'objet de mémorisation de données d'intérêt. Ensuite, les zones de données qui doivent être sauvegardées sont enregistrées avec l'objet point de reprise. L'objet point de reprise sauvegarde ensuite les zones enregistrées dans une mémoire temporaire. Après qu'une fonction utilisée par un développeur de logiciel ou autre utilisateur système a achevé toutes les modifications sur les valeurs des données dans l'objet de mémorisation, l'objet point de reprise pour cette fonction est détruit par un mécanisme de "destructeur" qui amène automatiquement la totalité des valeurs de données dans l'objet de mémorisation de données à être restaurées à leurs états d'origine. Le langage de programmation C++ supporte ce concept du procédé de "destructeur" conçu pour permettre une "récupération de place en mémoire" (nettoyage de mémoire) après qu'une fonction a complété son utilité. L'objectif principal d'un destructeur est la désattribution de mémoire, moment auquel des "fuites" de mémoire peuvent être au mieux évitées. Un aspect non évident du présent procédé est qu'il utilise un destructeur, ou son équivalent, pour un objectif autre que la désattribution de mémoire. Le présent procédé restaure automatiquement également les données jalonnées de points de reprise si une certaine erreur ou situation inattendue amène un programme à mal fonctionner, amenant l'objet point de reprise à sortir de l'espace de validité. Ainsi, l'invention concerne un procédé pour sauvegarder et restaurer automatiquement des données contenues dans un objet de mémorisation de données dans un environnement logiciel orienté objet, caractérisé en ce qu'il comprend les étapes consistant à créer un objet point de reprise à l'intérieur d'une fonction utilisateur ; enregistrer, avec l'objet point de reprise des zones de données dans l'objet de mémorisation qui doivent être modifiées ; créer une copie temporaire des zones dans l'objet de mémorisation, comprenant les valeurs de données pour les zones, qui doivent être modifiées par ladite fonction utilisateur ; et restaurer les valeurs des données dans l'objet de mémorisation de données à leurs états d'origine, en utilisant les valeurs des données mémorisées dans ladite copie temporaire lorsqu'une sortie est effectuée à partir de la fonction utilisateur, après que les valeurs des données des zones dans l'objet de mémorisation ont été modifiées. Avantageusement, ladite copie temporaire des zones qui doivent être modifiées est mémorisée dans l'objet point de reprise. Avantageusement, ladite copie temporaire des zones qui doivent être modifiées sont mémorisées en tant que paires clés/valeurs. Avantageusement, le procédé comprend l'étape supplémentaire consistant à créer une fonction de destructeur pour l'objet point de reprise pour restaurer lesdites valeurs des données. Avantageusement, la fonction de destructeur comprend une fonction qui s'exécute lorsqu'une sortie est effectuée à partir de la fonction utilisateur. Avantageusement, la fonction de destructeur est exécutée lorsque l'objet point de reprise sort de l'espace de validité. L'invention concerne également un système pour sauvegarder et restaurer automatiquement des données contenues dans un objet de mémorisation de données dans un environnement logiciel orienté objet, caractérisé en ce qu'il comprend : un objet point de reprise ayant un pointeur 106 sur l'objet de mémorisation, pour créer une copie des zones dans l'objet de mémorisation de données, comprenant des valeurs de données associées, qui doivent être modifiées ; et une fonction de destructeur appelée après que les modifications sur les valeurs des données dans l'objet de mémorisation ont été achevées, pour amener ainsi la totalité des valeurs des données dans l'objet de mémorisation de données à être restaurées à leurs états d'origine. Avantageusement, il comprend, en outre, des fonctions pour sauvegarder et récupérer lesdites valeurs des données. Avantageusement, ladite copie dans l'objet de reprise comprend des paires clés/valeurs desdites zones dans l'objet de mémorisation de données qui doivent être modifiées, pour identifier des valeurs des données dans l'objet de mémorisation de données qui doivent être restaurées. Avantageusement, la fonction de destructeur est exécutée lorsque l'objet point de reprise sort de l'espace de validité. La figure 1 est un schéma illustrant des composants logiciels donnés en exemple dans un système orienté objet avec lequel le présent procédé est utilisé ; et La figure 2 est un organigramme illustrant des étapes données en exemple qui peuvent être exécutées dans la mise en pratique d'un mode de réalisation du présent procédé. Le présent procédé opère dans un environnement de programmation logiciel orienté objet pour sauvegarder et restaurer automatiquement l'état d'un objet (objet de mémorisation de données) utilisé pour la mémorisation des données. Le procédé utilise un objet "point de reprise" pour permettre à un développeur de logiciel ou autre utilisateur système utilisant un langage de programmation orientée objet, tel que C++, de sauvegarder ou de reprendre l'état des données spécifiées mémorisées dans un objet, de modifier les données et d'avoir les données automatiquement restaurées à leur état initial après que les données ont été modifiées. La figure 1 est un schéma illustrant des composants logiciels exemplaires dans un système orienté objet avec lequel le présent procédé est utilisé. La Figure 2 est un organigramme illustrant une séquence d'étapes données en exemple exécutées dans la mise en pratique d'un mode de réalisation de la présente invention. L'opération du présent procédé est mieux comprise en se rapportant aux Figures 1 et 2 en liaison l'une avec l'autre. L'implémentation du présent procédé demande l'existence de (ou la création de) fonctions utilitaires pour établir, modifier, récupérer des valeurs de données mémorisées dans, ou associées à l'objet de mémorisation de données 101. Ces fonctions sont représentées sur la figure 1 comme fonctions 130 et 135, respectivement. L'organigramme de la figure 2 suppose que, à un certain point avant la mise en #uvre du présent procédé, les classes d'objets nécessaires et les fonctions ont été déclarées. Ces objets/fonctions sont décrits en détail ci-dessous en se référant au Tableau 1. Comme cela est représenté sur les figures 1 et 2, à l'étape 210, un objet de mémorisation de données 101 est créé. Le terme "objet de mémorisation de données" vise à indiquer que l'objet particulier comporte des données 102 associées à celui-ci ; l'objet ne doit pas nécessairement être utilisé principalement pour la mémorisation des données. Dans de nombreux cas, l'objet de mémorisation de données 101 existera déjà et, en conséquence, il ne sera pas nécessaire de le créer à ce moment là. A l'étape 215, un objet point de reprise 105 est créé à l'intérieur d'une fonction utilisateur 108, avec un pointeur 106 sur l'objet de mémorisation de données 101. Comme partie du code pour l'objet point de reprise, un développeur de programme ou autre utilisateur crée une fonction 120 appelée "destructeur" qui, dans le cas présent, est un procédé sur la classe d'objet "point de reprise" qui a été précédemment déclaré. Dans le langage de programmation C++, les classes d'objets ont chacune un procédé appelé "destructeur" qui est appelé lorsque l'objet est détruit. Les objets peuvent être détruits en sortant de l'espace de validité ou en étant annulés explicitement par le programmeur. Comme cela sera expliqué cidessous en se référant à une étape 230, une sortie de la fonction utilisateur 108 amène l'objet point de reprise 105 à sortir de l'espace de validité, ce qui à son tour entraîne l'exécution d'un destructeur de classe de point de reprise. Dans d'autres langages de programmation orientés objet, un mécanisme du type "destructeur" fonctionnellement analogue peut être appliqué pour restaurer les valeurs des données modifiées sur une sortie satisfaisante d'une fonction. Tout ce qui est nécessaire est un mécanisme pour forcer un bloc de code à être exécuté lors de la sortie d'une fonction. Par exemple, après tout bloc quelconque "essayer" dans le langage de programmation Java, un bloc "finalement" peut être spécifié. Le bloc "finalement" s'exécutera, que les sorties du bloc "essayer" soient effectuées normalement ou exceptionnellement. En général, un procédé "fermer", appelé à la fin d'une fonction utilisateur, peut être employé pour procurer un équivalent fonctionnel au destructeur C++. La fonction de destructeur peut exister, par exemple, dans une bibliothèque, avant la présente étape. A l'étape 220, les zones de données spécifiques 103 qui doivent être reprises, à savoir sauvegardées, sont enregistrées avec l'objet point de reprise 105. Ces zones de données 103 comprennent la totalité des éléments de données mémorisées dans l'objet de mémorisation de données 101 qui devront être probablement modifiées pendant un développement de programme particulier ou une session de test. A l'étape 225, l'objet point de reprise appelle la fonction "sauvegarder" 110 pour sauvegarder une copie des zones de données enregistrées 103 dans une mémoire temporaire 107 dans l'objet point de reprise 105. Dans un mode de réalisation donné en exemple du présent procédé, ces zones de données 103 sont mémorisées comme paires clés/valeurs. Les zones de données 103 qui doivent être sauvegardées constitueront typiquement un sous-ensemble des données 102 associées à un objet de mémorisation de données 101, simplifiant en conséquence la procédure de point de reprise à l'opposé des procédés précédents qui sauvegardent la totalité des données dans l'objet de mémorisation. A l'étape 230, une fonction utilisateur 108 exécute ensuite un code arbitraire, qui comprend des opérations qui modifient certaines ou la totalité des valeurs des données 103 associées à l'objet de mémorisation de données 101, dont les valeurs ont été sauvegardées dans la mémoire temporaire 107. Enfin, à l'étape 235, après que l'utilisateur système a achevé toutes les modifications sur les valeurs de données dans l'objet de mémorisation de données 101, l'exécution de retour dans la fonction utilisateur 108 amène l'objet point de reprise 105, qui est à l'intérieur de l'espace de validité de la fonction utilisateur de sortir de l'espace de validité. Le destructeur pour la classe de "point de reprise" est ensuite appelé automatiquement. lequel amène la totalité des valeurs de données dans l'objet de mémorisation 101 à être restaurées à leur état d'origine. Plus précisément, la fonction de destructeur 120 est codée pour récupérer des valeurs de données pour chacune des zones sauvegardées dans la mémoire temporaire 107 dans l'objet point de reprise 105, en utilisant les paires clés/valeurs mémorisées dans celui-ci. Après récupération, les zones respectives 103 dans l'objet de mémorisation de données 101 sont ensuite restaurées à leur valeur d'origine en utilisant les valeurs de données récupérées. La fonction utilisateur ne modifie pas les valeurs mémorisées comme vues par la fonction appelante (programme principal) 100 du fait qu'un objet point de reprise 105 est créé par la fonction utilisateur 108 avant que les données 102 dans l'objet de mémorisation aient été modifiées. Ainsi, lorsque l'objet point de reprise est détruit à la fin de l'appel de fonction utilisateur, les valeurs sauvegardées sont restaurées et le programme principal ne voit jamais quelconque changement. Un exemple d'un environnement de travail dans lequel le présent procédé peut être utilisé est représenté ci-après. L'exemple reflète une situation typique dans laquelle un outil CAD est employé pour la conception de circuits. Dans cet exemple, on suppose qu'il existe un objet de mémorisation ("Params") 101qui est chargé de divers types d'informations, tels que des informations de traitement, des informations d'environnement et des informations de configuration, etc. Cet objet peut s'adapter à pratiquement toutes les fonctions qui exécutent une tâche particulière. Le code à l'intérieur de chacune de ces fonctions peut avoir besoin de changer brièvement les valeurs mémorisées dans l'objet Params, à mesure que la hiérarchie de la conception des circuits est traversée. S'il ne devait y avoir qu'une valeur à modifier, une variable correspondante pourrait être créée et modifiée, laissant les contenus de l'objet Params intacts ; il conviendra de noter que l'objet Params présente une hiérarchie imbriquée de valeurs. C'est-à-dire qu'il peut exister de nombreuses paires clés => données telles que : "block name" =>"" ; "blockdir" =>"" ; "output~dir" => " /output" ; Lorsque le code est en cours d'exécution, "blocdir" doit par exemple être considéré comme égal au trajet vers un bloc du nom "block~name" : "blockdir" => "arbitrary-path/ " ; Si blocknam est ensuite réglé, l'objet Params mettra en cascade les modifications à travers les autres zones auxquelles il accède : "block~name" => "my~blockl" ; "blockdir" => "arbitraryjpath/my~blockl" ; "output~dir" => "arbitrary~path/my~blockl/output" ; Ainsi, on peut voir qu'en utilisant simplement une variable pour sauvegarder les valeurs n'entraîne pas la mise en cascade des valeurs de zone mise à jour. La totalité du code qui a appelé ces fonctions qui exécutent les tâches et plus particulièrement les diverses fonctions elles-mêmes ne s'attendent pas à avoir les données mémorisées dans le changement d'objet Params. En conséquence, un objet point de reprise 105 est créé au commencement de chaque fonction qui appelle Params, qui sauvegarde les valeurs à modifier. On notera que les seuls éléments qui doivent être sauvegardés sont les éléments qui sont explicitement modifiés (à savoir bloc~name et blockdir) contrairement aux éléments qui sont mis en cascade (à savoir output~dir). Ainsi, lors de la sortie de la fonction utilisateur 108, tout ce qui a été modifié par la fonction est réinitialisé et la totalité de l'autre code peut voir l'objet Params inchangé. Le Tableau 1 ci-dessous illustre un programme principal donné en exemple simplifié, un objet point de reprise et des fonctions et déclarations apparentées. Chaque section du code source dans le Tableau est préfacée avec un caractère entre crochets, comme suit : [A] Déclaration de classe d'objet de mémorisation [B] Déclaration de classe d'objet point de reprise [C] Fonction (de mémorisation "d'objet") pour récupérer les valeurs [Lire Valeur 130] [D] Fonction (de mémorisation d'objet] pour établir des valeurs [Etablir Valeur 135] [E] Fonction (de "point de reprise d'objet") pour sauvegarder les valeurs des données de l'objet de mémorisation dans une mémoire temporaire [Sauvegarder 110] [F] Fonction de destructeur [120] pour l'objet point de reprise [G] Fonction utilisateur pour manipuler les données de l'objet de mémorisation ; créer l'objet point de reprise ; appelle [E] ; peut appeler d'autres fonctions du type [G] [H] Programme principal ; appelle fonction(s) utilisateur Comme cela est représenté dans le Tableau 1, dans la section [H], un programme utilisateur ["principal"] 100 crée un objet de mémorisation de données "mémoriser" 101. Le programme "principal" 100 peut être n'importe quelle fonction. La déclaration pour la classe d'objet de mémorisation est représentée dans les sections [A]. Ensuite, certaines données initiales 102 sont générées et mémorisées dans l'objet de mémorisation. On notera que l'objet de mémorisation 101 et les données 102 mémorisées dans celui-ci peuvent être précédemment générés et, ou par un autre programme. Une ou plusieurs "fonctions utilisateur" 108 sont ensuite appelées à partir du programme principal. Chacune de ces fonctions utilisateur 108 a une fonctionnalité similaire tant que chaque fonction utilise un objet point de reprise pour sauvegarder les valeurs de données qui doivent être restaurées après la sortie de la fonction respective. Il conviendra de noter que la totalité des noms de programme/fonction utilisée dans l'exemple du Tableau 1, de même que sur les figures 1 et 2, sont arbitraires. Comme cela est représenté aux sections [G], la fonction utilisateur "fonction utilisateur" 108, crée un objet point de reprise ("sauvegarde") 105 avec un pointeur ("pStore") 106 sur l'objet de mémorisation de données 101. La section [B] est la déclaration pour l'objet point de reprise. Typiquement, la fonctionnalité dans la fonction utilisateur 108 donnée en exemple peut être utilisée dans d'autres fonctions opérant sur un objet de mémorisation de données donnée pour permettre à l'état de l'objet de mémorisation d'être maintenu d'une fonction à l'autre. La fonction utilisateur 108 utilise ensuite l'objet point de reprise 105 pour appeler une fonction ("sauvegarder") 110 pour sauvegarder les valeurs de données de l'objet de mémorisation dans une mémoire temporaire 107. Lorsque 'saver.Save ('x')' s'exécute, l'objet point de reprise appelle 'pStore-> Get Value ("x") ' pour chaque élément sauvegardé "x" et lorsque l'objet point de reprise est détruit, il exécutera "pStore-> Set Value ("x", "old~value")" des anciennes valeurs. L'objet "sauvegardé" 110, représenté dans la section [E] est une fonction au procédé existant qui est une caractéristique de l'objet "point de reprise" 105. Cet objet reçoit les paramètres adaptés qui doivent être sauvegardés (dans le présent exemple "key~l' et "key~2'), crée une copie temporaire 107 des données et la mémorise dans l'objet de mémorisation 101. Comme cela est représenté dans les sections [C] et [D], "Get Value" 130 et "Set Value" 135 sont des procédés existants (fonctions) sur l'objet de mémorisation de données 101. Ces procédés sont nécessaires pour tout objet qui doit être repris. L'objet point de reprise "sauvegardé" 110 appelle "Get Value" 130 pour chaque élément sauvegardé et sauvegarde l'élément et sa valeur dans le conteneur "Save~Value" et lorsque l'objet point de reprise est détruit, son destructeur associé 120 appelle "Save Value" 135 pour restaurer les valeurs de données d'origine dans l'objet de mémorisation 101. La fonction de destructeur 120 pour l'objet point de reprise 105 est représenté à la section [F]. Dans le présent exemple, les valeurs des données dans l'objet de mémorisation sont réinitialisées sur retour dans le code destructeur interne pour l'objet point de reprise. On notera que "Saved~Values" est un conteneur associatif dans lequel la fonction "sauvegarder" 110 a mémorisé les états d'origine des variables 'key~l' et 'key~2' dans le présent exemple. Comme indiqué ci-dessus, le destructeur est un procédé spécial ou une fonction de membre, d'une classe qui s'exécute toujours automatiquement chaque fois qu'un objet sort de l'espace de validité. TABLEAU 1 //[A] class StorageObject { public : const string & GetValue (cons string & key) const ; void SetValue (const string & key, const string & value) ; private : map internal~storage ; // [B] class CheckPoint { public : void Save (const string & key) ; CheckPoint (StorageObject *pStorage) {pStorage~object = pStorage ;} -CheckPoint () ; private : StorageObject * pStorage~object ; map saved~values ; } ; // [C] // Fonction pour récupérer les valeurs des données const string & StorageObject::GetValue( const string & key) const { static const string NULL~STR ="" ; map ::const~iterator lookup ; lookup = internal~storage.find (key) ; if (lookup ! = intemal~storage.end () { return lookup->second ; } return NULL~STR ; // [D] // Fonction pour établir les valeurs des données void StorageObject::SetValue( const string & key, const string & value) { internal~storage[key] = value ; return ; } //[E] La fonction pour sauvegarder les zones enregistrées void CheckPoint ::Save ( const string & key) { //Sauvegarder des valeurs de l'objet de mémorisation dans une mémoire temporaire string value = pStorage~object // [F] La fonction de destructeur pour point de reprise CheckPoint :: -CheckPoint () map ::iterator i ; for (i = saved~values.begin() ; i ! = saved~values.end () ; i++) { pStorage~object->SetValue(i->first,i->second) , //[G] Cette fonction opère sur l'objet de mémorisation. void UserFunction ( StorageObject * pStore) // Crée l'objet point de reprise ("sauvegardeur"), qui appelle une fonction ("sauvegarder") les valeurs des données de l'objet de mémorisation dans la mémoire temporaire. Checkpoint saver(pStore) ; // Enregistrer des zones de données qui doivent être sauvegardées avec l'objet point de reprise saver. Save ("key~l") ; saver. Save ("key~2") ; // Maintenant les données peuvent être modifiées pStore->SetValue("key~l ",modified~value~1 ") ; pStore->SetValue("key~2",mofidied~value~2"); // On notera que les valeurs mémorisées dans l'objet de mémorisation ont été modifiées par la fonction enfant ; c'est-à-dire dans le présent exemple "initial~valeu~l" a été modifiée par "modified~value~l" et "intial~value~2" a été modifiée par "modified~value~2". // Sur retour depuis cette fonction le destructeur de point de reprise est appelé return ; } //[H] int main () { // Créer l'objet de mémorisation "mémoriser" StorageObject Store ; // Générer certaines données initiales et mémoriser dans l'objet de mémorisation. store.SetValue("key~l, "initial~value ~1") store.SetValue("key~2", initial~value~2") ; // Appeler une fonction utilisateur pour manipuler les données dans l'objet de mémorisation UserFunction (& store) ; //A ce moment les valeurs des données modifiées ont été restaurées à leurs valeurs initiales sur retour de la fonction utilisateur, et via la fonction de destructeur pour la classe d'objet point de reprise déclarée à l'intérieur de la fonction utilisateur. return 0 ; REVENDICATIONS 1. Procédé pour sauvegarder et restaurer automatiquement des données contenues dans un objet de mémorisation de données (101) dans un environnement logiciel orienté objet, caractérisé en ce qu'il comprend les étapes consistant à créer un objet point de reprise (105) à l'intérieur d'une fonction utilisateur (108) ; enregistrer, avec l'objet point de reprise (106) des zones de données (103) dans l'objet de mémorisation (101) qui doivent être modifiées ; créer une copie temporaire (107) des zones dans l'objet de mémorisation (101), comprenant les valeurs de données pour les zones, qui doivent être modifiées par ladite fonction utilisateur (108) ; et restaurer les valeurs des données (103) dans l'objet de mémorisation de données (101) à leurs états d'origine, en utilisant les valeurs des données mémorisées dans ladite copie temporaire (105) lorsqu'une sortie est effectuée à partir de la fonction utilisateur (108), après que les valeurs des données des zones dans l'objet de mémorisation (101) ont été modifiées. 2. Procédé selon la revendication 1, caractérisé en ce que ladite copie temporaire des zones qui doivent être modifiées (107) est mémorisée dans l'objet point de reprise (105). 3. Procédé selon la revendication 2, caractérisé en ce que ladite copie temporaire des zones qui doivent être modifiées (107) sont mémorisées en tant que paires clés/valeurs. 4. Procédé selon la revendication 1, caractérisé en ce qu'il comprend l'étape supplémentaire consistant à créer une fonction de destructeur (120) pour l'objet point de reprise (105) pour restaurer lesdites valeurs des données. 5. Procédé selon la revendication 4, caractérisé en ce que la fonction de destructeur (120) comprend une fonction qui s'exécute lorsqu'une sortie est effectuée à partir de la fonction utilisateur (108). 6. Procédé selon la revendication 4, caractérisé en ce que la fonction de destructeur (120) est exécutée lorsque l'objet point de reprise (105) sort de l'espace de validité. 7. Système pour sauvegarder et restaurer automatiquement des données contenues dans un objet de mémorisation de données (101) dans un environnement logiciel orienté objet, caractérisé en ce qu'il comprend : un objet point de reprise (105) ayant un pointeur (106) sur l'objet de mémorisation (101), pour créer une copie (107) des zones dans l'objet de mémorisation de données, comprenant des valeurs de données associées, qui doivent être modifiées ; et une fonction de destructeur (120) appelée après que les modifications sur les valeurs des données dans l'objet de mémorisation (101) ont été achevées, pour amener ainsi la totalité des valeurs des données dans l'objet de mémorisation de données (101) à être restaurées à leurs états d'origine. 8. Système selon la revendication 7, caractérisé en ce qu'il comprend, en outre, des fonctions pour sauvegarder (110) et récupérer (130) lesdites valeurs des données. 9. Système selon la revendication 8, caractérisé en ce que ladite copie (107) dans l'objet de reprise (105) comprend des paires clés/valeurs (107) desdites zones dans l'objet de mémorisation de données (101) qui doivent être modifiées, pour identifier des valeurs des données (103) dans l'objet de mémorisation de données qui doivent être restaurées. 10. Système selon la revendication 7, caractérisé en ce que la fonction de destructeur (120) est exécutée lorsque l'objet point de reprise (105) sort de l'espace de validité.