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 :

Shared d'une classe fille accesible a partir le mère ?


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Shared d'une classe fille accesible a partir le mère ?
    Bonjour,

    Classes filles : Pays, Secteur
    Classe mère abstraite : Element

    Chaque classe filles a une liste shared. Ainsi la classe Pays a une liste propre a la classe reprenant tout les pays

    Classe Pays :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Shared liste As New List(Of Pays)
        Shared ReadOnly Property getListe() As List(Of Pays) 'renvoie la liste des pays
            Get
                Return liste
            End Get
        End Property
    J'ai un module composé de plusieurs méthodes du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Sub remplirComboPays(ByRef combo As ComboBox)
            If Pays.getListe.Count.Equals(0) Then
                Pays.RemplirListe()
            End If
            combo.Items.Clear()
            For Each p As Pays In Pays.getListe
                combo.Items.Add(p)
            Next
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Sub remplirComboSecteur(ByRef combo As ComboBox)
            If Secteur.getListe.Count.Equals(0) Then
                Secteur.RemplirListe()
            End If
            combo.Items.Clear()
            For Each p As Secteur In Secteur.getListe
                combo.Items.Add(p)
            Next
        End Sub
    J'aimerai unifier ces méthodes en quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Sub remplirComboSecteur(ByVal e as Element, ByRef combo As ComboBox)
            If e.getListe.Count.Equals(0) Then
    'e ?? est-il possible de trouver l'instance de E et y appliquer getListe ? et ce sans passer par plein de elseif typeOf e is ...
                e.RemplirListe()
            End If
            combo.Items.Clear()
            For Each p As Secteur In e.getListe
                combo.Items.Add(p)
            Next
        End Sub
    Pour le moment ma classe mère ne s'occupe pas du tout des listes alors que chaque sous classe en a une. Devrais-je prévoir quelque chose ? Et si oui comment ?

  2. #2
    Membre averti Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Points : 422
    Points
    422
    Par défaut
    Bonsoir,
    Soit tu met ta methode getListe dans la classe abstraite (Element), soit dans le deux classes, en leurs faisant implémenter une interface.
    On n'arrive pas très bien à voir, ni à saisir ta logique avec les bouts de code que tu nous as fournis. Explique plus en détail, les relations entre Element, pays et Secteur, histoire qu'on te conseille sur comment organiser ton code.

  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 : 41
    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
    Ce n'est conceptuellement pas très beau de mettre une liste d'instance dans la partie statique d'une classe. Pour être franc c'est même très moche...

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par sinople Voir le message
    Ce n'est conceptuellement pas très beau de mettre une liste d'instance dans la partie statique d'une classe. Pour être franc c'est même très moche...
    Tu conseillerais de la mettre où alors ? Dans une classe réservée a cet effet ?

  5. #5
    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 : 41
    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
    Le but des classes et de définir l'entité qu'elle représentent et non pas de stocker les données relatives. (J'utiliserais plutot un Ennum s'il s'agit réellement d'une énumération (sorte de liste persistante (non modifiable) comme Les couleurs sélectionnables dans l'IDE ou le type d'une messagebox par exemple).

    Pour le stockage des données, du fichier de ressource serialisé en binaire à la base de donnée en passant par de l'xml il y a du choix...

    Ta solution n'est pas fausse techniquement car tu peux définir une liste d'objet ou tu veux dans le programme (Item dans un comboBox, Objet list dans un formulaire...)

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Il s'agit d'une liste modifiable dans le sens, ou il est possible lors de l'execution du programme de rajouter un pays.

    Exemple (Déroulement sur un formulaire)

    1) On demande de sélectionner le pays dans une combo
    ----> Lorsque je rentre dans la combo, le programme regarde s'il la liste (shared dans pays) contient des éléments.
    ---------Si oui > on fait rien
    ---------Si non > on charge la liste (shared dans pays) depuis la BDD
    ----> On met les objets Pays de la liste (shared) dans la combo
    2)-> Si le pays s'y trouve, on le selectionne, on a fini
    ---> Si le pays s'y trouve pas, on le crée
    ---------> creation de l'objet pays
    ---------> copie dans la BDD
    ---------> ajout dans la Liste (shared dans pays)
    ---------> ajout dans la combo (cbPays.Items.add(p))

    Si j'ai bien compris, dans ce cas, il n'est pas possible d'utiliser un Ennum ? si ?

    Si je crée une classe reprenant toutes les listes. Je fais comment pour récupérer la bonne liste lorsque je rempli ma combo (en partant du principe d'avoir qu'une fonction remplircombo) ? des TypeOf ? (voir premier message)

    Merci de ta réponse !

  7. #7
    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 : 41
    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
    Pas possible d'utiliser des Ennum, c'est un plus comme une liste de constante d'après ce que j'ai compris.

    Dans un comboBox tu peux mettre n'importe quel objet qui à l'interface appropriée (voir la doc pour plus de détail). Comme par exemple une liste Of.

    Tu peux très bien charger le comboBox avec une liste de pays, puis à un autre moment mettre une liste de ville dedans ou même une liste de voiture du moment qu'il arrive à lier Display et Value Member.

    Tu peux même faire une liste d'Element et mélanger tes villes et secteurs dedans.

    Le comboBox en lui même contient un objet de List (le fameux Item), tu peux donc directement crée tes elements dans cette liste sans passer par un shared.

    Un fonction Shared qui renvoie une liste de Ville créer à partir de ta base de donnée n'est pas une mauvais idée, mais dans ce cas ta classe devient liée à la base de donnée (c'est plus une ville mais une VilleMaBaseDonnée). Tu limites alors la réutilisation de ta classe dans une autre application.

    Il faut donc mieux mettre la partie UsineDeFabrication ailleurs que dans la classe.

    C'est une méthodologie parmi d'autres. L'important est que toi ou les autre personnes qui liront ton code dans une année comprennent ce que tu voulais faire (Et que ça marche accessoirement)

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/09/2013, 21h38
  2. Instance d'une classe fille à partir d'une classe mère
    Par Mathieu Salles dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/10/2012, 16h09
  3. Réponses: 1
    Dernier message: 29/04/2009, 22h39
  4. Héritage d'un événement pour une classe fille
    Par korntex5 dans le forum Langage
    Réponses: 4
    Dernier message: 11/01/2006, 16h48
  5. [debutant]appeller une fonction d'une classe fille et mere ?
    Par Battosaiii dans le forum Débuter
    Réponses: 1
    Dernier message: 12/11/2005, 12h56

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