Bonjour,
Je débute dans la programmation purement objet, en particulier dans le passage du relationnel à l'objet, et je fais un tout petit programme de gestion avec ado pour apprendre.
Disons que l'on a une classe LigneCommande qui représente une ligne d'une commande et une classe Produit. Chaque ligne de commande concerne un produit. Donc dans la classe LigneCommande on aura par exemple, entre autres :
Ce qui permet d'accéder au produit de la ligne de commande, pour afficher son libellé par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class LigneCommande { private Produit produit; public Produit LeProduit { get {return produit;} set {produit = value;} } }
Mais une ligne de commande ne doit pas servir à modifier un produit, or rien ne m'empêche de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 LigneCommande ligne = new LigneCommande(); //... string libelle_produit = ligne.LeProduit.Libelle;
Comme je vois les choses, le produit qui est contenu dans la ligne de commande devrait être en lecture seule. Comment vous faites ? Vous mettez que l'identifiant du produit au lieu de l'objet entier dans LigneCommande ? Vous codez de la même façon en laissant le problème ? Certaines de vos classes ont un mode "lecture seule" qui va lever une exception si l'on essaie de modifier un attribut alors que l'objet est en lecture seule ? Ou vous mettriez le produit en private dans LigneCommande:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Produit pdt = ligne.LeProduit; pdt.Prix *=10; pdt.Update(); //enregistre dans la base
Ce qui peut être embêtant j'imagine si l'on a besoin d'accéder à beaucoup d'attributs de l'objet encapsulé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class LigneCommande { private Produit produit; public float PrixDuProduit { get { return produit.Prix; } } }
Merci !
Partager