関数で動詞を使用し、クラスで名詞を使用する-インターフェイスはどうですか?[閉まっている]


23

OK、動詞を関数で、名詞をクラスで使用する通常の規則を理解しています。インターフェイスはどうですか?インターフェイス名を思い付くときに、それほど明白ではないかもしれない方法論はありますか?

明確にするために、名前の前に「I」を付けるか、またはcamelCaseまたはPascalCaseを使用するかについては話していません。インターフェイスの明確で意味のある名前を見つける方法について疑問に思っています。

編集 最も明確な方法でインターフェイスに名前を付ける方法に夢中です。クラスの命名について考えるとき、クラスに関連付けることができる最も近い「実際の」世界オブジェクトを考えるので、それも名詞である必要があると思います。現実世界のインターフェイスは、キーボード、マウス、リモートコントロール、ATM画面のようなものだと思います。それらはすべて名詞です。とにかく、インターフェース名を定式化する良い方法に関する追加の洞察はありがたいです。


2
うーん。タイトルに基づいて、私はこれがプログラミングと英語の間でスピーチの部分を同等にすることになると思っていました。その場合、madlibが可能と思われます。
イズカタ

クラスを作成するとき、そのクラスによってインスタンス化されたオブジェクトのインターフェイスも作成していることを忘れないでください...別の言い方をすれば、クラスは実現されたインターフェイスです。そのため、同じ命名規則を使用する必要があります。
ダニエルT.

また、「関数で動詞を使用する」という私見はあまりにも一般的です。コマンドには動詞を使用し、クエリには名詞を使用する必要があります。
ダニエルT.

回答:


21

インターフェースが何を定義しているかに依存すると思います。インターフェースがかなり具体的で詳細な場合には、名詞が最適だと思います。例はIListICollectionです。

インターフェースは、特定の一般的な機能をクラスに追加することを目的とする場合があります。その場合、形容詞が最適だと思います。例としてはIDisposableIEnumerable...

これについて考える別の方法は、インターフェイスが定義する「能力」の数です。

たとえば、IList<T>インターフェースは次の機能を定義します:追加、クリア、含む、挿入、削除、...これらはすべてリストのプロパティなのでIList、良い名前です。

IDisposable一方、「破棄」という1つの機能のみを定義します。そのため、使い捨てのあらゆるものに適しています。したがって、名前IDisposable


10
インターフェースがオブジェクトにできることから名前が付けられる場合は「_able」形容詞を使用することをお勧めします(例IEnumerable)、オブジェクトが他のオブジェクトに対して行うことから名前が付けられる場合は「_er」名詞例IEqualityComparer)、およびインターフェイスが動作を模倣するものの種類に基づいて名前が付けられている場合の一般名詞(例IList<T>)。
supercat

@supercatによるコメントは、本当にこの回答に含まれるべきです。それは理にかなっています。
ニキルバルタック

実際にインターフェース名の接頭辞Iは冗長です。
user1870400

5

インタフェースは、名前がそう言う必要がありますので、動作について説明します。私はこのためのルールについてはわかりませんが、あなたはそれを聞いたときに名前を知っているでしょう。

いくつかの例:

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

私はとのインタフェースに名前を付けるために適切ではないと思うIと呼んSetISet開発者として、あなたはそれがインタフェースまたはクラスがあるかどうかを心配すべきではない、ので。現在、このプラクティスはJavaには存在しません。


+1「開発者として、インターフェイスやクラスを心配するべきではありません。」
カザーク

「開発者として、それがインターフェースであるかクラスであるかを心配するべきではありません」-インターフェースである場合、どのメンバーを実装する必要があるかを知る必要があるため、意見が一致しません。
マキシマスミニマス

接頭辞を付けた@MaximusMinimus Iは、関係なく冗長です。次に、なぜ抽象クラスの前にを付けA、通常のクラスにCetcなどを付けないのですか?
user1870400

@ user1870400-本当ですが、それは私が同意していない部分ではありません。
Maximus Minimus

4

インターフェースは、実際には型の「方法」ではなく「方法」の表現であるため、少なくとも品詞の観点からは、クラスに名前を付けるのと同じ方法で名前を付けます。これに追加できる唯一のことは、特定の実装者よりも一般的になることが多いということです(たとえば、「Customer」インターフェースには「ProspectiveCustomer」および「PayingCustomer」実装者がいる場合があります)。


0

インターフェイスはクラスのように使用されます。したがって、クラスに名詞を付ける場合は、名詞で名前を付ける必要もあります。クラスが「車」と「トラック」である場合、「車両」などの抽象名詞を優先します。


0

クイックアンサー:インターフェースは、機能、機能、共通の境界、またはエンティティ、クラス、モデル、概念などの間の相互接続のセットの追加に関するものです。

共通の動作をクラスとエンティティに追加すること、そして適切な意味のある名前が登場し、実現された機能のセットを識別します。

インターフェースの命名のような:IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.おそらく概念を説明します。


1
はい、インターフェースは契約または機能を表します。そんなによく知られています。しかし、これはどのように名前を付けるかという質問にどのように答えますか?その点であなたが本当に言っているのは、「それについて考えてみてください、そうすればインスピレーションがあなたを襲うでしょう」です。これが選ばれるべきである次の名前のインスタンスのために、任意の勧告を与えていない、いかなる理由:IStateMachineBuilder(名詞)、 IBuildStateMachine(アクションにちなんで命名)、 ICanBuildStateMachine(機能にちなんで命名)、など
stakx

0

インターフェースがメソッドのみを含む場合、「アクション」などの動詞を使用して名前を付けるとよいでしょう。静的クラス、最終フィールドを含む汎用クラスを表す場合、「車両」のような汎用名詞を使用できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.