Je vais citer quelques passages de Implementation Patterns de Kent Beck:
Nom de superclasse simple
"[...] Les noms doivent être courts et percutants. Cependant, rendre les noms précis semble parfois exiger plusieurs mots. Un moyen de sortir de ce dilemme est de choisir une métaphore forte pour le calcul. Avec une métaphore en tête, même Les mots uniques apportent avec eux un riche réseau d'associations, de connexions et d'implications. Par exemple, dans le cadre de dessin HotDraw, mon prénom pour un objet dans un dessin était
DrawingObject . Ward Cunningham est venu avec la métaphore typographique: un dessin est comme une page imprimée et mise en page. Les éléments graphiques sur une page sont des figures, donc la classe est devenue Figure . Dans le contexte de la métaphore, Figure
est à la fois plus courte, plus riche et plus précise que DrawingObject . "
Nom de la sous-classe qualifiée
"Les noms des sous-classes ont deux tâches. Ils ont besoin de communiquer à quelle classe ils ressemblent et en quoi ils sont différents. [...] Contrairement aux noms à la racine des hiérarchies, les noms de sous-classes ne sont pas utilisés presque aussi souvent dans les conversations, afin qu'ils puissent être expressifs au prix d'être concis. [...]
Donnez aux sous-classes qui servent de racines aux hiérarchies leurs propres noms simples. Par exemple, HotDraw a une classe Handle qui présente les opérations d'édition de figure lorsqu'une figure est sélectionnée. Il s'appelle simplement Handle
malgré l'extension de la figure . Il existe toute une famille de poignées et elles ont le plus approprié des noms tels que
StretchyHandle et TransparencyHandle . Étant donné que Handle est la racine de sa propre hiérarchie, il mérite un simple nom de superclasse plus qu'un nom de sous-classe qualifié.
Les hiérarchies à plusieurs niveaux constituent un autre problème dans la dénomination des sous-classes. [...] Plutôt que d'ajouter aveuglément les modificateurs à la superclasse immédiate, pensez au nom du point de vue du lecteur. À quelle classe a-t-il besoin pour connaître cette classe? Utilisez cette superclasse comme base pour le nom de la sous-classe. "
Interface
Deux styles d'interfaces de dénomination dépendent de la façon dont vous envisagez les interfaces. Les interfaces en tant que classes sans implémentations doivent être nommées comme s'il s'agissait de classes ( nom de superclasse simple , nom de sous-classe qualifiée ). Un problème avec ce style de dénomination est que les bons noms sont utilisés avant que vous n'arriviez à nommer des classes. Une interface appelée File a besoin d'une classe d'implémentation appelée quelque chose comme
ActualFile , ConcreteFile ou (beurk!) FileImpl(à la fois un suffixe et une abréviation). En général, il est important de savoir s'il s'agit d'un objet concret ou abstrait, que l'objet abstrait soit implémenté en tant qu'interface ou en superclasse est moins important. Le report de la distinction entre les interfaces et les superclasses est bien> pris en charge par ce style de dénomination, vous laissant libre de changer d'avis plus tard si cela devient nécessaire.
Parfois, nommer des classes concrètes est simplement plus important pour la communication que de cacher l'utilisation des interfaces. Dans ce cas, préfixez les noms d'interface avec «I». Si l'interface s'appelle IFile , la classe peut être simplement appelée File .
Pour une discussion plus détaillée, achetez le livre! Ça en vaut la peine! :)