Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[POO]création et utilisation de classe !

2 réponses
Avatar
404 found
je demande de l'aide pour créer et utiliser 2 classes. Touts les tutos que
j'ai trouvé parle théoriquement de la POO qui m'a aidé beaucoup mais j'en ai
besoin d'un exemple pour commencer :(
j'ai une classe Produit avec les attributs datecreation, dateexecution,
dureedevie et ordre. ses methodes sont executer(), ajouter(), lire(),
modifier et AvoirDonnee() qui est de type DataProduit (c'est exactement ici
que je me perd)
ma deuxième classe est alors DataProduit avec que des attributs :
datecreation, dateexecution, dureedevie, ordre et id !

Pour la classe DataProduit :
Public Class DataProduit
Public _datecreation As Date
Public _dateexecution As Date
Public _dureedevie As Integer
Public _ordre As Integer
Public _id As Integer
End Class

Pour la classe Produit : (et c'est ici que j'aurais besoin d'aide)
Public Class Produit
Public datecreation As Date
Public dateexecution As Date
Public dureedevie As Integer
Public ordre As Integer

Public ReadOnly Property AvoirDonnee() As DataProduit
Get
?????
End Get
End Property

comment puis je alors implementer AvoirDonnee ? doit elle être une Property
ou une sub ? comment affecter au variables de mon produit, le DataProduit !

bref dans le code (sub load par exemple) je vex aboutir à ça :
Dim MyObject as DataProduit 'de la classe DataProduit
Dim MyProduit as Produit 'de la class Produit

MyObject._datecreation = MyProduit.AvoirDonnee._datecreation
'...

Merci de votre attention et de votre aide !

2 réponses

Avatar
Zoury
Salut ! :O)

Public Class DataProduit
Public _datecreation As Date
Public _dateexecution As Date
Public _dureedevie As Integer
Public _ordre As Integer
Public _id As Integer
End Class
Public Class Produit
Public datecreation As Date
Public dateexecution As Date
Public dureedevie As Integer
Public ordre As Integer



Pourquoi veux-tu créer deux classes identiques ?

Il me semble que la classe DataProduit est de trop... elle ne devrais pas
exister car elle duplique les infos de la classe Produit.
Les propriétés d'un produit sont elles même les données d'un produit d'où, à
mon avis, l'inutilité de la classe DataProduit...

Si tu veux faire une bonne encapsulation, déclare les attributs de la classe
en privée et ensuite expose ses attributs via des propriétés publiques, Ex :
'***
' on met NotInheritable si la classe ne
' se fait pas dérivée
Public NotInheritable Class Produit

' on déclare les attributs de la classe en privée
' cela nous assure que seule notre classe y aura accès
Private _nID as Int32
Private _dtCreation As DateTime
Private _dtExecution As DateTime
Private _nDureeVie As Int32
Private _nOrdre As Int32

' et on autre pour initialiser les valeurs
Public Sub New(ByVal nID As Int32, _
ByVal dtCreation As DateTime, _
ByVal dtExecution As DateTime, _
ByVal nDureeVie As Int32, _
ByVal nOrdre As Int32)
_nID = nID
_dtCreation = dtCreation
_dtExecution = dtExecution
_nDureeVie = nDureeVie
_nOrdre = nOrdre
End Sub

' ici on déclare les propriétés de notre classe, elles peuvent
' être ReadOnly, WriteOnly ou read/write soit avec un Get et un Set
' ou même pas exposé du tout, comme le ID par exemple
Public ReadOnly Property DateCreation() As DateTime
Get
Return _dtCreation
End Get
End Property

Public ReadOnly Property DateExecution() As DateTime
Get
Return _dtExecution
End Get
End Property

Public ReadOnly Property DureeVie() As Int32
Get
Return _nDureeVie
End Get
End Property

Public ReadOnly Property Ordre() As Int32
Get
Return _nOrdre
End Get
End Property

' les fonctions viennent ici..

End Class
'***

Je ne sais pas si c'est plus clair ?

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
404 found
Merci yannick, cela est plus clair pour moi !

En fait pour la duplication des classes, j'ai récupéré un diagramme UML que
je dois respecter puis qu'il a été fait par des "Pro" et où il y a ces 2
classes

pour plus de clareté, voila à quoi ressemble la partie dont je veux code

http://www.vbcity.com/forums/attachment.asp?id120

en te remerciant encore :)

"Zoury" a écrit :

Salut ! :O)

> Public Class DataProduit
> Public _datecreation As Date
> Public _dateexecution As Date
> Public _dureedevie As Integer
> Public _ordre As Integer
> Public _id As Integer
> End Class
> Public Class Produit
> Public datecreation As Date
> Public dateexecution As Date
> Public dureedevie As Integer
> Public ordre As Integer

Pourquoi veux-tu créer deux classes identiques ?

Il me semble que la classe DataProduit est de trop... elle ne devrais pas
exister car elle duplique les infos de la classe Produit.
Les propriétés d'un produit sont elles même les données d'un produit d'où, à
mon avis, l'inutilité de la classe DataProduit...

Si tu veux faire une bonne encapsulation, déclare les attributs de la classe
en privée et ensuite expose ses attributs via des propriétés publiques, Ex :
'***
' on met NotInheritable si la classe ne
' se fait pas dérivée
Public NotInheritable Class Produit

' on déclare les attributs de la classe en privée
' cela nous assure que seule notre classe y aura accès
Private _nID as Int32
Private _dtCreation As DateTime
Private _dtExecution As DateTime
Private _nDureeVie As Int32
Private _nOrdre As Int32

' et on autre pour initialiser les valeurs
Public Sub New(ByVal nID As Int32, _
ByVal dtCreation As DateTime, _
ByVal dtExecution As DateTime, _
ByVal nDureeVie As Int32, _
ByVal nOrdre As Int32)
_nID = nID
_dtCreation = dtCreation
_dtExecution = dtExecution
_nDureeVie = nDureeVie
_nOrdre = nOrdre
End Sub

' ici on déclare les propriétés de notre classe, elles peuvent
' être ReadOnly, WriteOnly ou read/write soit avec un Get et un Set
' ou même pas exposé du tout, comme le ID par exemple
Public ReadOnly Property DateCreation() As DateTime
Get
Return _dtCreation
End Get
End Property

Public ReadOnly Property DateExecution() As DateTime
Get
Return _dtExecution
End Get
End Property

Public ReadOnly Property DureeVie() As Int32
Get
Return _nDureeVie
End Get
End Property

Public ReadOnly Property Ordre() As Int32
Get
Return _nOrdre
End Get
End Property

' les fonctions viennent ici..

End Class
'***

Je ne sais pas si c'est plus clair ?

--
Cordialement
Yanick
MVP pour Visual Basic