Encapsulation

Résolu
3xplo Messages postés 10 Date d'inscription mercredi 13 décembre 2006 Statut Membre Dernière intervention 8 juillet 2007 - 6 févr. 2007 à 15:54
3xplo Messages postés 10 Date d'inscription mercredi 13 décembre 2006 Statut Membre Dernière intervention 8 juillet 2007 - 8 févr. 2007 à 22:29
Bonjour,
je viens de créer une classe ClassCompteBancaire mais je n'arrive pas à faire en sorte qu'on puisse modifier le nom du titulaire du compte, je sais que ceci devrait, par la même occasion, simplifier la methode Initialiser. Je voudrais donc savoir si quelqu'un pourrait m'aider afin de me débloquer.
Voici la classe ClassCompteBancaire :

Private Type TOperation
Date As Date
Montant As Currency
Libelle As String
End Type

Private NomTitulaire As String
Private PrenomTitulaire As String
Private DateOuverture As Date
Private TypeCompte As String
Private NbOperations As Integer
Private Operation(1000) As TOperation
Private Solde As Currency

Public Function GetNomTitulaire() As String
GetNomTitulaire = NomTitulaire
End Function

Public Function GetPrenomTitulaire() As String
GetPrenomTitulaire = PrenomTitulaire
End Function

Public Function GetDateOuverture() As Date
GetDateOuverture = DateOuverture
End Function

Public Function GetTypeCompte() As String
GetTypeCompte = TypeCompte
End Function

Public Function GetSolde() As Currency
GetSolde = Solde
End Function

Public Sub Class_Initialize()
Solde = 0
NbOperations = 0
MsgBox "Le constructeur a été exécuté"
End Sub

Public Sub Class_Terminate()
MsgBox "Le destructeur a été exécuté"
End Sub

Public Sub Initialiser(PNomTitulaire As String, PPrenomTitulaire As String, PDateOuverture As Date, PTypeCompte As String)
NomTitulaire = PNomTitulaire
PrenomTitulaire = PPrenomTitulaire
DateOuverture = PDateOuverture
TypeCompte = PTypeCompte
End Sub

Public Sub AjoutOperation(PMontant As Currency, PDateOp As Date, PLibelle As String)
Operation(NbOperations).Montant = PMontant
Operation(NbOperations).Date = PDateOp
Operation(NbOperations).Libelle = PLibelle
NbOperations = NbOperations + 1
Solde = Solde + PMontant
End Sub

Sub Main()
Dim Mon_Compte As New ClassCompteBancaire
Mon_Compte.Initialiser "DUPONT", "Jean", Date, "Courant"
Mon_Compte.AjoutOperation 500, Date - 2, "Dépôt initial"
Mon_Compte.AjoutOperation 1000, Date - 1, "Dépôt de chèques"
Mon_Compte.AjoutOperation -200, Date, "Retrait"
MsgBox Mon_Compte.GetSolde
End Sub

4 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
8 févr. 2007 à 17:00
Oui, ben dans ce cas il te suffit de faire une méthode qui défini ton champs :

Public Sub SetNomTitulaire(value as String)
    NomTitulaire = value
End Sub

Et pour modifier tu fais CompteBancaire.SetNomTitulaire("Yopyop"), mais je suis étonné que tu fasse des classes sans utiliser les propriétés, c'est vraiment la base et tu ferais mieux des les utiliser...

<hr size="2" width="100%" />Julien.
3
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
6 févr. 2007 à 18:30
Salut,
Remplace toutes les fonctions "Get****" par des propriétés, ce sera bien plus pratique...

Property NomTitulaire() As String
    Get
        Return _NomTitulaire  
'Le _ au début de la variable est une manière pratique d'indiquer qu'il s'agit de la variable
'privée se rapportant à la propriété sans le _, tu dois donc renommer tes variables
'au début de ton document...
   End Get
   Set (Value as String)
       _NomTitulaire = Value
   End Set
End property

Et bien entendu, si tu veux que l'utilisateur ne puisse pas modifier une propriété, tu ajoute le mot-clé ReadOnly dans sa déclaration et tu n'implémente pas de méthode Set.

<hr size="2" width="100%" />Julien.
1
3xplo Messages postés 10 Date d'inscription mercredi 13 décembre 2006 Statut Membre Dernière intervention 8 juillet 2007
8 févr. 2007 à 13:14
Ok ok, merci pour les explications, celà ma permis de comprendre ta méthode, mais le problème c'est que je n'ai pas encore appris ça, donc je ne vais pas l'utiliser dans ma classe :( .
Il me semble que mon code n'a pas besoin d'être modifié à ce point pour que celà fonctionne, je crois qu'il existe "Set" (permet de modifier la valeur de la proprieté) qu'il faudrait utiliser à la place de "Get", mais je ne sais pas comment l'utiliser.

Julien, je valide tout de même ta reponse car c'est aussi bon mais encore trop technique pour moi ;) ! Merci encore !
Donc si quelqu'un a compris(décrypté) ce que je recherchais, merci de m'aider.
0
3xplo Messages postés 10 Date d'inscription mercredi 13 décembre 2006 Statut Membre Dernière intervention 8 juillet 2007
8 févr. 2007 à 22:29
Parfait, merci beaucoup !
En fait je ne suis qu'au début de mon apprentissage VB, et je n'ai pas encore vu les propriètés dans les classes, le programme est peut-être mal foutu, ça je te l'accorde .
En tout cas, tu as répondu à mes attentes, encore merci et bonne continuation !
++
0
Rejoignez-nous