Nommage de classe abstraite Java

9

Exemple:

Vous créez une classe abstraite pour les actions Ajax. Différentes actions Ajax étendront toutes cette classe.

Problème:

  1. Nommez-vous la classe AjaxAction ou AbstractAjaxAction?
  2. Lorsque vous créez des sous-classes, les nommez-vous:
    • action
    • AjaxAction
    • Nommez-les simplement ce qu'ils sont

Je n'ai pas pu trouver ce qu'est la convention "officielle". Je ne vois pas la nécessité du préfixe «abstrait» ou de toute convention de dénomination requise dans les sous-classes. (Cela peut convenir de toute façon, selon.)

Y a-t-il une convention officielle? Pourriez-vous me lier à celui-ci? Et quelles sont vos opinions à ce sujet?

Michael K
la source

Réponses:

16

Lorsque cela est possible, j'essaie de laisser les détails d'implémentation hors des noms, y compris un préfixe / suffixe pour une classe abstraite ou une interface.

L'API Java est un endroit où chercher des conseils / inspiration sur la dénomination. Je ne peux penser à aucune partie qui utilise le préfixe (avec une énorme exception étant l'API Collections, qui utilise fortement le préfixe abstrait). La recherche suivante donnera de très bons exemples:

"classe abstraite publique" sur download.oracle.com/javase/6

Vous trouverez que les classes abstraites sont nommées quelque chose d'abstrait et les sous-classes concrètes sont nommées quelque chose de plus concret. Par exemple, classe abstraite Readera sous - classes concrètes BufferedReader, StringReader, InputStreamReader, etc.

Puisque vos sous-classes concrètes ne sont que des versions plus spécifiques de votre classe abstraite, il est révélateur de choisir vos noms de la même manière. Dans votre exemple, je nommerais la classe abstraite AjaxActionet l'utiliserais dans les noms des sous-classes concrètes ( SpecificAjaxAction).

Tyler Holien
la source
12

Choisissez quelque chose et soyez cohérent. Que vous utilisiez le suffixe Basepour indiquer une classe de base prévue, ou le préfixe Abstract, soyez cohérent à ce sujet.

Il y a autant d'opinions sur ce genre de chose qu'il y a de programmeurs. Mon avis, pour ce qu'il vaut, car cette cohérence dans la dénomination, au sein d'un projet (ou d'un groupe de développement ou autre) est plus important que tout schéma de dénomination spécifique.

Brian Clapper
la source
4

Je nommerais la classe abstraite AjaxActionBaseet les classes enfant de suffixe avec 'Action' ou 'AjaxAction', selon ce qui s'est avéré le plus naturellement lisible pour les actions que j'avais besoin de créer.

Adam Lear
la source
0

Je préfère mettre un indice qu'une classe est abstraite dans le nom pour une raison simple mais très importante:

  • Il est préférable de construire vos API autour d'interfaces plutôt que de classes abstraites.
  • Vous souhaitez utiliser le nom simple, par exemple "Action" pour nommer votre interface. Voir par exemple List ou Map dans l'API Java Collections - tous ces éléments sont des interfaces.

Par conséquent, j'appelle généralement une classe abstraite de niveau supérieur, soit AbstractAction ou BaseAction. À moins qu'il y ait un besoin très spécifique, je ne les rendrais normalement pas publics, de sorte que les utilisateurs du code soient amenés à utiliser l'interface. Les classes de base abstraites devraient généralement être un détail d'implémentation plutôt qu'une fonctionnalité de votre API, sauf si vous êtes très très prudent sur la façon dont vous voulez que les gens les étendent.

mikera
la source