Sujet : [C++] Y a un truc que je pige pas avec les class |
BifaceMcLeOD |
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] |
janoscoder |
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++ |