
![]() |
|||
![]() |
|||
|
オブジェクト指向では、オブジェクト同士がメッセージ送信によって協調動作します。概念的には、各オブジェクトがそれぞれ独立的に存在し、必要に応じて通信を行っています。しかし現実の C++ ではそうなってはいません。 |
|||
|
C++ でのメッセージ送信は、実際にはメンバ関数の呼び出しで表現されます。オブジェクトがメッセージを受け取ったときに、それに応じたメソッドが起動されるのではありません。オブジェクトの利用者が直接メソッドを起動します。 メソッドの起動は C 言語の関数呼び出しとほぼ同等です。したがって、オブジェクトがそれぞれ並列動作しているわけではありません。 次のコードは以前に掲載したものと全く同じですが、メソッドの起動が行われています。 |
|||
|
||||
なお、上記コード中の (※) の部分にある Hanako.Name() などは、文法的にはメソッドの起動とかわりありません。しかし概念的には「属性の取得」です。これについては前のトピックを参照してください。 |
|||
|
オブジェクトを並列動作させるためにはスレッド化が必要ですが、そのための方法はいまのところ標準化されていません。どうしても必要な場合は API などを駆使することになります。この方法は、当然システム依存です。 なお、Java にはスレッドを記述する標準的な方法が用意されています。 |
|||
|
これは私の個人的な予測ですが、将来的にはスレッド操作が C++ 言語の文法として、または標準ライブラリとして組み込まれると思います。つまり、オブジェクトがそれぞれ並列動作できるようになると思われます。そうなれば、本当のメッセージ送信の機構も標準化されるでしょう。しかし現在のような直接関数を呼び出す方法も、実行速度を最適化するために残されるでしょう。 |
|||
| もっと詳しく知りたい人は次の用語について調べると良いでしょう: | ||||
|
||||
(「オブジェクト指向のはなし」は1999年2月から2000年4月にかけて作成されたコンテンツです。)