|
|
#1 |
|
Novice
![]() ![]() ![]() |
Me revoici,
Je ne savais pas où poster ceci, car cela ne vaut pas que pour C++, alors désolé si je ne suis pas dans la bonne section J'aurais voulu quelques conseils sur "Quels noms donner à mes classes?" Est ce que vous me conseillez d'utiliser un préfixe ou suffixe a chaque classe ou quelque chose de ce style? Les noms en français ou anglais? Enfin, des petits détails que je trouve très importants lorsque quelqu'un doit rentrer dans l'un de mes programmes Merci d'avance |
|
|
|
|
|
#2 |
|
Initié
![]() Date d'inscription: September 2006
Messages: 99
|
Déjà pour la langue, l'important n'est pas que ce soit l'anglais ou le français, mais que ce soit toujours la même (moi je suis même pas cette règle ... trop la flemme d'avoir des noms à ralonge
.Duarna |
|
|
|
|
|
#3 |
|
Membre du conseil d'administration
![]() |
Personnellement, je préfère tout faire en anglais de manière à garder une certaine uniformité (les bibliothèques que tu vas utiliser seront sans aucun doute en anglais, donc...).
Et en CamelCase (ie: JeSuisUneVariable et pas je_suis_une_variable). Sinon la règle la plus importante est de garder des noms EXPLICITES. Ie: nommer MyBigGameElement MBGG va te faire aller dans le mur parce que ton projet ne sera absolument pas maintenable. Pour éviter des noms trop long, il y a de toutes façons des façons simples d'y arriver au travers des namespaces. Au lieu de faire: MyIAGameElement, l'approche plus agréable serait: game::ia::MyElement. L'imbrication des namespaces fait que si tu es déjà dans le namespace, tu n'as pas besoin de re-préciser où tu te trouves... (MyElement suffit). Pour étendre un peu le débat, la question est quelle coding style utiliser? Il y a quelques exemples ici: http://www.chris-lott.org/resources/cstyle/ http://www.blender.org/documentation...tyleguide.html Evidemment, la Gnu Coding Standard: http://www.gnu.org/prep/standards/ (elle est beaucoup plus sur l'architecture et l'organisation d'un projet en lui-même, mais de nombreux conseils donnés son fondamentaux comme la façon de sortir une erreur sous Linux). De manière générale, la seule coding style que je trouve totalement insupportable c'est la notation hongroise: http://fr.wikipedia.org/wiki/Notation_hongroise Heureusement, depuis .net, son plus fervent supporter (Microsoft) a retourné sa veste et ne l'utilise plus (ouf!). |
|
|
|
|
|
#4 |
|
Novice
![]() ![]() ![]() |
Merci de la réponse
![]() Je vais aller jeter un oeil à tout cela Edit: Une question qui n'a rien a voir avec les noms. Est-il préférable de ne mettre qu'une seule classe par header? Ou plusieurs classes peuvent être regroupées? (En imaginant que par exemple le fichier soit IA.h et qu'on ait plusieurs classes intervenant pour l'IA) Dernière modification par Arcalys 27/05/2007 à 07h43. |
|
|
|
|
|
#5 |
|
Initié
![]() ![]() Date d'inscription: April 2005
Messages: 139
|
Excellent conseil de MrCool, je rajouterai même qu'il s'applique également pour les noms de variables.
A eviter absolument les char c, int tmp, String s, etc etc surtout si le code est destiné à être éventuellement lu par quelqu'un d'autre. Concernant ta question sur les headers je pense que c'est techniquement possible mais je le deconseillerai, quitte à avoir plusieurs classes IA autant les regrouper dans un package |
|
|
|
|
|
#6 | |
|
Administrateur du forum
![]() Date d'inscription: March 2005
Messages: 1 526
|
Citation:
- la notation complète hongroise telle que Microsoft l'utilisait était ridicule, comportait trop d'informations jusqu'à noyer le nom de la variable ; - le retournement de veste de Microsoft est tout aussi ridicule, passant dans l'extrême inverse et perdant les énormes bénéfices d'une telle notation, si elle est "contrôlée". Le deuxième point est encore plus ridicule si l'on considère que, tout en bannissant les préfixages en les taxant de tous les maux de la Terre, Microsoft continue à préfixer certaines choses (les I d'interface par exemple). J'ai un article complet là-dessus à terminer, faudra que je pense à m'y remettre. Pour répondre à la question initiale sur les classes, un CamelCase est recevable (et même trèsutilisé). Inutile d'un C devant. Pour ce qui est des namespace remplaçant complètement des préfixages par packages, John Lakos dans son excellent Large Scale C++ Design émet une réserve. Et même si le livre a 10 ans et que les namespace étaient encore balbutiant, la remarque est recevable. Maintenant, le bouquin parle de "Large Scale", ce qui n'est probablement pas le cas d'Arcalys. (il y a peu, je suis tombé sur un conflit de noms dans une API entre deux classes de namespace différent, ces namespace étant, par design, souvent utilisées ensemble. Du coup, la syntaxe à l'utilisation s'en trouve très alourdie et les erreurs plus facile à faire). |
|
|
|
|
|
|
#7 | |
|
Membre du conseil d'administration
![]() |
Citation:
Evidemment, on peut trouver quelques exceptions comme des classes imbriquées utilisées en interne: Code:
class A
{
public:
enum B { /*FIXME*/ }; // Un enum utilisé par A
private:
class C
{
};
// J'utilise B dans mes méthodes privées...
};
Code:
namespace Foo
{
// Un namespace non-nommé a la propriété intéressante de n'être
// accessible que par les classes du namespace parent (ici Foo).
namespace
{
class B
{
};
};
class A
{
// B est une classe utilisée en interne.
};
Par contre, dans les autres cas, il vaut bien mieux avoir un header par classe. Si tu souhaites regrouper des classes, les namespace servent à ça. En général, on regroupe même toutes ces classes qui sont du même namespace dans un répertoire à part. Exemple: src/ia va contenir toutes les classes qui servent pour l'IA et qui seront toutes dans le namespace IA. Un bon découpage du projet peut mener à avoir énormément de fichiers sources, ce n'est vraiment pas un problème. |
|
|
|
|
|
|
#8 | ||
|
Administrateur du forum
![]() Date d'inscription: March 2005
Messages: 1 526
|
Citation:
Les manières de faire forment un large sujet, celle proposée par MrCool est un bon premier pas. Citation:
Là encore, je renvois au Lakos, qui est un bon livre de référence pour éviter certains pièges. |
||
|
|
|
|
|
#9 |
|
Initié
![]() Date d'inscription: March 2007
Messages: 89
|
Tant qu'à conseiller des bouquins de base pour l'écriture de code un de mes favoris reste "Code Complete", qui fait le tour des principes de base pour programmer.
|
|
|
|
|
|
#10 |
|
Geek
![]() Date d'inscription: April 2005
Messages: 1 224
|
Très intéressant comme sujet, ça sort un peu de l'ordinaire.
J'ai personnellement un problème : c'est la taille à rallonge de mes fichiers cpp, la lisibilité du code en prend un coup. En fait je pense que le problème vient de mes classes qui sont légèrement obèses. Le pire exemple devant être ma classe GameManager. Existe t-il un remède pour ça ? Séparer l'implémentation d'une classe dans plusieurs fichiers ne me semble pas être une bonne solution. Faut-il que je découpe plus mon code, par exemple en créant des classes plus petites chargées d'une seule et unique tâche pour alléger ces managers (exemple : actuellement, c'est le GameManager lui même qui s'occupe de gérer les états, dois-je passer par un StateManager ? Pour les "règles" de mon jeu, tout cet aspect "gameplay", dois-je aussi sous-traiter ?) Bref, quelques questions qui sortent un peu de l'aspect purement "technique" de la programmation ![]() |
|
|
|
|
|
#11 | ||
|
Membre du conseil d'administration
![]() |
Citation:
Les "convenience libraries" des Autotools sont notamment là pour ça sous Linux. Mais même dans ce cas, le couplage entre les modules reste un gros problème. Citation:
D'autre part, le découpage en sous-méthode (privée si nécessaire) est crucial. Difficile d'établir une limite, mais disons que 50 lignes par méthode c'est bien, 100 ça commence à faire et plus de 300 c'est trop. (pour le coup c'est vraiment une estimation et ça dépends de beaucoup de facteurs, mais ça donne une idée générale) Dernière modification par MrCool 27/05/2007 à 13h32. |
||
|
|
|
|
|
#12 | |
|
Administrateur du forum
![]() Date d'inscription: March 2005
Messages: 1 526
|
Citation:
Il n'y a pas de remède universel, mais un bon début de méthode est, pour chacune de test classes, de faire la liste de ses responsabilités. Si cette liste dépasse quelques entrées, c'est qu'il y a peut-être un soucis, et qu'il convient de déléguer. Comme MrCool, je ne connais pas le contenu de ton manager. Mais si ses responsabilités sont de s'occuper de toute la gestion du jeu, alors il est possible de diviser les différentes parties à manager pour laisser au game manager la seule responsabilité : appeler les différents managers. La division, bien sûr, demande de la reflexion. |
|
|
|
|
|
|
#13 | |||
|
Geek
![]() Date d'inscription: April 2005
Messages: 1 224
|
Citation:
En effet, mes managers ressemblent bien à des objets divins... Citation:
Citation:
Merci pour vos conseils ![]() |
|||
|
|
|
|
|
#14 |
|
Administrateur du forum
![]() Date d'inscription: March 2005
Messages: 1 526
|
|
|
|
|
![]() |
| Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s)) | |
| Outils de la discussion | |
|
|
Discussions similaires
|
||||
| Discussion | Auteur | Forum | Réponses | Dernier message |
| Débat : créer une classe Vector[1234][sifd] ? | GlibIx | C/C++ | 11 | 10/04/2006 10h54 |
| Demande d'avis ( structure de classes ) | Ey-Lord | Jeux vidéo | 0 | 26/09/2005 13h12 |
| [Scripting] Classes en C++ ou Python ? | elendil | C/C++ | 0 | 27/07/2005 06h06 |
| Diagramme de classes | Ceacy | C/C++ | 25 | 11/07/2005 12h55 |
| [c++] Besoin d'un peu d'aide pour modéliser des classes. | Eva | C/C++ | 2 | 03/07/2005 23h49 |