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
Créer un fichier PDF de la contribution Imprimer


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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Structures de données en Windev? (Collections, listes, arbres)
Anonyme
Merci beaucoup.

Contribution le : 21/01/2005 15:41
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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:
MonObjet est un MaClasse


- 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
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


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.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2