Interfaces en Windev

Documentation Technique – Interfaces en Windev

Cette documentation explique le concept des interfaces en Windev, leur utilisation et les bonnes pratiques associées. Elle inclut des exemples de code et des justifications pour le choix de certaines architectures.

📌 Introduction aux Interfaces

Les interfaces en Windev sont utilisées pour définir des contrats entre les classes et leur comportement, sans fournir d’implémentation. Une interface contient des signatures de méthodes, qui doivent être implémentées par les classes qui en font usage.

🔄 Déclaration d’une Interface

Voici un exemple simple de déclaration d’une interface en Windev :

Interface ITest
      Procédure Afficher()
  FIN

Explication :

  • Interface ITest : Crée une interface nommée ITest.
  • Procédure Afficher() : Déclare une méthode sans corps à implémenter dans une classe.

✅ Implémentation de l’Interface dans une Classe

Une classe peut implémenter cette interface pour en définir le comportement. Exemple :

Classe MTest IMPLEMENTE ITest
      Procédure Afficher()
          Info("Méthode Afficher() de MTest appelée")
      FIN
  FIN

Explication :

  • Classe MTest IMPLEMENTE ITest : La classe MTest implémente l’interface ITest.
  • Procédure Afficher() : La méthode Afficher est définie dans MTest, suivant la signature de l’interface.

🔄 Utilisation d’Interfaces avec des Objets Dynamiques

Il est possible d’utiliser une interface avec des objets dynamiques. Voici comment :

pclMonObjet est un objet dynamique = allouer un MTest
  iMonObjet est un ITest

  iMonObjet <- pclMonObjet

  iMonObjet.Afficher()

Explication :

  • pclMonObjet est un objet dynamique instancié à partir de MTest.
  • iMonObjet est une variable de type ITest, l'interface.
  • iMonObjet <- pclMonObjet : Associe l'objet dynamique à l'interface, permettant d'utiliser la méthode Afficher().

📝 Définition d'une Combinaison pour les Interfaces

Dans l'exemple ci-dessous, l'interface IContact utilise une combinaison COContactOption pour définir les options possibles pour la méthode GetNomAvecOption().

Définition de la combinaison COContactOption

Combinaison COContactOption
      AVEC_CIVILITE
      AVEC_TELEPHONE
      AVEC_EMAIL
  FIN

Explication :

La combinaison COContactOption définit un ensemble d'options (ex. : AVEC_CIVILITE, AVEC_TELEPHONE, etc.) pouvant être utilisées dans les méthodes de l'interface, comme dans GetNomAvecOption().

Pourquoi placer cette combinaison dans le module Lambique ?

  • Centralisation et Cohérence : Cela permet d'avoir une définition unique de la combinaison, facilement accessible depuis tous les modules métiers.
  • Réutilisation : La combinaison sera réutilisée de manière centralisée dans toutes les parties du projet qui nécessitent ces options.
  • Évolution Simplifiée : En cas de modification de cette combinaison, il suffira de mettre à jour le module Lambique, ce qui impactera tous les autres modules automatiquement.

Exemple d'interface utilisant la combinaison COContactOption

Interface IContact
      Procédure GetNomAvecOption(coOption est un COContactOption)
  FIN

📌 Interface : Pointeur vers un Objet

En Windev, une interface agit comme un pointeur vers un objet. Cela signifie qu'une interface ne prend pas d'espace mémoire, elle contient uniquement des signatures de méthodes qui doivent être implémentées par des classes.

Explication :

  • Pointeur : Une interface est un pointeur vers un objet, qui permet d'accéder à une implémentation spécifique sans connaître le type exact de l'objet.
  • Absence d'Espace Mémoire : L'interface ne contient pas de données réelles. Elle sert uniquement à déclarer des méthodes que les classes doivent implémenter.
  • Utilisation : Le code suivant permet de lier un objet à une interface : iMonObjet <- pclMonObjet.

🔧 Bonnes Pratiques

  • Les interfaces doivent être utilisées pour définir des comportements génériques, réutilisables.
  • Les interfaces ne doivent pas contenir d'implémentation, mais uniquement des signatures de méthodes.
  • Evitez les dépendances circulaires entre interfaces et classes implémentant ces interfaces.
  • En cas de changements majeurs dans une interface, assurez-vous de mettre à jour toutes les classes qui l'implémentent.

📈 Exemples de Code

Déclaration d'une interface avec une méthode

Interface IContact
      Procédure GetNomAvecOption(coOption est un COContactOption)
  FIN

Implémentation dans une classe

Classe MContact IMPLEMENTE IContact
      Procédure GetNomAvecOption(coOption est un COContactOption)
          // Implémentation spécifique
      FIN
  FIN
Note : Une interface est un mécanisme puissant pour garantir que des classes suivent un contrat de comportement défini sans imposer de détails d'implémentation.