C ++の「メソッド」について(「メンバー関数」に対して)話すのはどれほど間違っていますか?


19

私は理解して C ++の仕様に応じてそこに「方法」のようなものはなく、いくつかのことを(多くの?ほとんどの?)C ++プログラマは、Javaイズムする「方法」を検討してください。一方で、C ++フォーラムでも、人々はけいれんせずにメソッドについて話すようです。この用語に関する既知の慣例または一般的な慣行を探しています。

C ++とJavaの両方のバージョンを持つAPIを文書化しています。開発者は、おそらく移植とテストの利便性のために、クラスとメソッド/メンバー関数の名前を2つの間で同じにしておきました。このため、これらのAPIについて文書化する必要があるものの一部は、言語の選択の「上」にあります。FoosとBarsについて、baz()とmumble()...メソッドで一般的に話せるようにする必要がありますか?

Javaプログラマーがそれを自然とみなす方法について話すと、C ++プログラマーはおそらく理解するでしょうが、一部の人はそれが間違っていると考えるでしょう。私の質問は、これは実際にはどれほど凶悪なのですか?C ++固有の関数とは対照的に、「一般的なOOP」コンテキストでは、C ++メンバー関数は従来どのように話題にされていますか?どちらの言語でも正しくない方法でメンバー関数について話すより良い方法はありますか?(「メンバー関数」は少し冗長です。)

これは世論調査ではありません。この問題に対処するための実際の慣習一般的な慣行があるかどうかを判断しようとしています。

私はこの質問を知っていますが、それは一般にOOPに関するものであり、特定の言語については尋ねません。


これを尋ねる前に、ヘルプセンターを読み、タグリストを確認しました。ここでこれを聞いて何か間違ったことをしましたか?
モニカチェッリオ

あなたが持っている近い投票は主にこれに基づいているかもしれない意見に基づいています。 ...一人が、それは完全に罰金だと思うことがあり、別のは、それが比較的意見のみの種類の事のだあなたはこのためのQ-で説明するのと同様に、用語のひどい違反だと思うだろうこと
ジミー・ホッファ

2
メソッドのOOPコンセプトは、C ++の「仮想メンバー関数」に最もきれいにマッピングされますが、同じものです。Java側には、メソッドではなく関数である「静的メソッド」など、より悪い用語があります。言語に依存しない「方法」という言葉を使い続けるだけで、誰もがあなたの言うことを理解できます。C ++にメソッドがないと誰かが主張するなら、それは事実上間違っており、信じられないほど迷惑なバイクの脱落です。
アモン

1
@JimmyHoffaの方が良いですか?
モニカチェリオ

3
言語間APIドキュメントでメソッドを呼び出すだけです。「プログラミング言語にとらわれないように、このAPIドキュメントではメソッドという用語を使用してC ++メンバー関数を参照します」などのフレーズをイントロテキストに含めることができます。
ブランディン

回答:


11

文書の導入部分、たとえば条約のセクションに説明を含めてみませんか(質問で行ったように)。次に、ドキュメントで使用される「メソッド」という用語は、メソッド(Java)、メンバー関数(C ++)などの一般的な意味で使用されることを説明できます。ドキュメントはすべての実装に適用されるためです。


これは私がやったことであり、これまでのところ人々はそれで大丈夫のようです。提案をありがとう。
モニカチェッリオ

15

まあ、あなたはそれのために実行されるつもりはありません。

C ++の世界での不満は、つまらない正確さの1つではなく、あいまいさの1つです。あなたが話しているドメインに応じて、荒野には非常に多くの種類の「方法」があります。私たちの多くは、後で誤解を避けるために標準的な用語に固執することを好みます。つまり、大まかに言うと、「静的/ [非静的] [純粋]仮想/ [非仮想]メンバー/ [無料]関数」です。

あなたの代わりにあなたのドキュメントで「メソッド」を記述する場合、いくつかのC ++プログラマが、本当にあなたが何を言ってるのかはっきりしないこと、またはあなたがに慣れていない場合は心配していることを訴えることがあり、この C ++規則、あなたはどのような他の人が欠けていますか?

しかし、私は何百万人ものプロのC ++プログラマがいると確信しています。それは大きな昔の世界です。

あなたはそれのために実行されるつもりはありません。


3

EiffelはそれらをRoutinesまたはFeaturesと呼び、C ++はそれらをMember Functionsと呼び、(ほぼ)C ++がそれらをMethodsと呼ぶ前後の両方で、コンピューティングの歴史全体で作成された他のすべてのOO言語を呼び出します。C ++(およびEiffel)プログラマー(Simula、Smalltalk、Self、Objective-C、Newspeak、Java、C#、VB.NET、PHP、Python、Ruby、ECMAScript / JavaScript、Scala、CoffeeScriptについて聞いたことがない場合)


ポイントを除いて、それらはしばしばそれらのドメイン全体で微妙に異なることを意味するということです。OPがドメイン固有の用語に固執する方が良いかどうかを尋ねる理由であり、正しい答えが「はい」である理由です...
Monicaとの軽さのレース

クラスを持っていないJavaScriptを引用することであなたが私のポイントを証明したことに気付きました(オブジェクト指向はプロトタイプベースです)。では、JavaScriptメソッドを他のメソッドと同じにするにはどうすればよいのでしょうか?あなたが主張している相互理解度は実際には存在しません。
モニカとの軽さのレース

プロトタイプベースのOOPには違いはありません。OOPは、オブジェクトがメッセージを介して通信するという概念(サーバーが相互に要求を送信するなど)に基づいており、メソッドは特定のオブジェクトが特定のメッセージに応答する方法(メソッド)を指します。プロトタイプOOは、メソッドの継承方法に関してのみ違いを生じます。大きな違いをもたらすのは、スロットベース(Pythonなど)とメッセージベース(Rubyなど)のOOP、および遅延バインディングと早期バインディングのどちらであるかです。
saolof
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.