3.5 · Composants, modèles & réutilisation

Niveau 3 · Avancé : WLangage approfondi

3.5Composants, modèles & réutilisation

Objectif : Réutiliser sans dupliquer : modèles de fenêtres, fenêtres internes, superchamps et composants partagés entre projets.
Temps estimé : 11 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

L'essentiel en 30 secondes

  • Modèles et fenêtres internes suppriment la duplication d'écrans : une modification du modèle se répercute sur toutes les fenêtres qui en héritent.
  • Le composant empaquette un ensemble cohérent (fenêtres, procédures, classes, états) pour le réutiliser dans d'autres projets, avec correction centralisée.
  • Versionner, documenter et garder une interface stable : un composant qui change sans cesse fragilise tous les projets utilisateurs.

Mini-cas filé — Yacine mutualise les écrans de sa gestion

Yacine doit livrer une seconde application au groupe : la gestion des utilisateurs et des droits. Il commence par ses écrans de négoce : cinq fiches partagent le même bandeau, le même logo et les mêmes boutons. Il crée un modèle de fenêtre FEN_FicheModele et fait hériter les cinq fiches : une modification du bandeau se répercute partout. Le bloc de saisie d'adresse, répété dans la commande et la facture, devient une fenêtre interne FI_AdresseLivraison. Pour la gestion des utilisateurs, il empaquette un composant COMP_Utilisateurs avec une interface stable, documentée et versionnée. Il note le réflexe : modèle pour l'apparence, fenêtre interne pour un bloc, composant pour un module partagé.

Cas autonome de cette section : il revient dans le cours, le schéma, le script et le défi 48h de la section 3.5.

1. Modèles, fenêtres internes, superchamps

La réutilisation est la marque du développeur expérimenté : ne pas réécrire ce qui existe. Le modèle de fenêtre (ou d'état) définit une présentation commune — bandeau, logo, boutons standards. Les fenêtres qui en héritent reprennent ces éléments, et une modification du modèle se répercute sur toutes. La fenêtre interne est un bloc réutilisable inséré dans d'autres fenêtres : un sélecteur de client ou une saisie d'adresse écrit une fois, utilisé partout. Le superchamp regroupe des champs avec leur comportement et se dépose comme un champ unique.

2. Le composant, mécanisme le plus puissant

Le composant empaquette un ensemble d'éléments — fenêtres, procédures, classes, états — pour le réutiliser dans d'autres projets. Yacine développe une fois un module de gestion des utilisateurs ou de connexion à un service, puis l'intègre dans plusieurs applications. Le composant expose une interface visible de l'extérieur et cache son fonctionnement interne. Les bénéfices sont la capitalisation du savoir-faire, la correction centralisée et l'homogénéité entre applications.

3. Versions et interface stable

Un composant partagé demande de la discipline : gérer les versions pour savoir quel projet utilise quelle version, documenter son usage et concevoir une interface stable. Si l'interface change constamment, tous les projets utilisateurs doivent être repris. Avant de développer une brique, Yacine vérifie aussi si elle existe déjà dans la bibliothèque PC SOFT ou la communauté. Le bon réflexe : réutiliser, mais sans casser les projets qui dépendent du module.

Erreur d'interprétation fréquente : « Un modèle de fenêtre ne sert qu'à copier une apparence une fois ; une fenêtre interne est un simple raccourci d'affichage ; et un composant peut changer d'interface sans conséquence ». Non, triple erreur. Le modèle est hérité : ses modifications se répercutent sur toutes les fenêtres. La fenêtre interne embarque un comportement réutilisable, pas seulement un décor. Et un composant expose une interface aux projets utilisateurs : la changer sans précaution les casse. Yacine versionne, documente et stabilise l'interface.
Quatre niveaux de réutilisation Du plus simple au plus structurant, choisir selon le périmètre de partage. Modèleprésentation héritée+Fenêtre internebloc inséré+Superchampchamps groupés+Composantmodule entre projets Versionner et documenter tout composant partagé.
Du plus simple au plus structurant, choisir selon le périmètre de partage.
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) Yacine, développeur WinDev dans une PME de négoce de matériel électrique à Oran, constate que cinq fiches de son application partagent le même bandeau et les mêmes boutons. 2) Il crée un modèle FEN_FicheModele dont les fiches héritent, transforme la saisie d'adresse répétée en fenêtre interne FI_AdresseLivraison et garde les champs groupés dans un superchamp. 3) Pour la gestion des utilisateurs destinée à une seconde application du groupe, il empaquette un composant COMP_Utilisateurs avec une interface stable, documentée et versionnée. Leçon : choisir le mécanisme selon le périmètre — apparence, bloc, module — et protéger les projets utilisateurs par une interface stable.

