IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Poo : Liste des instances d'une classe


Sujet :

WinDev

  1. #1
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut Poo : Liste des instances d'une classe
    Bonjour,

    Dans un projet, nous souhaitons connaitre la liste des instances d'une classe afin de produire des Dumps / sérialisations et autres joyeusetés.

    Nous avons donc étudié l'introspection (variables de type définition et description de variable) pour voir si nous pouvions l'exploiter DANS les classes en question avec la notion de "Objet" qui permet de manipuler l'instance en cours depuis l'intérieur de la classe : aucun résultat probant pour le moment (du moins au niveau des constructeurs).

    Quelqu'un sait-il comment procéder ?

    Le but est que chaque classe :
    - S'identifie éventuellement dans un tableau global des instances
    - Propose une méthode "Dump"

    Ainsi, sur un interception de touche, nous seront en mesure de sélectionner l'instance pour laquelle on souhaite obtenir le dump.
    PS : un dump est un affichage de contenu mémoire (valeur des membres de la classe) à un instant donné.

    Notre difficulté réside alors dans la phase de déclaration de chaque instance des classes voulues pour récupérer le nom de la variable contenant l'objet en cours.

    Merci d'avance pour toute aide sur le sujet.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    En utilisant des objets dynamiques (donc des pointeurs), et une classe faisant office de fabrique, tu peux garder une trace de toutes les instances d'une classe dans un tableau.
    J'ai fait un petit test ces derniers jours avec:
    1. un constructeur privé
    2. une méthode globale qui renvoie une instance de la classe
    3. un membre global de type tableau de classe

    Le but était de tester le design pattern dérivé du Singleton, pour gérer les connexions aux bases de données.

    Ca fonctionne, mais j'ai un plantage bizarre (GPF) à chaque fois que je termine le test, à priori un problème de libération du tableau. Je ne suis pas allé plus loin pour l'instant faute de temps.

    Tu peux imaginer un process similaire pour garder un tableau de pointeur en mémoire.

    Tatayo.

  3. #3
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Merci Tatayo pour la piste.

    Pour qu'une classe soit gérable par la fabrique il faut qu'elle puisse, dans son destructeur se supprimer du tableau de la fabrique.
    j'ai donc imaginé un transfert de l'identifiant fabrique à l'instance de la classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    cFAB : classe fabrique
       tInstance est un tableau dynamique de classe
    FIN
     
    cFAB:InstanceCrée(pcClasse est une classe)
       oDyn est un objet dynamique
       nindice est un entier
       oDyn = allouer un pcClasse // <-- ne sais pas si cela est authorisé
       nindice = tableauAjoute(:tInstances,odyn)
       oDyn:mnFAB_INDICE = nIndice
    renvoyer oDyn
     
    cFAB:InstanceSupprime(pnIndice est un entier)
       TableauSupprime(:tInstances,pnIndice)
    FIN
    dans le code on aurait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    oToto est un objet dynamique
    oToto = oFAb:GetInstanceNouvelle(cMaclasse)
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MaClasse est une classe
       ...
       mnFAB_INDICE
    FIN
    MaClasse:Destructeur()
       oFab:InstanceSupprime(:mnFAB_INDICE)
    FIN
    Le destructeur de la classe fabriquée irait supprimer la déclaration dans la fabrique en utilisant l'indice dans le tableau.
    J'ai des réserves sur le fait d'utiliser un tableau de classe et la gestion des instances (et du passage de paramètre aux constructeurs...) mais l'idée est là.

Discussions similaires

  1. Liste des instances d'une classe
    Par alexdevl dans le forum Général Python
    Réponses: 32
    Dernier message: 14/09/2011, 22h52
  2. afficher liste des eleve d'une classe d un tableau T
    Par clem62173 dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 10/11/2009, 12h20
  3. Liste les instances d'une classe
    Par Mucho dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2009, 17h24
  4. Nommer des instances d'une classe dynamiquement ?
    Par Demosis dans le forum Langage
    Réponses: 4
    Dernier message: 04/11/2007, 14h22
  5. Réponses: 9
    Dernier message: 18/10/2007, 20h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo