débutant, design et encapsulation ? - C++ - Programmation
Marsh Posté le 19-02-2008 à 11:26:33
Ben déjà, retourner l'adresse d'une variable privée rien que côté design, c'est très laid, parce que tu n'as du coup aucun contrôle sur le contenu.
Ensuite, je ne vois pas l'intérêt de retourner un tableau entier, mieux vaut retourner la valeur contenue à un index donné.
Enfin, sauf si tu as quelque chose de précis en tête, j'utiliserais plutôt une list plutôt qu'un tableau de valeurs, beaucoup plus facile à gérer.
Marsh Posté le 19-02-2008 à 11:32:27
Elmoricq a écrit : Ben déjà, retourner l'adresse d'une variable privée rien que côté design, c'est très laid, parce que tu n'as du coup aucun contrôle sur le contenu. Ensuite, je ne vois pas l'intérêt de retourner un tableau entier, mieux vaut retourner la valeur contenue à un index donné. Enfin, sauf si tu as quelque chose de précis en tête, j'utiliserais plutôt une list plutôt qu'un tableau de valeurs, beaucoup plus facile à gérer. |
salut, et merci pour ta réponse
"Ben déjà, retourner l'adresse d'une variable privée rien que côté design, c'est très laid, parce que tu n'as du coup aucun contrôle sur le contenu. "
je sais ... mais je sais pas comment faire autrement
en fait j'ai pas grand chose de précis en tête, j'ai une position dans l'espace 2d (position x et y) et au lieu de retourner la position x et la position y (donc faire deux get() ) j'avais pensé faire comme en c et retourner une addresse. Par exemple si je travaillais dans un espace a N dimensions j'aurais N valeurs a retourner, ce serait peut etre pas super pratique. Comment je pourrait faire avec une liste? pourquoi est-ce plus simple ?
d'avance merci
Marsh Posté le 19-02-2008 à 11:36:43
Même en C je n'aurais pas fait comme ça, pour une raison simple : ce n'est pas intuitif.
En C, je travaillerais avec une structure comprenant la position sous forme de deux variables x et y.
C'est beaucoup plus lisible et compréhensible de travailler avec position.x et position.y qu'avec position[0] et position[1].
Du coup, rien ne t'empêche de faire la même chose en C++.
Pour la list, oublie ça dans ce cas-là, ça ne te sera pas utile.
Marsh Posté le 19-02-2008 à 11:36:51
in_your_phion a écrit : en fait j'ai pas grand chose de précis en tête, j'ai une position dans l'espace 2d (position x et y) et au lieu de retourner la position x et la position y (donc faire deux get() ) j'avais pensé faire comme en c et retourner une addresse. Par exemple si je travaillais dans un espace a N dimensions j'aurais N valeurs a retourner, ce serait peut etre pas super pratique. Comment je pourrait faire avec une liste? pourquoi est-ce plus simple ? |
Pourquoi ne pas tout simplement créer une classe Point (ou même une struct, c-style) et renvoyer ça?
Classe de préférence immutable, et du côté de l'appelant tu aurais un truc genre:
Code :
|
edit: elmo
Marsh Posté le 19-02-2008 à 11:42:01
Ouais moi je suis d'accord avec Masklinn. Tu est en langage objet donc profites en. Fait des classes! Ce sera plus clair rien que pour coder correctement.
Marsh Posté le 19-02-2008 à 11:43:44
certes ....
merci pour vos réponses !!!
edit: si je fait une classe avec que des membres publiques, autant faire une structure non ?
Marsh Posté le 19-02-2008 à 11:45:24
ReplyMarsh Posté le 19-02-2008 à 11:46:09
Elmoricq a écrit : Bah, struct, class... en C++, ça fait pas une énorme différence. |
Tu peux déclarer que les membres d'une struct sont const final toussa?
Marsh Posté le 19-02-2008 à 11:49:53
Bah en fait, struct == class, y a que la visibilité des membres par défaut qui change (public pour struct, private pour class).
Marsh Posté le 19-02-2008 à 11:50:50
Elmoricq a écrit : Bah en fait, struct == class, y a que la visibilité des membres par défaut qui change (public pour struct, private pour class). |
Ah ok
edit: c'est vrai que j'avais vu passer un truc sur le sujet il y a pas longtemps
Marsh Posté le 19-02-2008 à 11:52:16
ok ...
donc si je suis bien, pour mon exemple, je pourrait faire :
Code :
|
ou, alternativement :
Code :
|
et dans ma classe GeoFrom :
Code :
|
?
Marsh Posté le 19-02-2008 à 11:52:51
in_your_phion a écrit : edit: si je fait une classe avec que des membres publiques, autant faire une structure non ? |
Pourquoi faire que des membres publics???
Tu déclares tes attributs en private et tu fait des get et des set pour les modifier comme une classe normale.
Citation : sont const final toussa? |
J'ai pas tout compris là!!!
Marsh Posté le 19-02-2008 à 11:52:52
Exactement.
edit > j'répondais à in_your_phion
Marsh Posté le 19-02-2008 à 11:54:14
Non
fardke1 a écrit :
|
Il n'y a pas à les modifier, le Point est juste utilisé pour encapsuler des informations, pourquoi se faire chier à créer des accesseurs qui n'ont strictement aucun intérêt?
fardke1 a écrit :
J'ai pas tout compris là!!! |
Ben déclarer les membres de la struct comme étant e.g. const histoire d'éviter qu'ils puissent être modifiés (puisqu'ils n'ont pas à l'être)
Marsh Posté le 19-02-2008 à 12:01:30
Citation : |
Excuse moi Masklinn après avoir lu les post suivant j'ai compris ce que tu voulais dire mais il y a un certain temps pour moi entre la lecture de vos post et l'écriture du mien !!!!!!
Citation : Il n'y a pas à les modifier, le Point est juste utilisé pour encapsuler des informations, pourquoi se faire chier à créer des accesseurs qui n'ont strictement aucun intérêt? |
Pour les raison qui font les points fort du langage objet :
-réutilisabilité de ta classe point.
-protection de tes variables pour ne pas faire tout et n'importe quoi
Et puis sa te permet une meilleure lisibilité de ton code et c'est beaucoup plus propre.
De plus un get et un set pour une classe point c'est grand maximum une ligne... Je trouve quand même pas sa énorme!!
Marsh Posté le 19-02-2008 à 12:34:47
fardke1 a écrit : Pour les raison qui font les points fort du langage objet : |
N'importe quoi en barres de 12.
Marsh Posté le 19-02-2008 à 11:08:30
bonjour,
je suis débutant en c++ et j'ai une petite question ...j'ai fait une classe qui a une méthode qui retourne un pointeur sur un tableau , du genre :
est-ce la bonne manière de faire ?? J'ai lu dans un forum anglais que retourner un pointeur n'est pas une bonne solution du point de vue design parce qu'on perd l'encapsulation : on informe l'utilisateur que la classe utilise un tableau d'entiers.
Comment faudrait-il faire ? Que me conseillez vous ...?
merci d'avance
( ps: j'ai fait du c avant )
Message édité par in_your_phion le 19-02-2008 à 11:18:51