33

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

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

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

4

11 に答える 11

18

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

別のパラダイム — 関数型 — は、オブジェクトのクラスを含む場合と含まない場合がありますが、関数は作業の原子単位です。

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

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

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

于 2008-09-04T13:45:18.877 に答える
11

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

OOP では、異なるオブジェクトが同じメッセージにバインドされた異なるメソッドを持つ場合があります。

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

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

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

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

-使用する方法は、実行時に受信者であると判断されます。

C++ では、メソッドとメッセージは関数メンバーと呼ばれます。

于 2009-03-06T14:50:34.450 に答える
4

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

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

Smalltalk などの他の実装では、メッセージが渡されるのを確認でき、受信オブジェクトはそのメッセージを処理することができます。

C# などの言語の上にあるライブラリがあり、明示的なメッセージ パッシングの感覚を言語に復元しようとします。私はここで楽しみのために自分の 1 つを調理してきました: http://collaborateframework.codeplex.com/

于 2011-06-02T23:12:30.700 に答える
3

messageは smalltalk で使用されていると思います。

Java や C# などでは、メソッドインスタンス メソッドを使用する傾向があります。

于 2008-09-04T13:45:07.050 に答える
3

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

于 2008-09-04T13:46:58.967 に答える
2

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

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

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

于 2008-09-04T13:53:43.897 に答える
0

method : 伝統的な言語の function に似ています

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

于 2009-10-13T23:23:52.637 に答える
0

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

于 2008-09-04T13:42:47.807 に答える
0

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

于 2008-09-04T13:44:03.670 に答える
0

簡単な定義を次に示します。

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

関数: アクションを実行して値を返す

イベント: オブジェクトが処理されたときに呼び出されます

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


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

于 2008-09-04T13:49:10.910 に答える
0

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

于 2008-09-04T13:58:05.100 に答える