PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → POO : comment allouer dynamiquement un objet dynamique ?
POO : comment allouer dynamiquement un objet dynamique ?
Débuté par roland, 18 juin 2015 12:46 - 4 réponses
Membre enregistré
223 messages
Posté le 18 juin 2015 - 12:46
Bonjour.

Dans un méthode générique d'un classe mère je cherche à allouer dynamiquement un objet dont je ne connais pas encore le nom de la classe (en fait il s'agit d'une classe fille).

Ce nom de classe est passé en paramètre de la fonction générique.

Procedure Charge(LOCAL NomClasseFille)
pclElement est CL_Element dynamique

pclElement = allouer un {NomclasseFille} // ne fonctionne mas


Déjà un première question :

Le nom de la utilisé dans la déclaration pclElement est CL_Element dynamique
doit-il être le même que celui utilisé lors de l'appel à pclElement = allouer un... ?
(J'espère que nom, sinon pour faudrait-il donner 2x la même information au compilateur...)

Et la 2ème question :
Est-il possible de faire un "allouer un " suivit d'une chaine contenant le nom de la classe.
Si oui comment, un variable chaine n'est pas acceptée...
...l'indirection non plus (n'étant pas une indirection ceci est plutôt logique).

Merci.

--
Roland
Membre enregistré
256 messages
Posté le 18 juin 2015 - 14:03
Bonjour

Il est possible d'utiliser une chaîne ou une définition.

o est UneClasse dynamique

s est une chaîne = "UneClasse"
o = allouer s()

p est une Definition = UneClasse
o = allouer p()
Posté le 18 juin 2015 - 16:10
Je pense que qq chose dans le genre

pClasseMere est cClasseMere dynamique
pClasseFille est cClasseFille dynamique

pClasseFille = allouer un cClasseFille
pClasseMere = pClasseFille

devrait marcher ?!

eric l.

Le 18/06/2015 10:46, roland a écrit :
Bonjour.

Dans un méthode générique d'un classe mère je cherche à allouer
dynamiquement un objet dont je ne connais pas encore le nom de la classe
(en fait il s'agit d'une classe fille).

Ce nom de classe est passé en paramètre de la fonction générique.

Procedure Charge(local NomClasseFille)
pclElement est CL_Element dynamique

pclElement = allouer un {NomclasseFille} // ne fonctionne mas


Déjà un première question :

Le nom de la utilisé dans la déclaration pclElement est CL_Element
dynamique
doit-il être le même que celui utilisé lors de l'appel à pclElement =
allouer un... ?
(J'espère que nom, sinon pour faudrait-il donner 2x la même information
au compilateur...)

Et la 2ème question :
Est-il possible de faire un "allouer un " suivit d'une chaine contenant
le nom de la classe.
Si oui comment, un variable chaine n'est pas acceptée...
...l'indirection non plus (n'étant pas une indirection ceci est plutôt
logique).

Merci.

--
Roland
Membre enregistré
223 messages
Posté le 18 juin 2015 - 16:40
Merci Yann

Pourquoi s() ou p() ??

Dans mon cas le nom de la classe à allouer est dans une variable chaine, membre de la classe d'exécution.

Quand dans une méthode je fais :

o = allouer :s

J'ai une erreur compilateur sur le double point.
Je mets toujours un : quand j'appelle des membres ou des méthodes de la même classe que celle de la méthode en cours.


L'utilisation du type "définition" me plait assez, je ne savais pas que l'on pouvais l'utiliser de cette manière, alors que l'objet n'est pas instancié.

Le type "définition", je l'utilisais uniquement avec la fonction RécuprèreDéfinition().
Je vais essayer.

--
Roland
Posté le 04 novembre 2023 - 07:38
Pour ceux que ce post intéresse encore, voici ma solution :
Procedure GetPresentateur(LOCAL sNomDeLaClasse, sNomDuPresentateur)

sCodeAExecuter est une chaîne

sCodeAExecuter = [
pclModèleAssocie est un "[%sNomDeLaClasse%]" dynamique = allouer un "[%sNomDuPresentateur%
pclPresentation est un "[%sNomDuPresentateur%]" dynamique = allouer un "[%sNomDuPresentateur% (pclModèleAssocie)
RENVOYER pclPresentation
]

RENVOYER ExécuteCode(sCodeAExecuter)