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 :

Référence au nom d'une classe dans une classe [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut Référence au nom d'une classe dans une classe
    Bonjour à tous,

    Programmant depuis quelques semaines en VB.NEt, je me lance depuis quelques jours dans la POO avec ce même langage.
    En autodidacte j'arpente les forums avec avidité pour trouver, généralement toujours, une solution à mes soucis.

    Seulement voilà cette fois je ne parviens pas à trouver ma réponse. Le vocabulaire de novice que j'utilise y est sans doute pour quelque chose...
    Bref voici le soucis :

    Je cherche, dans une classe donnée, à faire référence au nom de l'objet de cette classe que je manipule. De même si cette classe est amenée à créer un objet d'une seconde classe. Dans cette seconde classe j'aurai besoin de faire référence au nom de l'objet manipulé de la première classe.
    Ca parait un peu foutoir alors je vous illustre cela :

    Soit une classe "Chien", avec une fonction "Aboie".
    Soit un chien nommé "Toto".
    Dans la fonction "Aboie", le chien (qui est différent du commun des chiens) va alors aboyer son propre nom. Comment réaliser ceci à partir du code suivant?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Sub Aboie()
            MsgBox ("Aboie " & Comment appeler le nom du chien, à savoir "Toto"???  )
    End Sub
    De la même façon :
    Soit une classe "Collier" avec une fonction "TirerDessus"
    Je sais attribuer au chien son collier.
    Mais comment faire pour que dans la fonction "TirerDessus" de cette classe "Collier", je puisse demander que le chien aboie?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Sub TirerDessus()
           NomDuChien.Aboie  'Ou quelque chose du style
    End Sub

    Voilà, j'espère que ma demande est clairement formulée... Et je vous remercie d'avance pour votre aide

    Séb.

  2. #2
    Membre éclairé Avatar de gnusti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Par défaut
    Citation Envoyé par Dedechseb Voir le message
    Soit une classe "Chien", avec une fonction "Aboie".
    Soit un chien nommé "Toto".
    Dans la fonction "Aboie", le chien (qui est différent du commun des chiens) va alors aboyer son propre nom. Comment réaliser ceci à partir du code suivant?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Sub Aboie()
            MsgBox ("Aboie " & Comment appeler le nom du chien, à savoir "Toto"???  )
    End Sub
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Class Chien
        Public monNom As String
     
        Public Sub New(ByVal nomDuChien As String)
            Me.monNom = nomDuChien
        End Sub
     
        Public Sub Aboie()
            MsgBox("Je m'appelle " & Me.monNom)
        End Sub
    End Class
    Et dans ton programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Sub Test()
        Dim totoLeChien As New Chien("Toto")
     
        totoLeChien.Aboie()
     
    End Sub

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    Bonjour gnusti, et merci pour ta réponse.

    En effet c'est une idée, mais qui ne réponds pas entièrement à ma demande.
    Ta solution pourrait cependant me convenir mais il faudra que j'ajoute cette variable à toutes mes classes, ainsi que sur tous les appels à cette classe.... Ce qui risque d'être long et laborieux.

    Me.monNom = nomDuChien
    Le Me fait donc référence au chien ici (donc à l'objet actuellement "utilisé"). En se passant de la création de la variable "monNom", puis-je accéder au nom de l'objet directement ???
    Par exemple avec quelque chose du style Me.Name ??

    De la même façon comment faire référence au "parent" du Me ?
    Par exemple pour le collier est donc le Me, et son parent serait le chien. Quelque chose qui ressemblerait à Me.Parent.Aboie

  4. #4
    Membre éclairé Avatar de gnusti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Par défaut
    J'ai l'impression que tu fais quelques confusions au niveau du "principe" de la POO.

    La classe Collier n'a de raison d'exister que si tu t'en sers de manière propre (par exemple, tu as un tiroir de colliers connus et quand tu sors un chien, tu prend un des colliers).

    Dans ton cas, j'aurais, par exemple :
    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
     
    Public Class Collier
        Private couleur As String
        Private longueur as Integer
     
        Public Sub New()
            Me.couleur = "Transparent"
            Me.longueur = 0
        End Sub
     
        Public Sub New(ByVal uneCouleur as String, uneLongueur as Integer)
            Me.couleur = uneCouleur
            Me.longueur = uneLongueur
        End Sub
     
        Public Function GetCouleur() as String
            return Me.Couleur
        End Function
     
        Public Function GetLongueur() as Integer
            return Me.longueur
        End Function
    End Class
    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
     
    Public Class Chien
        Private nom As String
        Public leCollier as New Collier
     
        Public Sub New(ByVal nomDuChien as String)
            Me.nom = nomDuChien
        End Sub
     
        Public Sub Aboie()
            MsgBox("Je m'appelle " & Me.monNom)
        End Sub
     
        Public Sub DecritTonCollier()
            MsgBox("Mon collier est " & Me.leCollier.GetCouleur & " et mesure " & me.leCollier.GetLongueur & " cm")
        End Sub
     
        Public Sub TireLaLaisse()
            MsgBox("Aïe !! Je m'appelle " & Me.monNom)
        End Sub
     
    End Class
    et lors de l'utilisation :
    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
     
    Public Sub Test()
        Dim totoLeChien As New Chien("Toto")
     
        totoLeChien.leCollier = New Collier ("Rouge", 20)
     
        totoLeChien.Aboie()
        'Affiche "Je m'appelle Toto"
     
        totoLeChien.DecritTonCollier()
        'Affiche "Mon collier est Rouge et mesure 20 cm"
     
        MsgBox("Mon collier est " & totoLeChien.leCollier.GetCouleur() & " et mesure " & totoLeChien.leCollier.GetLongueur() & " cm"
        'Affiche "Mon collier est Rouge et mesure 20 cm"
     
        totoLeChien.TireLaLaisse()
        'Affiche "Aïe ! Je m'appelle Toto"
    End Sub

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    Très bien, jusque là je te suis parfaitement.

    Actuellement tu défini le collier (couleur et longueur) lors de la création de celui-ci et son attribution au chien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    totoLeChien.leCollier = New Collier ("Rouge", 20)
    Imaginons que le collier est "magique", je peux en modifier la couleur sans le changer, donc sans devoir en attribuer un nouveau au chien. Cela se ferait selon une fonction du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Public Function SetCouleur(nouvelleCouleur as string) as String
             Me.Couleur = nouvelleCouleur
             'Et ensuite le chien dit "Je m'appelle Toto et mon collier est maintenant nouvelleCouleur
        End Function
    Insérée dans le module de la classe "Collier"

    Et pour l'utilisation,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        totoLeChien.leCollier.SetCouleur("Vert")
    Comment faire pour que lorsque cela arrive, le chien s'exprime de lui même "Je m'appelle Toto et mon collier est maintenant nouvelleCouleur"
    Pour lui faire dire la couleur pas de soucis, mais pour lui faire dire, depuis la classe collier, qu'il s'appelle Toto?

    Je sais que c'est peut-être tiré par les cheveux avec cet exemple canin, mais c'est exactement ce que je dois appliquer à mon projet. Le problème étant qu'on ne m'autorise pas à discuter de ce projet sur la toile...

  6. #6
    Membre éclairé Avatar de gnusti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Par défaut
    A ma connaissance, tu ne pourras pas le faire de cette manière et si tu veux que le chien agisse, il faudra agir sur le chien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    totoLeChien.SetCouleurColier("Bleu")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Class Collier
    ...
        Public Sub SetCouleur(ByVal uneNouvelleCouleur As String)
             Me.couleur = uneNouvelleCouleur 
        End Sub
    ...
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Class Chien
    ...
        Public Sub SetCouleurCollier(ByVal uneNouvelleCouleur As String)
            Me.leCollier.SetCouleur(uneNouvelleCouleur)
            MsgBox("Je m'appelle toujours " & Me.nom & " mais maintenant mon collier est " & Me.leCollier.GetCouleur())
        End Sub
    ...
    End Class
    Sinon, il faut totalement oublier la class collier pour intégrer les données dans la classe Chien...

    N'hésites pas à me MP si tu souhaites plus de précisions sans pouvoir les diffuser ici... (je comprends que trouver des analogies qui fonctionnent est plutôt difficile )

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    penser que le collier ne peut être utilisé qu'à partir du chien comme le pense gnusti est réducteur, même si dans le cas présent le collier n'est pas utilisé directement mais via le chien

    il faut juste une notion de parentée tout comme unbouton.parent peut mener au form sur lequel il est

    il faut donc une propriété sur le collier qui définisse le parent
    si le parent est forcément un chien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private _Parent as Chien
    public property Parent as Chien
    get
     return _parent
    end get
    set 
      _parent = value
    end set
    end property
    sur vs 2010 public property Parent as Chien suffit, il créé implicitement le reste du code précédent



    concernant le nom de la variable pour ne pas s'embeter à rajouter une propriété Nom as string sur la classe chien c'est totalement impossible car plusieurs variables peuvent référencer le même chien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim c as new chien
    dim c2 as chien = c
    c et c2 sont en fait des pointeurs vers un espace mémoire, ici c et c2 sont à deux endroits différents de la ram, mais les 2 contiennent un pointeur vers le même chien dans la ram
    modifier une propriété du c fait que c2.lapropriété refletera le changement, vu que c'est le même chien, mais dans 2 variables
    ceci n'est valable que pour les classes, pour les types par valeur (integer, date, boolean, string ...) il n'y a pas de pointeur, donc si unint = unautreint modifier unint ne modifiera pas unautreint ; tout comme c2 = new chien ne modifiera pas que c pointe toujours vers le 1er chien

    il faut donc rajouter une propriété nom au chien ... et j'espèce t'avoir embrouillé un peu
    pour continuer sur ces notions de POO, tu peux te renseigner sur byval et byref
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    gnusti, Pol63, merci pour vos réponses.

    J'étudie tout ce que vous venez de me dire et reviens vers vous pour vous informer du résultat ensuite.

    Séb.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  3. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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