Présentation passée à une vue (fenêtre)

Présentation passée à une vue (fenêtre)

Cette documentation explique le rôle du mot-clé LOCAL dans le contexte de l’architecture MVP sous WinDev, notamment concernant le comportement de la liaison automatique et la gestion mémoire.

🧪 Test Comparatif : Avec et Sans LOCAL

Code utilisé

// Code de FEN_Unite
PROCÉDURE FEN_Unite(gpclPresentation est un PUnite dynamique <présentation> = Null)
MaFenêtre..ValeurRenvoyée = Faux
SI gpclPresentation = Null ALORS
    gpclPresentation = PUnite.gNouvellePresentation()
FIN
// Code de test
pclModele       est un MUnite dynamique    = new MUnite
pclPresentation est un PUnite dynamique    = new PUnite(pclModele)

Trace("AVANT")
Trace("Nom",gVersTexte(pclPresentation.p_sNomComplet))
Trace("Adresse mémoire modèle",&pclModele)
Trace("Adresse mémoire présentateur",&pclPresentation)

Ouvre(FEN_Unite, pclPresentation)

Trace("APRES")
Trace("Nom",gVersTexte(pclPresentation.p_sNomComplet))
Trace("Adresse mémoire modèle",&pclModele)
Trace("Adresse mémoire présentateur",&pclPresentation)

Résultat sans LOCAL

AVANT
Nom :
Adresse mémoire modèle : 2814818595968
Adresse mémoire présentateur : 2814819434672

APRES
Nom : TEST
Adresse mémoire modèle : 2814818595968
Adresse mémoire présentateur : 2814819434672

Résultat avec LOCAL

PROCÉDURE FEN_Unite(LOCAL gpclPresentation est un PUnite dynamique <présentation> = Null)
AVANT
Nom :
Adresse mémoire modèle : 1667493780352
Adresse mémoire présentateur : 1667494671664

APRES
Nom : TEST
Adresse mémoire modèle : 1667493780352
Adresse mémoire présentateur : 1667494671664

Tableau comparatif

Aspect Sans LOCAL Avec LOCAL
Adresse mémoire identique Oui Oui
Liaison automatique ✔ Fonctionne ✔ Fonctionne
Effet de bord possible Oui (si la variable globale est modifiée ailleurs) Non (variable limitée à la procédure)

🧠 Gestion de la Mémoire avec LOCAL

Le mot-clé LOCAL ne libère pas directement la mémoire, mais il favorise une bonne gestion mémoire en limitant la durée de vie de la variable. Les objets dynamiques sont passés par référence, donc :

  • Si gpclPresentation est local, la variable disparaît à la fermeture de la fenêtre.
  • Si aucun autre objet ne référence le présentateur ou le modèle, alors l’objet peut être libéré par le GC.

Comparaison d’impact mémoire

Scénario Durée de vie de la variable Objet libérable automatiquement ?
LOCAL gpclPresentation Jusqu’à fermeture de la fenêtre Oui, si non utilisé ailleurs
Variable globale Durée de vie de la fenêtre, voire plus Non, sauf nettoyage manuel
Note : Bien que les adresses mémoire ne changent pas, utiliser LOCAL rend explicite la durée de vie de la variable, réduisant ainsi les risques de fuites mémoire dans des architectures complexes.

✅ Conclusion

L’utilisation de LOCAL dans les fenêtres WinDev est une bonne pratique à la fois pour :

  • Garantir le bon fonctionnement de la liaison automatique.
  • Réduire les effets de bord.
  • Faciliter la libération mémoire à la fermeture.