🔎 Exemple concret — 🔎 Exemple concret — Du modèle au composant

Yacine réutilise à trois niveaux dans sa gestion de matériel électrique :

// Modele FEN_FicheModele : bandeau, logo, boutons Valider/Annuler
// Les fenetres FEN_Produit, FEN_Client, FEN_Fournisseur en heritent.

// Fenetre interne FI_AdresseLivraison inseree dans FEN_Commande
// et FEN_Facture : un seul comportement, aucun copier-coller.

// Composant COMP_Utilisateurs, partage avec une autre application
COMP_Utilisateurs.OuvreFiche(UtilisateurConnecte)
SI COMP_Utilisateurs.EstAutorise("FACTURATION") ALORS
    Ouvre(FEN_Facture)
FIN

Lecture : le modèle gère l'apparence, la fenêtre interne le bloc, le composant le module complet.

Leçon : l'interface du composant reste stable pour ne pas casser les projets utilisateurs.

Vocabulaire de la section

Modèle de fenêtre
Fenêtre-type définissant une présentation commune dont héritent les fenêtres de l'application.

Exemple simple : FEN_FicheModele porte le bandeau et les boutons des cinq fiches de Yacine.

Ce que ce n'est pas : une fenêtre recréée à la main pour chaque écran.

Réflexe : apparence commune → un modèle.

Fenêtre interne
Fenêtre réutilisable insérée dans d'autres fenêtres, avec son comportement.

Exemple simple : FI_AdresseLivraison est insérée dans la commande et la facture.

Ce que ce n'est pas : un bloc recopié dans chaque écran avec ses traitements.

Réflexe : bloc répété → fenêtre interne.

Superchamp
Ensemble de champs regroupés et réutilisables avec leur comportement, déposable comme un champ.

Exemple simple : Yacine regroupe les champs de recherche client dans un superchamp.

Ce que ce n'est pas : des champs séparés redéposés à chaque écran.

Réflexe : champs groupés réutilisables → superchamp.

Composant
Ensemble d'éléments empaqueté pour être réutilisé dans d'autres projets, avec une interface.

Exemple simple : COMP_Utilisateurs gère les droits dans plusieurs applications du groupe.

Ce que ce n'est pas : une collection de procédures limitée à un seul projet.

Réflexe : partager entre projets → un composant.

Interface stable
Partie visible d'un composant, qui doit rester prévisible pour les projets utilisateurs.

Exemple simple : Yacine documente et versionne les méthodes publiques de COMP_Utilisateurs.

Ce que ce n'est pas : une interface modifiée à chaque livraison sans préavis.

Réflexe : protéger les projets utilisateurs → interface stable.

