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éeITest
.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 classeMTest
implémente l’interfaceITest
.Procédure Afficher()
: La méthodeAfficher
est définie dansMTest
, 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 deMTest
.iMonObjet
est une variable de typeITest
, l'interface.iMonObjet <- pclMonObjet
: Associe l'objet dynamique à l'interface, permettant d'utiliser la méthodeAfficher()
.
📝 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