Résumé : Les interfaces définissent des contrats sans logique métier, tandis que les classes abstraites permettent d’imposer des méthodes tout en centralisant du code commun.
📊 Tableau comparatif
Caractéristique | Interface (IListe ) |
Classe Abstraite (AListe ) |
---|---|---|
Contient des méthodes abstraites | ✅ | ✅ |
Contient du code (implémentation) | ❌ | ✅ |
Déclare des propriétés avec valeur | ❌ | ✅ |
Hérite d’une autre classe | ❌ | ✅ |
Peut être héritée | ⛔ (pas au sens OO) | ✅ |
Utilisable pour le polymorphisme | ✅ | ✅ |
Utilité principale | Définir un contrat | Partager du code et forcer des méthodes |
💡 À retenir
Interface : impose une structure sans aucune logique. Parfaite pour dire : « Je dois avoir telle méthode. »
Classe Abstraite : impose une structure et fournit des comportements par défaut. Elle peut contenir des propriétés, des méthodes concrètes, etc.
🧪 Exemples concrets en WinDev
Interface IListe
INTERFACE IListe
PROCEDURE Initialiser()
PROCEDURE Charger()
FIN
Classe abstraite AListe
CLASSE ABSTRAITE AListe
PROCEDURE Initialiser() EST ABSTRAITE
PROCEDURE Charger() EST ABSTRAITE
PROCEDURE GetTailleListe()
// Code commun à toutes les listes
RENVOYER Liste..Occurrence
FIN
FIN
✅ Conclusion
Tu peux choisir une interface (IListe
) si tu veux simplement t’assurer qu’une classe propose certaines méthodes. Si tu veux aussi centraliser du code commun à toutes tes listes (chargement paresseux, comptage, initialisation par défaut), une classe abstraite (AListe
) est plus puissante.