Code propre classe appartenant à une autre classe

farrakis Messages postés 33 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 12 mai 2013 - 24 oct. 2011 à 10:06
NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 - 24 oct. 2011 à 20:26
Bonjour

Etant totalement autodidacte en programmation, mais pas forcément débutant,je me pose une question sur la "propreté d'un code". Je m'explique en exemple ci-dessus.

J'ai défini une classe que l'on appellera clsMERE. Cette classe contient un certain nombre de properties , dont une liste d'objet de classe clsB et une une d'objets de classe clsC.

Public Class clsMERE
  Public Property Bs as List(of clsB)
  Public Property Cs as Liste(of clsC) 
End Class



Mes classes clsB et clsC sont définies par ailleurs et comportent elles aussi un certain nombre de properties .

Parmi les properties , fonctions ou routines de la classe clsB, certaines doivent dépendre de l'objet clsMERE.[*]


Public Class clsB

Public sub Toto
  'toto dépend de l'objet clsMERE auquel il appartient
End Sub
  

End Class




La question que je me pose est comment coder proprement ces routines ? En effet, comment appeler dans une routine de clsB l'objet clsMERE auquel appartient clsB ?

J'ai imaginer plusieurs solutions, mais aucune ne me semble vraiment propre.

La première consiste à ajouter une property MERE de type clsMERE à ma classe clsB. Quand j'ajoute un objet clsB à mon objet myMERE, j'affecte automatique à la property MERE l'objet (cf. ci-dessus). Mais ce procédé me semble lourd : un objet clsMERE contient une série d'objets clsB qui eux même contiennt un objet clsMERE, etc.

Public Class clsB
Public property MERE as clsMERE
End Class

[code=vb]
Public Class clsMERE
  Public Property Bs as List(of clsB)
  Public Property Cs as Liste(of clsC) 

  public sub AjouterB(monB as clsB)
      monB.Mere=me
      Bs.add(monB)
  end sub  
End Class



La seconde idée a été de créer dans mon programme un variable globale maMERE et de mettre cet objet comme variable de la procédure TOTO. Mais je perd le coté "appartenance" de l'objet


Public Module General 
   Public maMERE as clsMERE
   Public Sub MAIN
      maMERE = new clsMERE
   End Sub 
End Module

Public Class clsB

Public sub Toto(MERE as clsMERE)
  'toto dépend de MERE
End Sub



La troisième idée que j'ai eu est de coder toto dans clsMERE et non plus dans clsB. Mais du coup, je perd de beaucoup l'intérêt de la prog objet.

Public Class clsMERE
  Public Property Bs as List(of clsB)
  Public Property Cs as Liste(of clsC) 

  public Sub toto(monB as clsB)
      'codage de toto
  end sub  
End Class


Avez-vous des idées sur le sujet ?

Merci et n'hésitez pas à poser des questions pour clarifier ma demande si nécessaire...

3 réponses

4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
24 oct. 2011 à 16:00
Si je t'es bien compris (ce qui n'est pas sur) il faut que tu te documente sur les héritages.
0
farrakis Messages postés 33 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 12 mai 2013
24 oct. 2011 à 19:45
Merci de ta réponse, mais effectivement je n'ai pas du être clair.

En effet je ne souhaite pas que ma classe clsB hérite de ma classe mère clsMERE.

Je vais essayer de donner un exemple un peu plus parlant...

Admettons que j'ai une classe clsMERE qui contienne une liste de clsB.

Public class clsMERE
  Public property Bs as list(of clsB)
End Class


Je veux avoir une function sur un objet clsB qui renvoie l'élément situé avant lui dans dans la liste

Public class clsB
  Public function BAvant as clsB
  End Function
End Class

Comment remplir ma fonction BAvant ? 


0
NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
24 oct. 2011 à 20:26
Bonjour,

Je verrais plutôt, une variable/propriété mémorisant la classe parente dans la classe enfant.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0