- PR -

記事:メソッドとコンストラクタはなぜ必要? はおかしくない?

投稿者投稿内容
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-05-15 18:06
補足のつもりです。
引用:

にっくさんの書き込み (2003-05-15 17:42) より:
オブジェクト指向の基本は「メッセージ・パッシング」です。つまり、オブジェクト
からオブジェクトにメッセージを送信し、受け手がそれを解釈実行することで、
処理が進みます。例えば、


javaでのメッセージ・パッシングはEventListnerという形で実装することで
明確にメソッドとは分離されています。

そして、ServletAPIではEventListnerを実装していないので、
オブジェクト指向的なアプリケーションはAppletの世界だけになりつつあります。

ただし、[勝手に引用文を編集します]

C言語の関数呼び出しと、Javaのメソッド実行の決定的な違いは、
dynamic bindingにあります。
メソッドを呼び出されたオブジェクトは、それをどのようにして実行すればよいか、
判断を行います。その結果、クラスやスーパークラスが備える多数のメソッドのうち
いずれか1つを選択し、それを利用してパラメータを解釈実行します。

というところはおっしゃる通りです。


[ メッセージ編集済み 編集者: zaxx_MD 編集日時 2003-05-15 18:08 ]
にっく
会議室デビュー日: 2003/03/31
投稿数: 10
投稿日時: 2003-05-15 18:27
引用:

zaxx_MDさんの書き込み (2003-05-15 18:06) より:

javaでのメッセージ・パッシングはEventListnerという形で実装することで
明確にメソッドとは分離されています。

そして、ServletAPIではEventListnerを実装していないので、
オブジェクト指向的なアプリケーションはAppletの世界だけになりつつあります。




いえ、そのメッセージではなくて、オブジェクト指向一般のメッセージのこと
を意図しています。以下のページをご覧ください。

http://java.sun.com/docs/books/tutorial/java/concepts/message.html
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-05-15 18:45
unibon です。こんにちわ。

#ライタのかたも戦々恐々ですね。

引用:

茶葉さんの書き込み (2003-05-13 17:14) より:
記事の説明だと、繰り返される「処理」に着目していて、
これは構造化手法の話に聞こえます。
それはそれで必要だとは思いますが、オブジェクト指向言語としての
観点からの説明が無いのは納得がいかない感じがしました。


たとえば、第5回の最後の部分で「制御文が必要な理由」と書かれていることから考えると、
この第5回の中では、制御文から繰り返し呼べる「処理」をまず先に説明しておこう、
という意図で進められているように感じました。
まったくの初心者に敬遠されがちな入門書では、
途中の説明をすっ飛ばしているものがよくありますが、
この連載はそういうことがなく、一歩一歩説明を推し進めている感があり、
初心者のかたには読みやすいと思います。
この段階に至るまでに、フィールドの存在は教えたし、
つぎは、メソッド(やコンストラクタ)がコードを実行するために必要であることを教えれば、
この段階ではそれで十分、というような意図だと感じました。

引用:

茶葉さんの書き込み (2003-05-13 17:14) より:
それとも今後に書く予定でしょうか?

# 今回から執筆者は替わったようだけど、
# この連載の内容は毎回不満が残る


巻頭では「J2EE の入り口」がゴールのように書かれていますので、
まだ先は長いので、いつか登場するのかもしれませんが、
でも、インデックスページや巻頭でも、
オブジェクト指向そのものズバリだとは書かれていないし、
オブジェクト指向についてそれほど触れなくてもよいのではないでしょうか。
インデックスのページ、
http://www.atmarkit.co.jp/fjava/index.html
を拝見してもそんな風に読めました(2個所あります)。

#なお、まったくの憶測で申し訳ありませんが、単に改名されただけなのでは、と思いました。
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-05-15 18:51
引用:

にっくさんの書き込み (2003-05-15 18:27) より:
いえ、そのメッセージではなくて、オブジェクト指向一般のメッセージのこと
を意図しています。以下のページをご覧ください。
http://java.sun.com/docs/books/tutorial/java/concepts/message.html


