PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Instance d'interface dynamique
Instance d'interface dynamique
Started by AZIZ AIT ZAGHAR, Jul., 27 2024 9:58 AM - 2 replies
Registered member
20 messages
Posted on July, 27 2024 - 9:58 AM
Bonjour,

Est-il possible de créer une "Instance" d'interface de manière dynamique c'est à dire en passant par une chaine qui porterait le type de l'interface.

Ci-dessous un code simplifié :
//Déclaration des interfaces :
I_Produit_simple est une interface
...
FIN

I_Produit_paramétré est une interface
...
FIN

CProduit_simple est une Classe
Implémente I_Produit_simple
...
FIN
CProduit_parametré est une Classe
Implémente I_Produit_paramétré
...
FIN

//Utilisation
SELON nTypeProduit
CAS 1
sNomClasseConcrète est une chaîne = CProduit_simple
CAS 2
sNomClasseConcrète est une chaîne = CProduit_paramétré
FIN

iProduit est un I_Produit_simple <- allouer un sNomClasseConcrète

Mon problème est sur cette dernière ligne, je ne sais pas la rendre générique, je suis obligé de mettre en dur le nom de l'interface alors que le type de la classe concrète est porté une chaine.

Sauf erreur de ma part, la compilation dynamique n'est pas utilisable à mon sens car l'objet devant accueillir le résultat de la compilation dynamique doit être type.

J'ai essayé l'Inférence de type avec un truc du style :

Déclaration globale de la fenêtre
I_Poduit_simple est un I_Produit_simple
I_Poduit_parametré est un I_Produit_paramétré

...
{gsNomInterface,indVariable} <- allouer un gsNomClasse
soit gMonProduit <- {gsNomInterface,indVariable}

Probléme > Le type 'interface' n'est pas autorisé dans une inférence de type.

l'idée est de remplacer :
iMonProduit est un I_Produit_simple par iMonProduit est un sNomInterface

Je ne sais pas si j'ai été clair ...

Cordialement.
Registered member
159 messages
Posted on July, 27 2024 - 2:21 PM
Bonjour,

Pour rendre générique quelque-chocs qui ne l'était pas voici comment j'ai procédé :

Procedure MaFenêtre(gpclMaPreparation est un objet dynamique)
sOrdre est une chaîne

gpclNewFamille est un objet dynamique

//gclNewfamille est un CFamillePrépa

sOrdre="gpclNewFamille = allouer un "+gpclMaPreparation.m_clItem..Classe//+"(clUnePiece)"
ExécuteCode(sOrdre)


J'espère que c'est une piste qui pourra t'aider
Cordialement,

--
Pierre
Registered member
20 messages
Posted on July, 27 2024 - 8:11 PM
Bonjour,

Merci pour cette piste, mais malheureusement ça ne fonctionne pas avec les Interfaces.

Il y a pas pas mal de choses qui fonctionne avec les Interfaces, comme par exemple il n'est pas possible de récupérer la définition d'une interface comme on le fait naturellement avec une classe.

J'essais d'utiliser les Interfaces pour appliquer les principes SOLID et la mise en place de Design Pattern (Builder, Strategy ..) sur a base de ce qui est fait dans des tuto Java, mais plus j'avance plus je me retrouve coincé.

Merci tout de même pour la contribution.