[C++] Y a un truc que je pige pas avec les class

Y a un truc que je pige pas avec les class [C++] - Programmation

Marsh Posté le 12-06-2001 à 19:05:56    

Pourquoi tout le monde préconise-t-il de créer des fonctions publiques dans une classe afin de sortir ou changer la valeur de variables qui sont quand à elles privées?
 
Je vois pas trop à quoi ça avance de se faire d'écrire à chaque fois des fonctions pour ça...
 
Enfin bon, j'attends vos commentaires.
:)

Reply

Marsh Posté le 12-06-2001 à 19:05:56   

Reply

Marsh Posté le 12-06-2001 à 19:17:16    

Cela permet de protéger la classe contre une mauvaise utilisation : ta fonction peut te servir à éliminer des plages de valeurs indésirables (valeurs négatives par exemple), ou à répercuter la modification à d'autres endroits du programme qui ont besoin d'être prévenus du changement (par exemple le statut de l'application : est-elle active, en pause, terminée,...).

Reply

Marsh Posté le 12-06-2001 à 19:34:12    

exemple:
une classe de vecteurs unitaires.
 
une classe contenant une longue string, et une valeur de hachage associée. A chaque fois que tu touches à la string, il faut mettre à jour la valeur de hachage.
 
Une image. Tu ne peux pas changer la hauteur et la largeur sans avoir à réallouer la mémoire, ou accepter de valeurs négatives.
 
Deuxième intérêt:
Avoir plusieurs implémentations de la même chose.
Si on revient aux vecteurs unitaires. on peut implémenter ça avec deux angles alpha et beta, et on peut avoir les fonctions GetX, GetY et GetZ qui fonctionne correctement.
Comme ça si on trouve une meilleure méthode, on peut l'implémenter sans bouziller le reste du code.
De même, si on fait des templates, on veut que les classes utilisées en paramètre supportent un certain nombre de crières. Le plus possible, ces critères sont l'impléméntation de fonctions, plutôt que la présence de données.
 
En ccl, pas besoin de cacher les données pour un type  
class Vector3D
{
public:
 float x,y,z;
...
};  
on pourrait même mettre une struct.
 
mais pour les classes plus complexes, il faut songer à la manière dont on veut qu'elles soient utilisées et créer une interface, puis l'implémenter.
 
on peut donc faire du genre
 
class InterfaceImage
{
 des fonctions du genre GetW Get Y, operator [] (x,y)pour accéder à un pixel...
};
 
class ImageComp: public InterfaceImage
{
 là des données private
 et l'implémentation public de l'interface
 
};
 
class ImageRapide: public InterfaceImage
{
 idem
};
 
et comme ça c'est propre et stable.
 
J'espère avoir été assez clair,
 
Always C++

Reply

Marsh Posté le 12-06-2001 à 20:30:57    

Comme l'a dit nnovic, cela réduit (de façon drastique) le nombre d'endroits dans le code où telle ou telle donnée est directement modifiée. Ce qui veut dire aussi que si une donnée a une valeur incorrecte, c'est beaucoup plus facile de savoir quel bout de code lui a donné cette valeur incorrecte, et cela permet aussi d'écrire plus facilement du code pour se prémunir contre ces valeurs incorrectes.
 
Bref, cela permet de beaucoup mieux maîtriser (et même de réduire) la complexité d'un programme.

 

[edit]--Message édité par BifaceMcLeOD--[/edit]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed