IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Nommage de classe - Meilleurs pratiques


Sujet :

Langage Java

  1. #1
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut Nommage de classe - Meilleurs pratiques
    Bonjour,

    Je me pose une question existentielle : existe-t-il une référence / une convention sur le nommage des classes ?

    Je ne parle pas des minuscules/majuscules, mais plutôt des règles comme :

    - les implémentations par défaut : <MaClasse>Impl
    - un service... : <MaClasse>Service
    - un adaptateur : <MaClasse>Adapter
    - une classe abtraite : Abstract<MaClasse>
    - etc...

    Merci !

    Anthony

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    J'ajouterais à cette liste:

    MaclasseTest pour les tests unitaires (JUnit) d'une classe
    IMaClasse pour une interface
    etc.

    Oui, ces conventions existent et sont fréquemment employées. Maintenant, je ne saurais dire si il existe un ouvrage de référence donnant une liste complète...

    D'après ce que j'ai pu voir, chaque projet fixe (pendant la phase de spécifications) les conventions de codage qui seront employées (et éventuellement validées automatiquement par des règles CheckStyle)
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    Oui, voilà mais là on m'a demandé de justifier leur utilisation

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 24
    Par défaut
    A ton avis, quel serait l'intêret d'un tel nommage?

  5. #5
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    Pour moi, l'intérêt principal est que c'est une "convention" utilisée par la majorité des développeurs. Et donc, il est plus facile de prendre en main du code structuré de cette manière.

    Voyez-vous d'autres intérêts ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Pour ma part, je ne vois pas l'interet de cette convention.

    Je trouve que ca alourdit le nom des classes, au risque de masquer le veritable role d'une classe.

    D'ailleurs dans les packages de base, cette convention n'est pas utilisée.

  7. #7
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    Comment fais tu par exemple lors que tu as une notion représentée par une interface et une implémentation par défaut ?

    La plupart des développeurs écrivent :

    - Toto (ou IToto) pour l'interface
    - TotoImpl (j'au aussi vu TotoDefault, TotoBase,...) pour l'implémentation

    Comment les nommes-tu ?

    Anthony

  8. #8
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 890
    Par défaut
    Salut,

    Je préfère grandement la notation :
    Toto
    TotoImpl

    A la suivante :
    IToto
    Toto

    Le problème de "IToto", c'est que quand on fait de l'injection, on se retrouve à appeler des méthodes d'une soit disant interface. Hors ce n'est qu'un détail que ce soit une interface, c'est plutôt un contrat, et bien un vrai objet qu'on manipule derrière.

    Donc faire des appels sur "Toto.getCoucou()" me parait plus logique que de faire un appel sur "IToto.getCoucou".

    La classe d'implémentation avec Impl à la fin, permet de vraiment se rendre compte que ce n'est qu'une implémentation. Le vrai contrat se trouve dans l'interface. Donc l'ensemble reste cohérent.

    Ensuite, nommer les objets ( "TotoService" ) permet de gérer plus facilement les intercepteurs. Par exemple, pour rendre tous les "services" transactionnels, il suffit d'intercepter toutes les classes se terminant par "*Service". C'est aussi à ça que sert le nommage déclaratif. Au niveau des logs aussi, on voit tout de suite ce qu'il se passe.

    Vous me direz : on peut également le savoir avec les noms de packages. Pourquoi pas les deux dans ce cas ?

    A+

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Pour ce genre de cas, voilà ce que j'utilise mais c'est complètement subjectif :

    interface : IStrategieExport (le I a été récupéré de crosoft c#)

    classe abstraite de base (si besoin) : StrategieExportBase

    classe d'implémentation : StrategieExportExcel

    class de test : StrategieExportExcelTest

    Enfin je dis ça je dis rien, après tout ça dépend aussi des noms donnés aux packages, ...

  10. #10
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    On retrouve la convention de nommage dans de nombreux projets open source Apache:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ClasseObserver
    ClasseBean
    ClasseFactory
    ClasseManager
    ClasseSingleton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int ivalue
    boolean bvalue
    String svalue
    Je l'ai adoptée. Elle me convient bien!

  11. #11
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par Sanguko Voir le message
    D'ailleurs dans les packages de base, cette convention n'est pas utilisée.
    Normal pour certains points car ça n'a pas forcément sa place, mais certaines sont utilisées et il y en a d'autres : un listener <Classe>Listener, son implémentation par défaut <Classe>Adapter, l'événement <Classe>Event, beaucoup de classes abstraites sont nommées Abstract<Classe> et leur implémentation par défault Default<Classe>, etc...

    Les conventions c'est pour faciliter la maintenance et la compréhension du code. L'idéal étant d'avoir une convention le plus proche possible de ce qui est fréquemment utilisé.

  12. #12
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    L'idéal étant d'avoir une convention le plus proche possible de ce qui est fréquemment utilisé.
    Voilà, et donc ce que je demandais c'est : y-a-t'il une liste des conventions les plus utilisées et pourquoi elles ont été choisies ?

    Merci déjà pour toutes ces réponses intéressantes !

    Anthony

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Citation Envoyé par natha Voir le message
    Normal pour certains points car ça n'a pas forcément sa place, mais certaines sont utilisées et il y en a d'autres : un listener <Classe>Listener, son implémentation par défaut <Classe>Adapter, l'événement <Classe>Event, beaucoup de classes abstraites sont nommées Abstract<Classe> et leur implémentation par défault Default<Classe>, etc...

    Les conventions c'est pour faciliter la maintenance et la compréhension du code. L'idéal étant d'avoir une convention le plus proche possible de ce qui est fréquemment utilisé.
    Sais tu (ou quelqu'un d'autre) s'il existe une convention pour les packages du jdk?

    [EDIT] Oups, la question vient d'être posée [/EDIT]

  14. #14
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par onlytoine Voir le message
    Voilà, et donc ce que je demandais c'est : y-a-t'il une liste des conventions les plus utilisées et pourquoi elles ont été choisies ?
    Il n'y a pas de recommandations spéciales à ma connaissance. Tout dépend des frameworks que tu vas utiliser. Tout ce qui a été indiqué sur ce thread est utilisable. Il faudrait synthétiser :

    • Service => <Classe>Service
    • Implémentation du service => <Classe>ServiceImpl ou <Classe>ServiceDefault
    • Interface => I<Classe>
    • Classe abstraite => Abstract<Classe>
    • Implémentation par défaut d'une classe abstraite => Default<Classe>
    • etc.


    Après tout dépend de comment tu travailles. Avec Eclipse 3.3 on peut facilement retrouver tous nos services par exemple en cherchant les types nommés "*Service", tous les validateurs en cherchant "*Validator", etc. Il n'y a pas de bonne ou mauvaise règle à partir du moment ou la convention est choisie avec un minimum de bon sens.

  15. #15
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Le nom d'une classe/interface doit refléter son utilisation, son sens... C'est pourquoi ajouter un 'I' devant un nom d'interface me semble tout a fait inutile. Une interface se nommant IDrawable n'a aucun sens : Drawable est bien suffisant.

  16. #16
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    Merci à tous... ça fait avancer (un peu) le chmilblick...

Discussions similaires

  1. Réponses: 61
    Dernier message: 29/12/2016, 12h58
  2. DAO pour JPA: les meilleures pratiques?
    Par cisco dans le forum JPA
    Réponses: 22
    Dernier message: 25/04/2012, 14h40
  3. [information] meilleures pratiques pour gestion d'events
    Par trolldom dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/07/2007, 13h24
  4. [session] Meilleures pratiques d'utilisation de session
    Par jvajva dans le forum Hibernate
    Réponses: 3
    Dernier message: 21/05/2007, 11h44
  5. MSSQL: Meilleures pratiques/Best practices
    Par spyne dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/08/2006, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo