Utilisez des verbes avec des fonctions, des noms avec des classes - qu'en est-il des interfaces? [fermé]

23

Ok, je comprends les conventions normales d'utilisation des verbes avec des fonctions et des noms avec des classes. Et les interfaces? Existe-t-il une méthodologie pour trouver des noms d'interface qui ne soit pas si évidente?

Juste pour être clair, je ne parle pas de mettre un "je" devant le nom ou d'utiliser camelCase ou PascalCase. Je m'interroge sur la méthode pour trouver un nom clair et sémantique pour une interface.

EDIT J'obsède comment nommer une interface de la manière la plus claire. Je suppose que cela doit juste être un nom aussi parce que quand je pense à nommer des classes, je pense à l'objet du monde "réel" le plus proche auquel il peut se rapporter. Je suppose que les interfaces du monde réel sont des choses comme un clavier, une souris, une télécommande, un écran ATM. Ce sont tous des noms. Quoi qu'il en soit, toute information supplémentaire sur un bon moyen de formuler des noms d'interface serait appréciée.

programmeur
la source
2
Hm .. Sur la base du titre, je pensais qu'il s'agirait d'équilibrer des parties du discours entre la programmation et l'anglais. Dans ce cas, les madlibs semblent possibles.
Izkata
N'oubliez pas que lorsque vous créez une classe, vous créez également une interface pour les objets instanciés par cette classe ... Ou, pour le dire autrement, les classes sont des interfaces réalisées . Ils doivent donc utiliser la même convention de dénomination.
Daniel T.
En outre, à mon humble avis, «utiliser des verbes avec des fonctions» est trop général. Vous devez utiliser des verbes avec des commandes et des noms avec des requêtes .
Daniel T.

Réponses:

21

Je dirais que cela dépend de ce que définit l'interface. Dans certains cas, lorsque l'interface est plutôt spécifique et détaillée, je pense qu'un nom est préférable. Les exemples sont IList, ICollection.

Parfois, bien qu'une interface concerne davantage l'ajout de certaines fonctionnalités générales à une classe. Dans ce cas, je pense qu'un adjectif est le meilleur. Sont des exemples IDisposable, IEnumerable...

Peut-être qu'une autre façon de penser à cela est le nombre de «capacités» définies par votre interface.

Par exemple, l' IList<T>interface définit ces capacités: Ajouter, Effacer, Contient, Insérer, Supprimer, ... Ce sont toutes les propriétés d'une liste, IListc'est donc un bon nom.

IDisposabled'autre part ne définit qu'une seule capacité: Dispose. Il convient donc à tout ce qui est jetable. D'où le nom IDisposable.

Kristof Claes
la source
10
Je suggérerais d'utiliser un adjectif "_able" si votre interface serait nommée d'après des choses qui peuvent être faites à votre objet (par exemple IEnumerable), un nom "_er" si votre interface serait nommée d'après des choses que votre objet fait à d'autres objets ( par exemple IEqualityComparer), et un nom général si votre interface est nommée d'après un type de chose dont elle imite le comportement (par exemple IList<T>).
supercat
Le commentaire de @supercat devrait vraiment être inclus dans cette réponse. Cela a beaucoup de sens.
Nikhil Vartak
En fait, le préfixe du nom de l'interface Iest redondant.
user1870400
5

Une interface décrit le comportement de sorte que les noms doivent le dire. Je ne suis pas sûr d'une règle pour cela, mais vous connaîtrez le nom lorsque vous l'entendrez.

Quelques exemples:

Flyable      - Can Fly
Workable     - Can work
Negotiatable - Can negotiate.

Je pense qu'il n'est pas approprié de nommer les interfaces Iet d'appeler Setavec ISetcar, en tant que développeur, vous ne devriez pas vous inquiéter s'il s'agit d'une interface ou d'une classe. Je vois que cette pratique n'existe pas en Java maintenant.

ManuPK
la source
+1 pour "en tant que développeur, vous ne devriez pas vous inquiéter que ce soit une interface ou une classe."
Kazark
"en tant que développeur, vous ne devez pas vous inquiéter qu'il s'agisse d'une interface ou d'une classe" - en désaccord car s'il s'agit d'une interface, vous devez savoir quels membres vous devez implémenter.
Maximus Minimus
@MaximusMinimus le préfixant avec Iest redondant malgré tout. Alors pourquoi ne pas préfixer les classes abstraites avec A, les classes régulières avec Cetc ??
user1870400
@ user1870400 - vrai, mais ce n'est pas la partie avec laquelle je suis en désaccord.
Maximus Minimus
4

Puisqu'une interface n'est vraiment qu'une expression du «quoi» mais pas du «comment» d'un type, je les nommerais de la même manière que vous nommez les classes, du moins dans une perspective de discours. La seule chose que je pourrais ajouter à cela est qu'ils vont souvent être plus généraux que les implémenteurs spécifiques (par exemple, l'interface "Client" peut avoir des implémenteurs "ProspectiveCustomer" et "PayingCustomer").

Erik Dietrich
la source
0

Une interface est utilisée comme une classe. Par conséquent, il doit également être nommé avec un nom lorsque vous nommez des classes avec des noms. Préférez les noms abstraits, par exemple "Véhicule" lorsque les classes sont "Voiture" et "Camion".

thiton
la source
0

Réponse rapide: L' interface est plus sur ajout d'un SET de capacités, les caractéristiques, les limites communes ou des interconnexions entre les entités, les classes, les modèles, concepts, etc ..

Une chose sur l'ajout d'un comportement commun aux classes et aux entités, puis un bon nom significatif viendra pour identifier l'ensemble des fonctionnalités liées.

Nom de l'interface comme: IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.expliquer probablement le concept.

EL Yusubov
la source
1
Oui, les interfaces représentent des contrats ou des capacités; tant de choses sont bien connues. Mais comment cela répond-il à la question de savoir comment les nommer? Tout ce que vous dites vraiment à cet égard, c'est: "Pensez-y, et l'inspiration vous frappera." Cela ne donne aucune recommandation, par exemple, lequel des noms suivants devrait être choisi, pourquoi: IStateMachineBuilder(nom), IBuildStateMachine(nommé d'après une action), ICanBuildStateMachine(nommé d'après une capacité), etc.
stakx
0

Cela dépend, si l'interface ne contient que des méthodes, il sera bon de la nommer en utilisant des verbes comme "Actions" où comme si elle représente une classe générique contenant des champs finaux statiques, alors nous pouvons utiliser un nom générique comme "Véhicule"

Joms Antony
la source