(1) 2 »


Copie de classe
Utilisateur WDF
Inscrit:
03/06/2004 14:31
De Bourgoin Jallieu (38)
Post(s): 52
bjr, je voudrais faire une copie de classe. ( comme le sujet l'indique ;o)).
Le problème c'est que windev travail en adresse, donc si je fais simplement
ClasseDest = ClasseSrc
l'instance de ClasseDest pointera sur ClasseSrc, et chaque modif de la source modifiera la destination (enfin si mon raisonnement est juste). Cette methode à certainement des avantage, mais la pas vraiment...
La solution serait de faire des copies de tous le attributs de la classe, mais la classe est beaucoup trop complexe, alors voila.
Aidez Moi SVP !!!!

Contribution le : 10/08/2004 17:12
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Avec un objet dynamique !

Citation :

o1 est un objet1
o2 est un objet dynamique
o2 = o1
...
libérer o2


le "=" se charge de l'allocation du o2 avec o1.
hop !

Contribution le : 10/08/2004 17:26
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Utilisateur WDF
Inscrit:
03/06/2004 14:31
De Bourgoin Jallieu (38)
Post(s): 52
ça marche pas ....
En fait, le soucis est peut etre lié au fait que ma classe possède d'autres objets dynamiques, en gros, la classe que je veux copier contient d'autres classes, donc des tableaux dynamiques d'objets dynamique...(c'est pas très clair tout ça...)
Donc la mèthode simple, ne fonctionne pas. (j'avais déjà éssayé.

Contribution le : 11/08/2004 09:57
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Quid de Transfert() ?

Contribution le : 11/08/2004 10:19
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Utilisateur WDF
Inscrit:
03/06/2004 14:31
De Bourgoin Jallieu (38)
Post(s): 52
Bien vu, je me penche la dessus tout de suite !!!

Contribution le : 11/08/2004 10:32
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Normal !
Tiens moi au courant et stp ! si c'est bon, merci de me poster (mail) une petite note sur ce 'principe' pour intégration dans nos dossiers poo (à venir).

Contribution le : 11/08/2004 10:55
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Utilisateur WDF
Inscrit:
03/06/2004 14:31
De Bourgoin Jallieu (38)
Post(s): 52

Tu va être déçu,...a marche pas non plus, en plus il me crée des erreurs de pointeurs d'execution... J'ai déjà eu ces problèmes pdt le projet. Le programme execute les mauvaises fonctions aux mauvais moment... pas facile à débugger... enfin j'ai une autre solution, je ne voulais pas l'utiliser mais bon pas le choix.
En fait ma classe peut s'ecrire dans un fichier texte. Et elle peu se charger par celui ci. alors j'ecris le fichier et je charge l'autre classe enfin un peu tiré par les cheveux mais bon ça marche... Merci !!!

Contribution le : 11/08/2004 11:21
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Stagiaire WDF
Inscrit:
23/07/2004 10:24
De St Ouen
Post(s): 38
sinon tu peut aussi prendre le temps de créer un opérateur de copie, qui sera plus rapide et plus sur. Tu peut aussi t'aider du constructeur pour cela.
En C++ j'aurais put te donner la syntaxe à utiliser vus que j'y ait pratiqué la POO, dans windev, ce serait quelque chose du genre
fonction publique maClasse::copieObjet(objetsrc)
nouvelObjet est un objet maClasse(param1,param2...)
renvoyer nouvelobjet

mais j'ai pas vraiment fais de poo sous windev pour le moment.
en reprenant param1, param2 dans les membres de objetsrc
C'est une méthode qui fonctionne assez bien en general.

J'ai regardé l'aide mais je n'ai pas vus de truc comme C++ qui permettent la surcharge des opérateurs, si quelqu'un sait comment faire ça.

Contribution le : 11/08/2004 12:00
_________________
......
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Utilisateur WDF
Inscrit:
03/06/2004 14:31
De Bourgoin Jallieu (38)
Post(s): 52
la surcharge d'opérateur ne doit pas exister sous windev. J'ai bien pensé à me faire une procédure qui me copie les champs un par un, ... mais si tu voyais ma classe, tu aurais abandonné toi aussi. Elle n'est pas mal faite, mais il y a des références à des tableaux dynamique, il faudrait allouer manuellement tous les tableaux, initialiser toutes les classes, il y a de l'héritage, enfin c'est certainenement la meilleur solution pour répondre à ce problème, mais je plein le mec qui va maintenir l'application qd je ne serai pas la... (Je vais devoir certainement passer par la un jour mais la je ne suis pas motivé...)

Contribution le : 11/08/2004 12:10
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Stagiaire WDF
Inscrit:
23/07/2004 10:24
De St Ouen
Post(s): 38
C'est justement pour eviter d'avoir à copier les menbres un par un que je te sugerrais d'utiliser le constructeur, mais je n'ais pas la classe sous les yeux.
Vérification faite dans l'aide de windev seule la surcharge de fonction semble être supportée, allez encore un petit effort m. PCsoft et ce serra farpait.

sinon mon histoire de code je pense que j'ai fais plein d'erreur dans l'exemple que j'ai mis plus haut (je suis pas encore reveillé faut croire il n'est que midi àprès tout) donc eviter de le repomper mots pour mots ça marchera pas c'est juste une suggestion.

Contribution le : 11/08/2004 12:22
_________________
......
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour Benj,

Je viens de faire des tests de copie d'une classe qui contient une autre classe et des objets dynamiques et je suis arrivé à cette syntaxte qui fonctionne
obj1 est un objet cObj1 dynamique
obj2 est un objet cObj1 dynamique

//Initialisation
//Affectation
//etc...

transfert(&obj2,&obj1,Dimension(obj1))


cela fonctionne, la valeur des membres modifiés sur obj1 ne sont pas répercutés sur obj2 contrairement à l'affectation obj2=obj1



Contribution le : 11/08/2004 14:11
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Stagiaire WDF
Inscrit:
23/07/2004 10:24
De St Ouen
Post(s): 38
Cela fonctionnera certe dans le cas d'une classe qui ne possède pas d'objets globaux, si vous avez un membre global dans votre classe celui ci ne sera pas mis à jour car il existe en dehors de l'objet hors tu te contente de copier l'objet bit par bit et pas ce à quoi il fais référence.

Un exemple de ce type de membre serait un tableau qui ferait référence à tous les objets générés par la classe pour ainsi pouvoir acceder à chacun d'eux. Avec cette methode l'objet créé ne serait pas référencé.

Donc prudence avant d'employer cette méthode ou alors l'utiliser dans une fonction de la classe qui se charge d'effectuer la mise à jour des membres globaux.

Un autre risque vient des membres privés ou protégé (c'est la même terminologie qu'en C++ je crois) auxquels tu n'est pas sensé avoir acces en dehors de la classe et qui risquent de créer des exceptions, voir de tout faire planter.

Dernière chose, si tu fais référence à d'autres classes (par adresse donc) à l'intérieur de ta classe principale, cette copie vas recopier l'adresse de ces sous-objets et obj1 et obj2 feront tous deux référence au même sous-objet.

Vue que la classe de deedier est relativement compliqué et fais référence à des objets dinamiques si je ne me trompe transfert risque de faire pas mal de casse (j'avoue n'avoir pas eut le temps de faire une classe juste pour tester tout ça).

Clc : ça doit fonctionner dans une classe "basique" ou tous les membres sont fixes mais après c'est probablement une autre histoire

Contribution le : 11/08/2004 14:48
_________________
......
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Justement, nous étudions avec William un truc sur le sujet mais en php.

Nous avons trouvé des classes avec la méthode GetInstance() qui retourne une nouvelle instance de l'objet sans passer par un include + new, ce qui éconnomise de l'accès disque sur le serveur http.
Note, ce n'est pas une copie de classe mais le code peut être adapté !!!
function &getInstance()
	{
		static $instance;
		if (!isset($instance)) {
			$instance = new Monobjet();
		}
		return $instance;
	}

Je vous laisse le soin de monter le test de l'équivalent WinDev si vous trouvez la parade aux statiques qui semblent manquer.

Contribution le : 11/08/2004 15:02
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
FONCTION GetInstance(poObjet)
poObjet = allouer un MonObjet
... copie des membre
poOmer:Membre=:Membre
...
FIN


Utilisation :
o1 est un MonObjet
o2 est un objet dynamique
o1:GetInstance(o2)
...


On notera l'utilisation du passage de parametres par adresse qui permet de ne pas avoir de RENVOYER dans GetInstance.

Me confirmer !


Contribution le : 11/08/2004 15:09
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Anonyme
C'est cette mèthode (au mot près) que j'utilise pour mes classes 'simple', donc on est bien sur la même longueur d'onde...cool !!
Par contre voila la définition de ma classe : tu va rire :

Synoptique est une classe
TabForme est un tableau dynamique //Tableau de classes
TabVariable est un tableau dynamique //Tableau de classes
TabMotCle est un tableau dynamique //Tableau de classes
TabCouleur est un tableau dynamique //Tableau de classes
TabClignotant est un tableau dynamique //Tableau de classes
TabPolice est un tableau dynamique //Tableau de classes
NbForme est un entier
NbVariable est un entier // Nombre de variable ...
NbMotCle est un entier // Nombre de mot cles
NbCouleur est un entier
NbPolice est un entier
NbClig est un entier
Nom est un chaîne = "" // Nom du synoptique (chemin complet)
Pave est un chaîne = "" // Nom de l'image pavé
Separateur est un chaîne = "" // est le separateur de chaine du fichier Syn
Commentaires est un chaîne = "" // Commentaires d'entete de fichier
PATHBMP est un chaîne = "" // chemin des images BMP
PATH est un chaîne = ""
IncCouleurs est un booléen
IncPolices est un booléen
IncFormes est un booléen
FIN

Imagine le boulot que ça représente... pas facile, mais comme je disait plus haut, je vais devoir y passer donc allocation de toutes les classes avec copie des classes une par une, enfin pas facile, "Chef j'aurais besoins d'une ralonge de 3 jours sur le projet ... Pas possible?? non pas la tête pas la tête !!! aïe aïe aïe !!!"

Contribution le : 12/08/2004 09:31
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Utilisateur WDF
Inscrit:
03/06/2004 14:31
De Bourgoin Jallieu (38)
Post(s): 52
Désolé, vous aurez deviné que cétait moi...

PS: Ce serait pas possible de créer une connexion automatique ?? ça se trouve ça existe...et je l'aurais pas vu. On m'aurais menti??

Pour en revenir à la solution de 'Transfert', j'ai déjà éssayé (Hier) et le programme se perd dans les adressage à tel point que le programme bug sans erreurs détectée.
Le pointeur d'execution se perd dans les opérations à faire... enfin je l'ai déjà dis plus haut...

EDIT : Comme vous le voyez, la classe fait référence à 6 tableaux Dynamique. Trois sont des tableaux de classes normale, et trois sont des tableaux de classes Abstraites, donc il peut exister des classes différentes dans le même tableau... Et la ça devient le bordel, il faut vérifier le type de classes pke il y a des choses différentes à faire par classes !! Du coup, c'est long !! Mais faisable donc je le ferait si vraiment personne ne trouve LA solution miracle du genre
WDCopieClasse(Classes destination, Classe Source),...

Contribution le : 12/08/2004 09:35
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
OK, reprenons stp ta hiérarchie de classes.
Une première classe C1 contient des tableau de classes C2_1...C2_N et tu veux dupliquer un objet C1.

On a vu que transfert passe pour les classes simple et que getinstance permet la duplication complexe.

je propose donc un savant mixage des deux (ce que tu devrais avoir essayé ) à savoir le getinstance() pour les membre normaux et des transferts pour les éléments de tes tableaux !

PROCEDURE GetInstance(poinstance)
poinstance=allouer un Synoptique
poinstance:NbForme=:NbForme
poinstance:NbVariable=:NbVariable
poinstance:NbMotCle=:NbMotCle
poinstance:NbCouleur=:NbCouleur
poinstance:NbPolice=:NbPolice
poinstance:NbClig=:NbClig
poinstance:Nom=:Nom
poinstance:Pave=:Pave
poinstance:Separateur=:Separateur
poinstance:Commentaires=:Commentaires
poinstance:PATHBMP=:PATHBMP
poinstance:PATH=:PATH
poinstance:IncCouleurs=:IncCouleurs
poinstance:IncPolices=:IncPolices
poinstance:IncFormes=:IncFormes
// pour les tableaux il faut les parcourir
i,j,k sont des entiers
j=dimension(TabForme)
SI j ALORS
   POUR i=1 à j
      // ajoute une ligne au tableau de la copie
      // normalement i=k mais je préfère assurer
      k=dimension(poinstance:TabForme,dimension(poinstance:TabForme)+1)
      // y transfer la classe
      Transfert(&poinstance:TabForme[k],&:TabForme[i],dimension(:TabForme[i]))
   FIN
FIN
//... idem avec les autres tableaux, si les classes contenues sont 'simples' ce que je te recommande
FIN



Contribution le : 12/08/2004 10:30
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Utilisateur WDF
Inscrit:
03/06/2004 14:31
De Bourgoin Jallieu (38)
Post(s): 52
Voili voilou !! C'est a ça que j'arrive (en gros), mais comme tu le précise, ds ta dernière ligne, si les classes contenues sont simple... ben pas la ... car elles aussi peuvent contenir des tableaux dynamiques.

Mais bon après avoir travaillé sur la fonction Copier/Coller de mon projet, je me rend compte que j'ai maché la moitié du boulot.
En effet les classes MOTCLé possèdent une fonction 'getinstance' pour toi 'CopieObjet' pour moi donc je pense m'en sortir sans trop de frais !! En tous cas un grand merci, faute de solutions miracle, je me rassure d'avoir utilisé une méthode que tu me propose héhé !
Bon en tous cas si ça t'intérresse, je te fournirais le code que j'aurais développé.

Contribution le : 12/08/2004 10:42
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Voila donc le mystique 1000ème post

Je pense qu'il ne faille te rassurer parce que tu utilise une de mes méthodes. C'est gentil mais je produit aussi des bugs !

Une voie peut être un membre commun à TOUTES tes classes qui indiquerait la possibilité de passer par CopieObjet (ou par transfert), lequel pourrait être testé lors des duplications. Tu gagnerais en stablité.

Enfin, je t'invite plutot à me rédiger (et poster au mail un petit Document (.doc ou html) pour intégration dans nos dossier. Ce qui viens d'être fait mérite d'y figurer.
Un peu de code (générique) pour illuster serai une bonne idée.


Contribution le : 12/08/2004 10:52
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Copie de classe
Utilisateur WDF
Inscrit:
03/06/2004 14:31
De Bourgoin Jallieu (38)
Post(s): 52
Mince j'était à deux clics du 1000 post...
Pour la fonction, c'est fait, je passe en phase de tests, et je t'enverrais un petit qqchoses au plus vite... pke reste encore beaucoup de choses à faire...

Contribution le : 12/08/2004 11:02
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
(1) 2 »




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