Citation:
Envoyé par
JolyLoic
Ce n'est pas ce que j'ai pu constater, en particulier dans des langages avec la notion de propriété, et pour de l'IHM. Si je fais un set, je vais déclencher des évènements (c'est le rôle du DP observer, non ?) lesquels pourront à leur tout modifier d'autres valeurs, voire même remodifier la valeur initiale (et ce sans que ce soit sous le contrôle de l'écrivain de la classe, c'est décidé par ses utilisateurs). Pour en avoir mangé pas mal à une époque, je peux dire que jamais ô grand jamais je n'ai une vision d'une fonction set simpliste.
J'ai presque envie de dire que le seul fait que tu aies besoin d'un observateur sur un set montre que tu as déjà "loupé quelque chose", surtout s'il doit aller triturer la donnée que tu as fournie comme paramètre pour la "faire rentrer dans le moule" :aie:
J'attendrais beaucoup plus ce genre de comportement vis à vis d'une fonction qui ne prétend pas "fixer" une valeur à celle indiquée ;)
Citation:
Autre exemple, que faire si un set vient détruire les invariants d'une classe ? Surtout s'il est possible de les rétablir silencieusement et sans soucis ? Je suis tombé récemment pour une démo sur une classe Fraction. Elle avait comme invariants qu'elle est tout le temps gardée en mémoire sous forme simplifiée, et que le dénominateur est tout le temps positif. De plus, elle étant non invariable.
Si une fraction vaut 1/2, que faire sur un setNumerateur(2) ? Rompre l'invariant ? Le conserver avec une fraction valant 1/1 ?
Et si elle fait 2/1, que faire si on fait un setDenominateur(-2) ? Lever une erreur ? Rompre l'invariant ? Ou bien générer la fraction -1/1 ?
Trouver d'autres noms que setNumerateur ? Pourquoi pas, mais lesquels ?
C'est bien là tout le problème...
rompre l'invariant de ton contrat est un coup à être pendu haut et court sur la place du marché... Il vaut donc mieux l'éviter ;)
modifier le dénominateur alors qu'on veut fixer le numérateur serait mentir à l'utilisateur sur ce qui est réellement fait (en plus, nous aurions toujours un assert qui saute si l'on veut vérifier la valeur de l'opérande modifié)
La réponse est donc bel et bien : Trouver d'autres noms que setNumerateur ;)
Mais quant à savoir lesquels... Je ne peux que te conseiller de réfléchir au comportement auquel tu t'attend en invoquant cette fonction ;)
Citation:
Envoyé par
stardeath
bah je dirai les 3 mon bon monsieur.
pour la donnée inutile dû à une mauvaise conception, je n'ai pas encore suffisamment d'expertise pour éviter ça, je dirai, pour faire une analogie, que c'est le code historique, c'est comme ça mais ça marche, donc on le change pas mais c'est planifié pour ... dans longtemps.
Puis on s'étonne qu'après avoir voulu fixer cette valeur (avec un set comme de juste), l'objet n'est absolument pas modifié (en apparence du moins) comme on aurait pu l'espérer :aie:
Joyeuseté de débuggage en perspective ;)
Citation:
pour l'objet totalement spectateur face à la donnée, ça arrive très souvent selon moi, comme par exemple toutes les données d'aide au débogage, comme un identifiant, le propriétaire, le thread, etc.
dans mon code c'est souvent des données sous la macro DEBUG.
Il m'arrive aussi de rajouter des données de débuggage dans mon code, mais:- généralement, je ne donnerai pas accès (surtout en écriture) à ces données
- je supprime ces informations "dés que possible" (comprend: une fois que la solution au problème a été trouvée ;))
- l'ajout de données de débuggage est rarement commité (par moi, du moins) pour garder une base de code propre ;)
Citation:
et pour le dernier cas, la commodité, et là le changeData me parait pas adéquat, il indiquerait que la donnée est une donnée essentielle et que l'objet la traite en accord avec son but premier, alors que c'est plutôt une donnée accessoire, remarque que ça peut très facilement dériver vers le premier cas.
Justement, pour ce cas particulier, il n'y a souvent aucune raison de fournir un mutateur quelconque ni un quelconque comportement publique ayant pour but de modifier cette donnée...
Cela signifie : ni changeData, ni setData ni quoi que ce soit qui indique d'une quelconque manière que la donnée en question a lieu d'être modifiée ;)