IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Implements pour de l'héritage?


Sujet :

VBA

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Par défaut Implements pour de l'héritage?
    Bonjour,

    J'aimerais faire quelque chose qui se rapproche de l'héritage POO, mais apparemment c'est plus compliqué qu'en Java ou C++.

    Pour s'en rapprocher, j'ai cru comprendre qu'il fallait utiliser Implements mais d'une je suis pas sûr et de deux j'ai l'erreur du "object module needs implements PropriétéClasseMère for interface ClasseMère" dans la classe fille.

    J'ai chercher sur le net et lu tout le forum sur héritage/polymorphisme mais ça n'a pas résolu mes erreurs de syntaxe.

    Dans ma classe mère,Piece j'ai une liste de propriétés (je n'en ai mises que 2 pour simplifier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Explicit
     
    Public Ref As Integer
    Public Typ As String
    Déjà là je ne sais pas si je suis obligé de mettre des méthodes Get et Set vu qu'on que MaPiece.Ref renvoie renoie la valeur de Ref et que MaPiece.Ref = blahblah attribue blahblah à Ref. On peut bien faire comme ça ?

    et dans ma classe fille,Cremaillere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
     
    Implements Piece
    Le message d'erreur me dit "object module needs implements Ref for interface Piece".
    J'ai essayé de rajouter des methodes Get et Set mais il y a toujours l'erreur...

    Autre question, si j'ai bien compris toutes les méthodes, fonctions, procédures,etc de la classe mère doivent être définies dans la classe fille en rajoutant devant le nom de la fonction,méthode,etc... un NomDeClasseMère_ ?

    Merci de m'éclairer

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Par défaut
    Bonjour,
    en fait c'est dans la classe fille que tu dois définir les méthodes Property Get et Porperty Let (Property Set est pour les variables Objets) pour que l'implémentation soit correcte, tant qu'il manque est une deux procédures tu auras une erreur.
    Dès lors que tu as utilisé le mot clé Implements. Tu verras dans le combobox de la classe fille(au-dessus de la fenêtre de code) , le nom de la classe mère parmi la liste des classes disponibles, et dans le combobox de droite, l'ensemble des méthodes à implémenter.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,
    à toute fin utile, le cours sur les modules de classe : http://sinarf.developpez.com/access/vbaclass/
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Par défaut
    jpcheck: Merci pour ce lien, ça m'a éclairci les idées

    ilank: Merci, plus d'erreur de compilation

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut Une modélisation proche de l'héritage en VBA: procédures polymorphes + interface
    Bonjour à tous, et plus particulièrement dalmasma !

    Puisque la notion d'héritage n'existe pas en programmation objet VBA, voilà une méthode simple pour s'en approcher.
    En guise de précaution, je vous dis tout de suite que cette vision est réductrice et qu'elle ne revendique pas le terme "héritage".

    Admettons que l'objectif de l'héritage est double:
    (1) réutiliser des méthodes,
    (2) décrire une hiérarchie de classes dont le "comportement" est hérité, mais peut être adapté à la classe par redéfinition de méthodes (polymorphisme).

    Habituellement, dans les langages de programmation objet ces deux aspects sont plus ou moins combinés au sein d'une hiérarchie de classes.

    En VBA qui ne permet pas l'héritage, pour obtenir une modélisation qui s'approche de l'héritage, je propose de bien séparer ces deux aspects en utilisant:
    (1) d'une part des "procédures polymorphes", pour la réutilisation de code générique (qui n'est pas spécifiquement lié à une classe),
    (2) et d'autre part, des classes qui implémentent une "classe-interface", pour la redéfinition de méthodes.
    (3) En plus, on peut encapsuler une "classe de base" dans une "classe dérivée", en vue de réutiliser les méthodes spécifiques de la classe de base.

    Bien entendu, les "procédures polymorphes" se basent sur le type "classe-interface".

    Au final, cette modélisation dichotomique peut s'avérer suffisamment satisfaisante pour quiconque aurait besoin de mettre en œuvre un pseudo héritage.

    En revanche, je ne vois pas comment définir une hiérarchie de classes de façon simple.

    Pour plus de détails, on peut relire la discussion Polymorphisme avec VBA: implémentation d'interface.
    _

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Par défaut
    Bonjour JBO,

    Tu veux dire quoi par
    je propose de bien séparer ces deux aspects
    (entre parenthèse après ta dernière modif tu as oublié de remplacer "deux" par "trois")

    On regroupe bien tous ces aspects dans chaque sous classe, non ?

    En revanche, je ne vois pas comment définir une hiérarchie de classes de façon simple.
    Ce n'est pas le but d' ?

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Par "dichotomie" je voulais dire séparer, d'une part, le comportement (spécifié par la "classe-interface") et, d'autre part, le code générique.

    En POO, il est fréquent de voir une méthode définie dans la classe de base et qui n'est jamais redéfinie dans les classes dérivées: en fait, il s'agit d'un code générique.
    Dans ma "méthode simpliste", je propose de sortir le code générique pour créer des procédures polymorphes, qui sont codées à part de la hiérarchie de classes.
    On pourrait poser comme principe, que le premier paramètre d'une procédure polymorphe est une référence à un objet qui implémente la classe-interface.

    Code VBA éventuellement dans un module de code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub ProcédurePolymorphe(o As <interface>)
    ...
    End Sub

    En POO, la classe de base spécifie un ensemble de méthodes qui sont ensuite redéfinies dans les classes dérivées: souvent on parle de méthodes virtuelles.
    La redéfinition d'une méthode virtuelle permet d'adapter (en interne) le comportement d'une classe, mais sans rien changer à la façon d'appeler cette méthode par un code générique (en externe).
    Je propose donc qu'une "classe-interface" se limite à ces seules "méthodes virtuelles".

    Enfin, si j'ai mentionné l'encapsulation d'une "classe de base", c'était juste dans un souci d'exhaustivité, pour ceux qui se demandent comme réutiliser dans une classe dérivée, le code spécifique d'une classe de base. Mais c'est assez "laborieux" en VBA...

    En espérant avoir été plus clair...
    _

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Citation Envoyé par dalmasma Voir le message
    Citation Envoyé par =JBO= Voir le message
    En revanche, je ne vois pas comment définir une hiérarchie de classes de façon simple.
    Ce n'est pas le but d'Implements ?
    Le but du mot clé Implements est de garantir qu'une classe implémente toutes les méthodes d'une interface.
    Ça ne suffit pas à décrire une hiérarchie.
    _

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Par défaut
    Ok, je crois que j'ai compris ,

    1) dans la super classe on laisse que les methodes qui vont etre héritées (et définies dans les sous classes), pour le générique on fait ça à part
    2) implements = "copier-coller" (à faire à la main) de méthodes sans relation hiérarchique

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 31/07/2015, 10h28
  2. Règles pour utiliser l'héritage
    Par wafiwafi dans le forum UML
    Réponses: 1
    Dernier message: 22/07/2012, 20h09
  3. Quelle implementation pour stocker des données
    Par jfouche dans le forum C++
    Réponses: 2
    Dernier message: 11/08/2010, 21h07
  4. [information]implementation pour une heap
    Par trolldom dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 16/11/2006, 20h03
  5. [RMI] Probleme pour retrouver la classe implementée.
    Par Koko22 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 16/09/2004, 19h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo