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

VB.NET Discussion :

[Vb.net | POO] Concept Overrides et Overridable quand est utilisé l'une ou l'autre des méthodes ?


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut [Vb.net | POO] Concept Overrides et Overridable quand est utilisé l'une ou l'autre des méthodes ?
    Bonjour,

    Cela fait maintenant 1 semaine que je patauge sur une methodologie Orienté Objet.
    J'aimerai votre aide pour éclaircir ma lanterne sur le concept de methode Overridable et Overrides.
    J'aimerai surtout comprendre quel mécanisme définit quel methode est appelée pour mieux appréhender le concept et etre sur de bien comprendre le cheminement.

    L'appli dans laquelle je développe est en VB.net 2008.

    J'ai une classe ControleDonnee
    Cette classe contient la donnée membre mDonnee
    Elle contient un Getter / Setter pour gérer cette donnée membre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Property Donnee() as Object
    Get
           Return mDonnee
    End Get
    Set (Byval Value as Object)
           mDonnee = Value
           OnDonneeChange()
    EndSet
    End Property
    OnDonneeChange() est une methode Overridable de la classe Controle de donnée.

    J'ai une classe ControleDonneeBarre qui herite de ControleDonnee.
    Elle contient la methode OnDonneeChange() qui est Overrides

    J'ai enfin une 3 eme Classe fenetreBarreGérer.vb :
    Elle contient la donnée membre mControleBarre de type ControleDonneeBarre.

    Dans cette dernière quand je fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mcontroleBarre.donnee = Ma_Valeur
    Je fait bien appel au Setter de la donnee membre mdonnee de mControleBarre?
    Ensuite quel methode OnDonneeChange() est appelée, celle de ControleDonnee ou celle de ControleDonneeBarre?

    Je vais deja attendre une réponse pour cette partie .

    Je ne sais pas si j'ai donnée tout les éléments et surtout si j'ai était clair.

    En attendant vos réponses merci d'avance.

    ++

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    d'une manière générale quand on un doute on peut le lever tout seul :
    il suffit de mettre un point d'arret sur les deux pour comprendre ce qui se passe

    pour overridable/overrides, c'est l'overrides qui est appelée
    en effet dans une méthode qui override une autre, il est courant de faire mybase.méthode, qui fait que la méthode de l'ancêtre est appelée pour effectuer son traitement en plus de celui qu'on a dans la redéfinition du membre
    sans le mybase.méthode, la méthode de base n'est donc pas appelée

    cas particulier : pour un constructeur (sub new) le mybase.new est implicite même s'il n'est pas écrit
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Dans la relation classe Enfant-Parent:

    Overridable (classe parent) : Signifie que cette procédure/fonction peut être réecrite dans les classes enfant (si le comportement doit être modifié du comportement par défaut, celui de la classe parent)
    Must Override (classe parent) : Signifie que cette procédure/fonction doit être réecrite dans les classes enfant (le parent indique juste que les enfants doivent avoir la fonction en question)
    Overrides (classe enfant) : Signifie que cette procédure/fonction est la réecriture d'une fonction dans la classe parent.
    Il me semble que l'on indique le nom de la fonction de base remplacée dans la syntaxe après le Overrides.

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut Overridable props et methodes
    bonjour narutoboka
    Tu peux meme rendre "overridables" les prop et voir ce qui se passe dans les coulisses,qui appele qui et prendre le controles des choses en main.
    voic un bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    Public Class Form1
        Private objCtrlDonneBarre As controleDonneeBarre
     
        Public Sub New()
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'classe controleDonneeBarre
            objCtrlDonneBarre = New controleDonneeBarre
            objCtrlDonneBarre.Donnee = "controleDonneeBarre"
     
        End Sub
     
     
    End Class
    Public Class controleDonnee
        Private mDonnee As Object
        Public Overridable Property Donnee() As Object
            Get
                Return mDonnee
            End Get
            Set(ByVal Value As Object)
                mDonnee = Value
                OnDonneeChange(mDonnee)
     
            End Set
     
        End Property
        Public Overridable Sub OnDonneeChange(ByVal data As Object)
            MessageBox.Show("Base OnDonneeChange : " & CType(data, String))
     
        End Sub
    End Class
    'Fournit une 2eme version de Prop
    'Fournit une 2eme version de OnDonneeChange
    Public Class controleDonneeBarre
        Inherits controleDonnee
        Private mDonnee As Object
        'cet overrides de la prop ne fait rien
        'mais permet de controler les coulisses
        Public Overrides Property Donnee() As Object
            Get
                Return mDonnee
            End Get
            Set(ByVal Value As Object)
                mDonnee = Value
                'regarde intellisense pour voir qui est appele
                OnDonneeChange(mDonnee)
                'appel à la Base
                MyBase.OnDonneeChange(mDonnee)
            End Set
     
        End Property
        Public Overrides Sub OnDonneeChange(ByVal data As Object)
            MessageBox.Show("Surcharge OnDonneeChange  : " & CType(data, String))
     
        End Sub
    End Class
    bon code.....

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 109
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    il y a des gens dans le bureau d'à coté qui peuvent te répondre immédiatement.

Discussions similaires

  1. [Conception] héritage et overriding
    Par DranDane dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 11/02/2008, 10h48
  2. Réponses: 7
    Dernier message: 25/02/2007, 04h26
  3. [POO] conception des classes
    Par poukill dans le forum C++
    Réponses: 229
    Dernier message: 19/07/2006, 08h28
  4. Réponses: 4
    Dernier message: 31/05/2006, 15h00

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