|
Structures de données en Windev? (Collections, listes, arbres) |
|
Anonyme
|
Comment on fait des structures de données en Windev? Par exemple, en java, il y a pleins de classes dont on peut se servir: des collections, des listes chaînées, des arbres binaires, des hash-map, des verteurs etc. (Voir: http://java.sun.com/docs/books/tutorial/collections/interfaces/index.html) Y a il l'équivalent dans Windev? Est-ce qu'un tableau peut contenir des objets? Où puis-je trouver de la documentation sur ce genre de structures de données en Windev?
Contribution le : 20/01/2005 17:32
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour Avez vous regardé l'aide en ligne sur le sujet.
MaStructure1 est une structure
m1 est un entier sur 2 octets
m2 est un entier sur 4 octets
FIN
MaStructure2 est une structure
m1 est un entier sur 1 octets
m2 est une chaine fixe sur 255
m3 est un MaStructure1
FIN
Contribution le : 20/01/2005 17:53
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Anonyme
|
Non, je ne parle pas des "structure" de Windev. Je parle des vraies "structures de donnnées" comme les listes chaînées et les arbres binaires. Exemple en java:
Liste maListe as new Liste() maListe.add(unObjet1) maListe.add(unObjet2) Object toto = maListe.remove() Integer iLongueur = maListe.lenght()
Etc.
La liste (ou autre structure de donnée) doit pourvoir contenir de vrais objets (des Classes instanciées) et soit pouvoir grandir quand j'y ajoute des objets.
Contribution le : 20/01/2005 18:01
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, En WinDev pas de gestion de collection en tant que tel, j'en ai fait plusieurs fois la demande mais toujours pas de réponse, car ce la m'oblige à passer par des Dll externes ecritent dans d'autres languages, ce qui le rend dépendant d'autres languages, ceci dit le WDLangage n'est pas non plus un langage système. Cependant à partir de Windev 8 vous pouvez utiliser les assemblages DotNet qui eu manipules tous ces type de données. un exemple de manipulation des collections DotNet en WinDev vous pouvez regarder l'exemple WD_WMI
Contribution le : 20/01/2005 18:15
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Anonyme
|
Je ne peux pas croire que ce n'est pas possible!
Par exemple, dans l'aide de Windev 9, je cherche: "Diagramme UML, Classes" Dans la page correspondante, on montre dès le début un beau petit diagramme "Gestion de Stocks" avec une classe Stock qui contient un attribut ListeProduit et des méthodes AjouteProduit et RetireProduit.
On voit aussi le diagramme dans le livre PROGRAMATION de Windev 9, à la page 57.
Je voudrait bien voir le code source de cette classe!
Contribution le : 20/01/2005 18:45
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Animateur WDF
Inscrit: 26/06/2002 16:24
De wdforge.org
Post(s): 2822
|
Hum, ce dossier vous satisfait-il ? il est trés frais...
Contribution le : 20/01/2005 19:22
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour,
Si vous voulez utilisez vos propres collections PCSoft fourni avec WinDev 9 une classe qui permet de manipuler des collections.
Cette classe se nomme VBCollection.wdc et se trouve dans le répertoire \Programmes\données du dossier de WinDev9
Contribution le : 20/01/2005 19:55
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Anonyme
|
Est-ce qu'on peut mettre des objets dans un tableau?
Quel est le type de l'attribut ListeProduit à la page 57 du livre PROGRQAMMATION de Windev 9 ?
Contribution le : 20/01/2005 20:40
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Oui il est tout a fait possible de mettre des objets dans un tableau et c'est tout l'interêt pour certaines classes.
Sur ce site vous trouverez un exemple de projet ExplorerBar qui utilise cette technique un objet ExplorerBar contient un tableau qui lui même contient une collection de d'instancede classe Bouton.
Contribution le : 20/01/2005 23:16
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Anonyme
|
Merci beaucoup.
Contribution le : 21/01/2005 15:41
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Stagiaire WDF
Inscrit: 14/01/2005 11:53
Post(s): 9
|
petit subtilité pour faire un tableau d'objet, il faut que le constructeur de la classe de l'objet implanté n'aie pas de parametre. il faut donc créer un constructeur qui set des valeurs défauts, puis modifier l'instance générique par une méthode auxilliaire au constructeur qui settera elle meme les valeurs propres des attributs. le tableau collecteur doit tenir a jour sa longueur et etre recopié à chaque ajout suppression. De plus on travaille tjrs sur des copies d'objets qui sont placer dans l'objet... c'est donc un bricolage...
voici un exemple bricoler en vitesse. Ce n''est de loin pas optimisé, mais si ca peut aider... __________________________
Cercle est une classe rayon est un entier centreX est un entier centreY est un entier FIN
PROCEDURE Constructeur() :rayon=0 :centreX=0 :centreY=0
PROCEDURE Destructeur()
PROCEDURE getRayon() RENVOYER :rayon
PROCEDURE getX() RENVOYER :centreX
PROCEDURE getY() RENVOYER :centreY
// Syntaxe : //setCerlce (, , ) // //il est impossible de créer un tableau contenant des éléments dont le constructeur est paramétré. //Aussi, le constructeur affecte des valeur par défaut, et on assigne les valeurs par la suite.
PROCEDURE setCerlce(myRayon, myX, myY) :centreX=myX :centreY=myY :rayon=myRayon
PROCEDURE dessiner()
InitHasard() // Dessins dans le champ image "ImageDessin" dCercle(:centreX-:rayon, :centreY-:rayon,:centreX+:rayon,:centreY+:rayon, Hasard(0,255), iNoir)
______________________________________________ CercleCollector est une classe TousCerlce est un tableau dynamique nbrElement est un entier
FIN
PROCEDURE Constructeur() :nbrElement=0 :TousCerlce=allouer un tableau de 0 Cercle
PROCEDURE Destructeur()
PROCEDURE AddCercle(myCercle) i est un entier temp est un tableau dynamique de :nbrElement Cercle temp=:TousCerlce :nbrElement=:nbrElement+1 :TousCerlce=allouer tableau dynamique de :nbrElement Cercle SI :nbrElement>1 ALORS POUR i=1 A :nbrElement-1 :TousCerlce[i]=temp[i] FIN FIN :TousCerlce[:nbrElement]=myCercle libérer temp
PROCEDURE renvoieNiemeCercle(n) RENVOYER :TousCerlce[n]
Contribution le : 22/01/2005 18:35
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Anonyme
|
Bon alors, puisqu'en Windev je peux avoir des tableau d'objets, voisi ce que je voudrais être capable de faire: Je voudrais avoir un Objet qui contient un tableau d'objets, qui à leurs tours contiennent de tableaux d'objets, ainsi de suite, sans aucune limitte de profondeur (en théorie).
Ci-dessous, un exemple en java, qui fontionne très bien: Alors, comment faire l'équivalent en Windev?
//-------------------------------
public class ClsTerre { public ClsPays tableauPays[] = new ClsPays[3]; }
public class ClsPays { public String nomDuPays = new String(); public ClsVilles tableauVilles[] = new ClsVilles[3]; }
public class ClsVilles { public String nomDeLaVille = new String(); }
public class ClsMain {
public ClsMain() { super(); }
public static void main(String[] args) { ClsTerre maTerre = new ClsTerre(); maTerre.tableauPays[0]= new ClsPays(); maTerre.tableauPays[1]= new ClsPays(); maTerre.tableauPays[2]= new ClsPays(); maTerre.tableauPays[0].nomDuPays="France"; maTerre.tableauPays[1].nomDuPays="Espagne"; maTerre.tableauPays[2].nomDuPays="Italie"; maTerre.tableauPays[0].tableauVilles[0] = new ClsVilles(); maTerre.tableauPays[0].tableauVilles[1] = new ClsVilles(); maTerre.tableauPays[0].tableauVilles[2] = new ClsVilles(); maTerre.tableauPays[0].tableauVilles[0].nomDeLaVille = "Paris"; maTerre.tableauPays[0].tableauVilles[1].nomDeLaVille = "Vienne"; maTerre.tableauPays[0].tableauVilles[2].nomDeLaVille = "Grenoble"; System.out.println(maTerre.tableauPays[0].tableauVilles[0].nomDeLaVille); System.out.println(maTerre.tableauPays[0].tableauVilles[1].nomDeLaVille); System.out.println(maTerre.tableauPays[0].tableauVilles[2].nomDeLaVille); //Modification des noms: maTerre.tableauPays[0].tableauVilles[0].nomDeLaVille = "Hierarchie A"; maTerre.tableauPays[0].tableauVilles[1].nomDeLaVille = "Hierarchie B"; maTerre.tableauPays[0].tableauVilles[2].nomDeLaVille = "Hierarchie C"; System.out.println(maTerre.tableauPays[0].tableauVilles[0].nomDeLaVille); System.out.println(maTerre.tableauPays[0].tableauVilles[1].nomDeLaVille); System.out.println(maTerre.tableauPays[0].tableauVilles[2].nomDeLaVille);
} }
Contribution le : 26/01/2005 04:27
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Animateur WDF
Inscrit: 26/06/2002 16:24
De wdforge.org
Post(s): 2822
|
Bonjour L'allocation d'un objet en WinDev se fait de deux manières : - par simple déclaration pour les objet normaux: - par allocation pour les objets dynamiques MonObjetDyn est un objet dynamique // on ne connait encode la classe
MonObjetDyn = allouer un Maclasse // Allocation
...utilisation...
Libérer MonObjetDyn // libération
Pour les tableaux, notre ressource sur les tableaux de structures est aussi valide pour les tableaux d'objets... A cela pret qu'en plus de pouvoir manipuler les membres des objet comme ceux des structures, vous aurez aussi à manipuler les méthodes... Ville est une classe
nom est une chaine
FIN
Pays est une classe
NomPays est une chaine
nVilles est un entier
tVilles est un tableau de nvilles villes
FIN
Terre est une classe
nPays est un entier
tPays est un tableau de nPays Pays
FIN
Contribution le : 26/01/2005 07:59
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Utilisateur WDF
Inscrit: 09/06/2004 09:31
Post(s): 78
|
Bonjour ,
Pour voulez passer par l'allocation dynamique? Avec les fonctions tableauXXX l'allocation est faites toutes seules comme en java pour les conteneurs ...
A priori vous pouvez declarer :
tab_objet est un tableau de 1 MonObjet
tableauajoute(tab_objet,MonInstance) ; tableausupprime(tab_objet,indice); .... tab_objet[2]:set_mutator(value); ... ....
Donc on peut imaginer que tab_objet est membre d'une class MonAUtreObjet par exemple...
Si je fais fausse route merci de me signaler ou se situe mon erreur
Contribution le : 28/01/2005 16:55
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Anonyme
|
Bon, j'ai réussi à faire ce que je voulais. Vous trouverez le code ci-dessous. Cependant, je ne comprend pas pourquoi, sur les 4 dernière lignes, je n'arrive pas à modifier l'objet dans la structure de données, je pensait que quand on retourne un objet d'une fonction, windev retournait un référence sur cet objet, mais cela ne semble pas être le cas. Comment puis-je obtenir une référence sur mon objet? //-------------------------------------------- //ClsCollection //-------------------------------------------- // Classe Collection qui sera utilisée récursivement ClsCollection est une classe PUBLIC sID est une chaîne = "" sName est un chaîne = "" PRIVÉ mObjectIDArr est un tableau dynamique mObjectArr est un tableau dynamique FIN
PROCEDURE Constructeur() :mObjectArr = allouer un tableau dynamique de 0 ClsCollection :mObjectIDArr = allouer un tableau dynamique de 0 chaînes
PROCEDURE ajouterObjet(unObjet est une ClsCollection) iDim est un entier iDim = Dimension(:mObjectIDArr) iDim = iDim + 1 Dimension(:mObjectIDArr, iDim) Dimension(:mObjectArr, iDim) :mObjectIDArr[iDim]= unObjet:sID :mObjectArr[iDim]= unObjet
PROCEDURE supprimerObjet(sID est une chaîne) iIndice est un entier iIndice = TableauCherche(:mObjectIDArr,tcLinéaire,sID) TableauSupprime(:mObjectIDArr, iIndice) TableauSupprime(:mObjectArr, iIndice)
PROCEDURE getObjet(sID) iIndice est un entier iIndice = TableauCherche(:mObjectIDArr,tcLinéaire,sID) RENVOYER :mObjectArr[iIndice]
//-------------------------------------------- //Code derrière un simple bouton: //-------------------------------------------- mParent est un objet ClsCollection mEnfant est un objet ClsCollection mBebe est un objet ClsCollection
mParent:sID = "A1" mParent:sName = "je suis le parent A1" mEnfant:sID = "B1" mEnfant:sName = "je suis l'enfant B1" mBebe:sID = "C1" mBebe:sName = "je suis le bébé C1"
mParent:ajouterObjet(mEnfant)
Info(mParent:getObjet("B1"):sName) //Affiche:"je suis l'enfant B1"
mParent:getObjet("B1"):ajouterObjet(mBebe)
Info(mParent:getObjet("B1"):getObjet("C1"):sName) //Affiche:"je suis le bébé C1"... POURQUOI???
mParent:getObjet("B1"):getObjet("C1"):sName = "je suis BOB, le bébé C1" //Tentative de modification du nom.
Info(mParent:getObjet("B1"):getObjet("C1"):sName) //Affiche: "je suis BOB, le bébé C1"
unHumain est un objet ClsCollection unHumain = mParent:getObjet("B1"):getObjet("C1")
Info(unHumain:sName) //Affiche: "je suis BOB, le bébé C1"
unHumain:sName = "je suis JOE, le bébé C1"
Info(unHumain:sName) //Affiche: "je suis JOE, le bébé C1" Info(mParent:getObjet("B1"):getObjet("C1"):sName) //Affiche: "je suis BOB, le bébé C1" ... POURQUOI ?????
//------------------------------------------------
Contribution le : 07/02/2005 17:10
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour,
A la base cela est un caffouilleux, Parent, Enfant, bebe 3 termes déjà incohérants 1 enfant peut être parent 1 parent peut être enfant le terme et la vision n'est déjà pas bien déterminé
essayer de définir votre objet au plus petit possible Par exemple une personne une personne peut être enfant et parent cette objet personne peut retourner une liste d'enfant(s) et une liste de parents (limité à 2 normalement).
tous ceci sous entends que la classe personne doit contenir:
-Un identifiant (sID) -un Nom (sName) mais aussi : -une collection de personne (Parent) -Une collection de personne (Enfant) ensuite vous devez créer une classe collection de personnes
afin que cela ressemble le plus possible à la réalité.
[Quote] info(mParent:getObjet("B1"):getObjet("C1"):sName) //Affiche:"je suis le bébé C1"... POURQUOI???
mParent:getObjet("B1") te renvoie un objet parent a qui tu demande de renvoyer un objet parent :getObjet("C1"):sName il est normal qu'il te renvoye "je suis le bébé C1" C'est le dernier objet sur lequel il pointe dans ta collection parent.
Contribution le : 07/02/2005 19:50
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Anonyme
|
Mon problème est le dernier "POURQUOI" en bas de la page:
unHumain est un objet ClsCollection //Je set unHumain = à l'objet dont l'ID est "C1" //Donc je devrais avoir une référence sur cet objet: unHumain = mParent:getObjet("B1"):getObjet("C1")
Info(unHumain:sName) //Affiche: "je suis BOB, le bébé C1" //Je modifie son nom: unHumain:sName = "je suis JOE, le bébé C1"
//Son nom a été modifié ("JOE"): Info(unHumain:sName) //Affiche: "je suis JOE, le bébé C1" //Par contre, le nom de l'objet original n'a pas été modifié ("BOB"): Info(mParent:getObjet("B1"):getObjet("C1"):sName) //Affiche: "je suis BOB, le bébé C1" ... POURQUOI ???? //Alors, comment je fait pour travailler sur un objet qui sera un référence à mon objet original et alors qui modifiera l'original???
--------------------------------------
Contribution le : 07/02/2005 21:02
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour,
Sans apporter de réelle réponse, en WLangage les egalités sur les objets sont passées par adresse ce qui signifie que : UnHumain manipule les memes membres que parent
Dans cette configuration: les membres UnHumain et Parent manipulent les mêmes adresses
Contribution le : 08/02/2005 01:31
|
|
|
Re: Structures de données en Windev? (Collections, listes, arbres) |
|
Anonyme
|
Bonjour ,
Je ne crois pas que l'on puisse renvoyer depuis une procedure ou methode ce que vous voulez une reference sur un objet ou sur un entier ou quoi que se soit d'autre; Ca te renvoi au mieux une copie.
Contribution le : 08/02/2005 15:23
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|