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 :

Instancier plusieurs objets dans une boucle


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut Instancier plusieurs objets dans une boucle
    Hello tout le monde,

    Je me lance dans la POO et je souhaite savoir comment on peut instancier plusieurs objet en une fois.

    Concrètement, si par exemple j'ai un fichier de mon analyse comportant 10 enregistrements.

    Et que je souhaite créer 10 objets avec comme membres, des rubriques de ce fichier

    je pensais commencer par faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    POUR TOUT MonFic
        "MonObj_"+MonFic.ID est new MaClass
        "MonObj_"+MonFic.ID:m_... = MonFic. ...
        "MonObj_"+MonFic.ID:m_... = MonFic. ...
    FIN
    Mais visiblement non... quelqu'un a une solution, disons plutôt une leçon à me donner

    merciii d'avance !

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,
    Si je me souviens bien, il faut que tu regardes du côté des indirections.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  3. #3
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 804
    Points : 5 251
    Points
    5 251
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Tu peux regarder du côté de FichierVersTableau.

    Par ailleurs, pour instancier une instance, il est préférable de passer par le constructeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    clMonObjet est CMaClasse(Param1,....,ParamN)
    Au pire par un SETTER (en WLangage, par une propriété, qui fait aussi office de GETTER (en gros),) mais surtout pas par une affectation directe.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  4. #4
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    merci pour vos conseils :

    il faut que tu regardes du côté des indirections.
    déjà essayé, ça ne marche pas.

    il est préférable de passer par le constructeur.
    oui oui tout à fait, c'était juste pour gagner du temps dans l'explication.

    d'après mes recherches, j'ai l'impression qu'on est obligé de passer par un tableau d'objet.
    Mais du coup, à chaque fois que l'on souhaite s'adresser à un objet, il faut passer par ce tableau.
    Et donc de gérer sa position dans le tableau...
    ça semble franchement lourd !!!!

  5. #5
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 804
    Points : 5 251
    Points
    5 251
    Billets dans le blog
    1
    Par défaut
    [QUOTE=jjacques68;11675564
    Mais du coup, à chaque fois que l'on souhaite s'adresser à un objet, il faut passer par ce tableau.
    [/QUOTE]
    Au lieu de faire un HLitRecherche, tu fais un TableauCherche, et il n'y a plus d'accès serveur.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  6. #6
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    tu peux faire un tableaucherche dans un tableau d'objet ?
    Donc en spécifiant un membre de l'objet pour la recherche ?

  7. #7
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 804
    Points : 5 251
    Points
    5 251
    Billets dans le blog
    1
    Par défaut
    Oui, dans https://doc.pcsoft.fr/?3075002&verdisp=160, regarde la partie concernant la "Recherche d'un élément dans un tableau de structures, de classes, de types avancés à 1 dimension ou d'enregistrements." (en gros au début du dernier tiers.)
    Ça nous fait un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    clUneInstance est MMaClasse
    tabInstance est tableau de MMaClasse
     
    ......
     
    nIndiceInstance=TableauCherche(tabInstance,tcLinéairePremer,"m_nClient",nNoClient)
    SI nIndiceInstance<>1 ALORS
         clUneInstance=tabInbstance[nIndiceInstance]
         ....
    Tu peux maintenant travailler avec clUneInstance
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  8. #8
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    ahhh c'est interessant ça !!!

    je vais creuser cette piste !

    merci !!!

  9. #9
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 804
    Points : 5 251
    Points
    5 251
    Billets dans le blog
    1
    Par défaut
    Pour apprécier à fond la souplesse de FichierVersTableau et consort, il est préférable d'utiliser des classes mappées.
    Cela peut se faire automatiquement : https://blogs.pcsoft.fr/fr/generer-c...10689/read.awp
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  10. #10
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 941
    Points : 1 931
    Points
    1 931
    Par défaut
    FichierVersTableau est très pratique et je l'utilise régulièrement. Attention tout de même aux performances sur les tableaux avec un grand nombre d'objets, le chargement peut durer de nombreuses secondes.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  11. #11
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Pour apprécier à fond la souplesse de FichierVersTableau et consort, il est préférable d'utiliser des classes mappées.
    Cela peut se faire automatiquement : https://blogs.pcsoft.fr/fr/generer-c...10689/read.awp
    Bonjour à tous,

    Pour ma culture personnelle, quel est intérêt d'utiliser des classes mappées alors qu'il existe des variables de type Enregistrement ?

  12. #12
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 941
    Points : 1 931
    Points
    1 931
    Par défaut
    La classe a l'avantage de pouvoir y ajouter tout membre que tu juges nécessaires et d'ajouter autant de méthodes pour le code métier que tu souhaites. Une variable de type enregistrement n'est qu'une définition de la table et est immuable.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  13. #13
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    Salut, je te donne un petit aperçu de comment je procède avec une de mes classes mappés dont la relation implique un tableau d'objet d'un autre fichier(Exemple commande et Lignesproduit)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HExécuteRequête(Req_BudgetMarchandiseDeLaTache)
    FichierVersTableau(TableauBudgetMarchandise, Req_BudgetMarchandiseDeLaTache)
    POUR TOUT objetBudgetMarchandise DE TableauBudgetMarchandise
         objetBudgetMarchandise.ObjetFichierTacheAFaire <- objet // ObjetDéclaré en relation faible
    FIN

  14. #14
    Membre éclairé
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 253
    Points : 668
    Points
    668
    Par défaut
    Pour ma culture personnelle, pourquoi ne pas avoir simplement un membre de type de type enregistrement dans une classe plutôt qu'une classe mappé ?
    Eventuellement, cela raccourci les lignes de code car on a juste <MonMembreMappé>=xxx plutôt que <MaVariableDeTypeEnreg>.MonChamp=xxx mais je pense que je passe à côté de quelque chose.

    Citation Envoyé par Lo² Voir le message
    Pour ma culture personnelle, quel est intérêt d'utiliser des classes mappées alors qu'il existe des variables de type Enregistrement ?
    Citation Envoyé par philouZ Voir le message
    La classe a l'avantage de pouvoir y ajouter tout membre que tu juges nécessaires et d'ajouter autant de méthodes pour le code métier que tu souhaites. Une variable de type enregistrement n'est qu'une définition de la table et est immuable.

  15. #15
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Et bien ça marche nickel tout ça
    merci !!

    J'ai une méthode déclarée en thread (procédure automatique) (un thread d'écoute sur une socket TCP)
    Donc chaque objet, va exécuter cette méthode, donc ce thread simultanément.
    Visiblement, ça ne semble pas poser de problèmes.

    Je fais biens les choses ou c'est pas bon ?

  16. #16
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par jjacques68 Voir le message
    Et bien ça marche nickel tout ça
    merci !!

    J'ai une méthode déclarée en thread (procédure automatique) (un thread d'écoute sur une socket TCP)
    Donc chaque objet, va exécuter cette méthode, donc ce thread simultanément.
    Visiblement, ça ne semble pas poser de problèmes.

    Je fais biens les choses ou c'est pas bon ?

    Je ne connais pas ton besoin mais personnellement je fais de même pour surveiller mes enregistrements, chaque objet instancié a sa procédure SurveilleEnregistrement que je lance en fonction des cas d'utilisation

  17. #17
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Alors justement, j'ai une procédure qui semble ramer pas mal et je ne comprends pas pourquoi :

    Cette procédure (Thread) check une variable tableau et envoi le contenu de ce tableau sur la socket, un élément après l'autre :

    son code est très simple :

    Voici quelques membre de la classe :

    :m_bMonStatus est le status de la socket (vrai si ouverte, faux dans la cas contraire)
    :m_tabListeDataToSend est le tableau des éléments à envoyer (une sorte de queue liste)
    :m_sMonCanal est le canal TCP du client connecté
    :m_sMonNom est le nom "convivial" du client

    et voici la méthode "Write" executée avec l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThreadExécute("Write_"+:m_sMonNom,threadNormal,:Write)
    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
    16
    17
    TANTQUE :m_bMonStatus = Vrai
     
    	//traite la queueListe
    	SI :m_tabListeDataToSend..Occurrence <> "" ALORS
     
    		//envoi la data, de l'élément 1 
    		SocketEcrit(:m_sMonCanal, :m_tabListeDataToSend[1])
     
    		//supprime ce qu'il vient d'envoyer
    		TableauSupprime(:m_tabListeDataToSend,1)
     
    		ThreadPause(1)
    	FIN
     
    	ThreadPause(1)
     
    FIN
    comme dit, ça rame et je vois pas pourquoi...
    les 2 tempo de 1 cs sont ridicules !!!
    Lors qu'un élément doit être envoyé, ça prends presque plus d'une seconde !!
    Si je vire les tempo, ça va franchement mieux, mais j'ai le processeur qui monte à plus de 30 % ???? !!!!

    une idée ?

  18. #18
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    C'est pas trop mon truc les threads désolé :s

  19. #19
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Je viens d'identifier clairement que c'est le fait de passer par une table "queue liste"

    Si j'écrit directement la valeur sur la socket, sans passer par cette table, c'est hyper réactif.

  20. #20
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par jjacques68 Voir le message
    Je viens d'identifier clairement que c'est le fait de passer par une table "queue liste"

    Si j'écrit directement la valeur sur la socket, sans passer par cette table, c'est hyper réactif.
    Tu veux dire tableau ?

Discussions similaires

  1. Instanciation d'objets dans une boucle
    Par Mister Nono dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/12/2017, 15h46
  2. Instancier plusieurs objets avec une boucle for
    Par bromy dans le forum Android
    Réponses: 4
    Dernier message: 28/03/2017, 22h13
  3. plusieurs objets dans une fenêtre
    Par KalKul dans le forum OpenGL
    Réponses: 5
    Dernier message: 23/03/2008, 14h27
  4. declarer plusieurs JcheckBox dans une boucle
    Par 01211983 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 21/02/2008, 01h47
  5. [FLASH MX] Créer un objet dans une boucle
    Par alexfrere dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 30/04/2006, 01h35

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