いいえ、そのメッセージです。
そちらのページはOOPのコンセプトそのものについての解説で、
その続きにjavaでの実装について記述してあります。

http://java.sun.com/docs/books/tutorial/java/concepts/practical.html

そのなかにMouseListner(EventListnerの子供です)がメッセージ処理の例として
挙げられていますので参照してください。

zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-05-15 18:59
引用:

unibonさんの書き込み (2003-05-15 18:45) より:
巻頭では「J2EE の入り口」がゴールのように書かれていますので、
まだ先は長いので、いつか登場するのかもしれませんが、


#先はかなり遠いですね・・
それにしても「メソッドはこれだけの意味だよ」ととれるような書き方は
やっぱライターとして失格でしょ。もしくは実際にJava書いたことないんじゃ・・
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2003-05-15 21:29
引用:

zaxx_MDさんの書き込み (2003-05-15 18:06) より:
javaでのメッセージ・パッシングはEventListnerという形で実装することで
明確にメソッドとは分離されています。
そして、ServletAPIではEventListnerを実装していないので、
オブジェクト指向的なアプリケーションはAppletの世界だけになりつつあります。



といったことは正直よくわからないのですが、

http://java.sun.com/docs/books/tutorial/java/concepts/index.html
でふれられている「メッセージ」は、にっくさんの仰っているニュアンス
に近い気がします。

MouseListenerは、あくまでinterfaceについての説明で用いられている
と思います。

http://java.sun.com/docs/books/tutorial/java/concepts/message.html
にて、
メッセージを構成するもの:
1.メッセージの行き先オブジェクト
2.実行するメソッド名
3.そのメソッドで必要なパラメータ

のようなことが書かれていて、やはりメソッド呼び出しをイメージして
しまいます。
少なくとも、このチャプターには
「javaでのメッセージ・パッシングはEventListnerという形で実装する」といった
趣旨の記述はないように思います。

どうでしょう。
にっく
会議室デビュー日: 2003/03/31
投稿数: 10
投稿日時: 2003-05-16 00:41
引用:

amnakyさんの書き込み (2003-05-15 21:29) より:
少なくとも、このチャプターには
「javaでのメッセージ・パッシングはEventListnerという形で実装する」といった
趣旨の記述はないように思います。



私もそう思います。このページでは、メッセージ・パッシングの例として

g.setColor(Color.white);

というコードが挙げられていますが、これはEventListenerインタフェースの説明
とは関係ないですよね。

Javaにおける「オブジェクトのメソッド呼び出し」は全て、オブジェクト指向に
おけるメッセージ・パッシングに相当します。ですから、Javaのメソッド呼び出し
は、UMLでは「メッセージ」の矢印線で表記します。
おたま
会議室デビュー日: 2003/05/15
投稿数: 2
投稿日時: 2003-05-16 01:29
「メソッド」って一括りにされてしまっていますが、
(a) staticメソッド
(b) privateメソッド
(c) publicメソッド(staticでは無い)
ってそれぞれ別物ですよね。

(a)と(b)は、『関数』的な色合いが濃いと思います。
呼び出し先がオブジェクトではありませんし。
(ただしsingletonパターンの実装を目的とするstaticメソッドなどは例外で、これは(c)に含まれるかと。)

これに対して(c)は、オブジェクト同士の対話(メッセージ)です。
(浅学にして「メッセージ・パッシング」って言葉を知らないのですけれど、ニュアンス的には同じなのでしょうか?)
オブジェクトの型によって結果が異なりますし、同じ型でも別インスタンスであれば、やはり結果が異なります。

どうも、このへんのポイントがあっていないため、議論がすれ違いがちになっているように感ぜられます。


まりりさんの
引用:

そもそも、隠蔽されてるデータなんてものを意識させる必要はないのではないですか?


って、
意識させないために、メソッドが隠蔽されてるデータへアクセスするんだと思うんですけれど。。
# 飛躍してます?

スキルアップ/キャリアアップ(JOB@IT)