質問

私は最近、「メソッド呼び出し」と呼ばれるものについて質問しました。答えは「メッセージ」に関するものでした。独学で趣味のプログラマーとして、バカに思われないように質問を表現しようとしていると、自分が使用する用語によって、私がどのようにプログラミングを学んだかが多くの部分で明らかになることに気づきました。

メソッド/メッセージなどのさまざまな用語の間に区別はありますか?OOプログラミングで?これは、同様の概念を説明するために異なる用語を使用する異なるプログラミング言語から生じる違いでしょうか?

OO 以前の言語では、戻り値が予期されるかどうかに基づいて「サブルーチン」と「関数」が区別されることがありましたが、それでもこれは言語ごとの区別だったのでしょうか?

役に立ちましたか?

解決

これは言語とプログラミングのパラダイムの問題であることがわかりました。1 つのパラダイムである OOP は、メンバー メソッドを持つオブジェクトを指します。概念的には、これらのオブジェクトにメッセージを送信する方法です (この考え方は、たとえば UML に反映されています)。

もう 1 つのパラダイムである関数型には、オブジェクトのクラスが含まれる場合と含まれない場合がありますが、関数は作業の原子単位です。

構造化プログラミングでは、サブルーチンがありました (接頭辞「sub」は構造を暗示していることに注意してください)。

命令型プログラミング (構造化プログラミングとかなり重複しますが、物事の見方が少し異なります) では、より定型的な世界観を持つため、「関数」は何らかの操作 (多くの場合数学的) を表します。

ルーブのように聞こえないようにするには、使用している言語の言語リファレンスで使用されている用語を使用するだけです。

他のヒント

メッセージ!=メソッド!=関数

OOPでは異なります オブジェクト 違うかもしれない メソッド 同じものに縛られている メッセージ.

例えば:「左に n 度回転」というメッセージは、形状、円、長方形、正方形などの異なるオブジェクトによって異なるように実装されます。

メッセージ:オブジェクトはメッセージを通じて通信します。

-オブジェクトはメッセージを送受信します。

- メッセージへの応答はメソッドを実行しています。

- 使用するメソッドは実行時に受信者であるかどうかを決定します。

C++ ではメソッドとメッセージが呼び出されます 関数のメンバー。

私は信じている メッセージ smalltalk で使用されます。

Java、C#など使用する傾向があります 方法 または インスタンスメソッド.

私はかなり確信しています(しかしすぐに ウィキペディア これを確認すると、「メッセージ パッシング」という用語は Smalltalk コミュニティから来ていることが確認されているようです。メソッド呼び出しとほぼ同等だと思います。

「メッセージ」という用語は、オブジェクトにメッセージを送信することを指します。これは、一部のプログラミング言語でサポートされているが、他のプログラミング言語ではサポートされていません。

オブジェクトがメッセージをサポートしている場合、オブジェクトは何らかのコードを実行します。それ以外の場合は、単に無視されます。これは、オブジェクトがその関数をサポートする必要がある明示的な関数/メソッド呼び出しよりも動的なアプローチです。

Objective-c は、このメッセージング アプローチを使用していると思います。

C# のようなオブジェクト指向実装では、「メッセージ」という概念は明示的な言語構造として実際には存在しません。コードの特定の部分を見て「そこにメッセージがある」と言うわけにはいきません。

代わりに、オブジェクトのクラスのメソッドは、他のオブジェクトがそのメソッド内の動作をトリガーするタイプのメッセージを送信できるという考えを意味します。したがって、メッセージを送信するのではなく、メソッドを直接指定することになります。

Smalltalk のような他の実装では、メッセージが渡されるのを確認でき、受信オブジェクトはそのメッセージに対して何を行うかを実行できます。

C# などの言語の上に置かれ、言語に明示的なメッセージ受け渡しの感覚を復元しようとするライブラリがあります。私はここで楽しみのために自分のものを調理しています: http://collaborateframework.codeplex.com/

由来についてはよく分かりませんが、 メッセージ 用語。一番よく遭遇するのは メッセージ UMLデザインで。オブジェクト (UML 用語ではアクター) は、次の方法で相互に通信できます。 メッセージ. 。実際のコードでは メッセージ 通常は単なる関数呼び出しです。私はメッセージを、何らかのオブジェクトと通信しようとする試みとして考えています。これは、実際のメッセージ (OS のメッセージなど) または関数呼び出しの場合があります。

通常、関数の正式名称は「メソッド」と思われます。ただし、各言語には独自のキーワードがあります。たとえば、Delphi では、何かを返すメソッド (「関数」) と何も返さないメソッド (「プロシージャ」) との間にさえ違いがありますが、C タイプ言語では違いはありません。

いくつかの簡略化した定義を次に示します。

メソッド/サブルーチン/ボイド:アクションを実行する

機能:アクションを実行して値を返す

イベント:オブジェクトが操作されると呼び出されます

ハンドラー:イベントを処理する関数/メソッドです


追伸:これは、SO が DL/DT/DD タグをサポートする必要がある理由の完璧な例です。

現時点では好みの問題だと思います。あなたが言及した単語は基本的に今日の言語では同義語であり、ほとんどの場合、「メソッド」または「関数」と言えば、人々はあなたの意味を理解します。実際に OOP でのみ使用される「メッセージ」を使用すると、伝えようとしている内容が混乱する可能性があります。例:「電子メールメッセージを送信するためにメッセージを作成する必要があります。」同義語であり、これは完全なリストではない他の用語は、サブルーチン、アクション、手順、操作(通常は数学的な本質的ですが)、サブプログラム、コマンドです。

方法 :従来の言語の関数に似ています

メッセージ :従来の言語でのパラメータの受け渡しに似ています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top