la plupart (98 %) du code ecrit ressemble a ca :
1 2 3 4 5 6 7 8
| class A
{
int m_value;
float m_time;
public:
void setTime(float value);
void setValue(int value);
}; |
La le set est un mauvais mot (sans doute) employé a tort et a travers, ce setter est mauvais et je n'irai pas cautionner le changement de valeurs internes comme cela.
neanmoins, ce que j'essaye de faire en general ressemble beaucoup plus a cela :
1 2 3 4 5 6 7 8 9 10 11 12
| void Player
{
FILE* m_stream;
Output* m_output;
public:
void setTime();
};
void Video::setTime(float time)
{
m_stream->seek( time * frameTime() * complex code + offset - age du capitaine);
} |
ici, ma classe n'a pas de champ time, mais son interface publie une propriété qui est le temps : on peut recuperer le temps actuel dans la vidéo ou meme deplacer le curseur sur un temps particulier.
Voila un exemple de setter qui ne me choque pas du tout! celui ci maintient la logique dans l'instance
lorsque j'ecris le code plus haut, je permet la modification d'une valeu ou d'une autre independamment, sans vraie raison, juste pour que les gens puissent ecrire dedans. Dans ce cas autant etre franc et bidouiller le champ lui meme.
Lorsque j'ecris ma classe player, elle possede son comportement interne ou le temps n'est pas vraiment representé (pas directement) mais ma classe "publie" dans son interface la propriété de temps, lequel agira sur l'implementation (le stream en l'occurrence) pour faire refleter la commande "setTime".
Partager