En pratique — En pratique — Réutiliser plutôt que dupliquer

  1. Créez un modèle de fenêtre avec la présentation commune et faites-en hériter vos écrans, comme Yacine.
  2. Transformez un bloc répété (saisie d'adresse, recherche client) en fenêtre interne réutilisable.
  3. Pour un module destiné à plusieurs projets, créez un composant avec une interface claire et documentée.
  4. Versionnez et documentez le composant ; vérifiez si la brique existe déjà dans la bibliothèque PC SOFT.
Vous capitalisez votre travail : cohérence visuelle automatique, blocs réutilisés sans duplication et modules partagés avec correction centralisée.

Script pas-à-pas — mutualiser comme Yacine (4 min)

1) Repérez la présentation commune de plusieurs écrans et créez un modèle de fenêtre. 2) Faites hériter les écrans existants et vérifiez que la modification se répercute. 3) Isolez un bloc répété en fenêtre interne avec son comportement. 4) Pour un module partagé entre projets, définissez une interface stable et documentée. 5) Versionnez le composant et notez quel projet utilise quelle version.

Gardez ce réflexe : réutiliser sans casser — une interface de composant se change avec précaution.

Modèle copier-coller — la fiche réutilisation de Yacine

Modele        : presentation commune heritee (bandeau, boutons)
Fenetre interne: bloc reutilisable insere (adresse, recherche)
Superchamp     : champs groupes + comportement
Composant     : module empaquete pour D'AUTRES projets
Vigilance     : interface stable, documentation, versions

Cinq fiches identiques

Yacine crée un modèle et fait hériter les fiches : le bandeau se modifie une seule fois.

Une adresse répétée

Yacine isole la saisie d'adresse en fenêtre interne utilisée dans la commande et la facture.

Un module multi-projets

Yacine empaquette la gestion des utilisateurs en composant versionné.

Une interface qui change

Yacine documente et stabilise l'interface du composant pour ne pas casser les autres applications.

✓ Bonnes pratiques

  • Modèle pour l'apparence, fenêtre interne pour un bloc.
  • Composant pour un module partagé entre plusieurs projets.
  • Toujours versionner et documenter.

✗ Pièges fréquents

  • Recréer le même bandeau dans chaque fenêtre.
  • Copier un bloc au lieu d'une fenêtre interne.
  • Changer l'interface d'un composant sans précaution.

Points clés à retenir

  • Les modèles diffusent une présentation commune héritée.
  • Les fenêtres internes et superchamps réutilisent des blocs avec leur comportement.
  • Le composant empaquette un module pour d'autres projets.
  • Versionner, documenter et garder une interface stable.

Défi 48h — appliquez demain

Comme Yacine, repérez la présentation commune de plusieurs fenêtres et créez un modèle dont elles héritent. Transformez un bloc répété (adresse, recherche client) en fenêtre interne. Enfin, identifiez un module destiné à plusieurs projets et décrivez en une phrase son interface stable, sa documentation et sa politique de version.

Checklist sortie de section
  • Je sais quand utiliser modèle, fenêtre interne ou superchamp.
  • Je distingue un composant d'une collection de procédures.
  • Je comprends l'importance des versions et d'une interface stable.
Auto-évaluation 1-5 : est-ce que je réutilise au lieu de recopier un écran ?Auto-évaluation 1-5 : est-ce que je protège l'interface de mes composants ?

Questions fréquentes

Quand créer un composant plutôt qu'une simple collection de procédures ?

Créez un composant quand le module doit être partagé entre plusieurs projets et qu'il forme un ensemble cohérent avec des fenêtres, des états ou des classes. Une collection de procédures suffit pour organiser le code à l'intérieur d'un même projet. Le composant apporte la correction centralisée et l'encapsulation, mais impose de concevoir une interface, de documenter, de versionner et de tester.

Comment garantir la cohérence visuelle sans tout refaire à la main ?

En combinant trois niveaux : la charte graphique pour les styles globaux, les modèles de fenêtres pour la structure commune — bandeau, logo, boutons standards — et les fenêtres internes pour les blocs répétés. Une modification du modèle se répercute sur toutes les fenêtres qui en héritent. La règle est de centraliser l'apparence plutôt que de styliser chaque champ individuellement.

Vérifiez votre compréhension

Quand un composant est-il plus pertinent qu'une collection de procédures ?

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 3Questions inédites et durcies pour valider vos acquis