vieweditattachhistoryswikistopchangessearchhelp

オブジェクト指向再入門

http://member.nifty.ne.jp/maebashi/programmer/object/index.html



「なぜわからなくなってしまうのか?」のところですが、わけのわからないたとえ話でも、私はわかったような気分にはなりましたよ。--CUE

前橋氏自身はそういうつもりで書いたのではないんでしょうけど、この書き方だと、
「「わん」と「にゃあ」の話を聞いて納得してしまえる人」=「こんな説明を読んで、なんだかわかったような気分になれる人」
と言っているように聞こえてしまいますね…。
「気分になった」だけで「納得した」事にされたら(ましてや「理解したと宣言した」事にまでされて、技術者としての資質まで問われてしまったら)こちらはたまったものじゃないです。…いや、確かに私は技術者ではないですが(笑)。--CUE

私の場合をあげれば、わかったような気分にはなるのにちっとも理解できない、つまり、理解したい(すべき)事柄と、実際に喩え話で説明しようとしている(と思われる)事柄の間に大きな溝があって、オブジェクト指向が理解できなかったんですよね。
理解したい事柄は「オブジェクト指向とは何か」なのに、喩え話は「オブジェクト指向言語を使うと、どんな記述ができるか」を説明しようとしている点にあって、説明の本質がそもそも違うわけです。--CUE



継承とか隠蔽とかカプセル化ってのは、物事を考えやすくする(つまり、苦労の「次元」を一つか二つ減らす)ための道具であって、オブジェクト指向と直接関係ない、というのは最近になってよくわかるようになりました。
ですが、オブジェクト指向そのものについてはどうなのでしょう?これは道具なのでしょうか?それとも道具以外の何かなのでしょうか?
少なくとも、「道具だ」と叫ぶと石を投げられそうな雰囲気があるような気がするのは私だけなのかどうか、は知りたい。--CUE



>「道具だ」と叫ぶと石を投げられそうな雰囲気があるような気がする
そんな雰囲気、ありますか? 具体的にはどこいらへんで?
もっとも「道具」の定義やニュアンスにもよるかもしれませんね。
弘法、筆を選ばずの精神(あるいは誤用)よろしく、
所詮、道具だからと軽視したり、
吟味や探求にかける労を侮蔑するのなら、それを有益なツールと見なす人には石を投げられるかも。
いくつかあるうちのひとつ。というニュアンスなら反論するほうがおかしい(and/or 無知)でしょうし。

“何の”ための道具なのかも、大事かもしれませんね。
私は問題解決(解決に至らないまでもその記述=整理)のための道具と思って使っています。
それもかなり便利なものだとも。
ちなみに私のオブジェクト指向はひとことで言えば「メッセージ送信メタファ」なので、 
カプセル化、継承、多態性などが無条件で出てきてしまう人たちとはちょっと違うかも。--sumim


>私のオブジェクト指向はひとことで言えば「メッセージ送信メタファ」
この、「メッセージ送信メタファ=オブジェクト指向」というスタンスから言えば、
くだんの「再入門」は本末転倒というか、カレーの入っていないカレーパンというか。
そもそも、メッセージメタファに馴染まない言語(大枠では Smalltalk も含む)での
オブジェクト指向プログラミングなどというものは、
オブジェクト指向っぽさ(つまりオブジェクトに対するメッセージ送信)を
旧来の手続き的な記述(つまり関数呼び出し)に置き換えることによって醸し出そうとする作業に
多かれ少なかれ終始するわけで、
メッセージ送信メタファを否定した時点で、話は終わってしまうと思うのです(^_^;)。

くだんの再入門にかぎらず、世の多くの「オブジェクト指向入門」が入門の先に見据えているものは、
実は、オブジェクト指向なんかじゃなく(実際、ほとんどその説明のために行を割いておらず)
オブジェクトのメリットを論じたり、オブジェクトを使った効率的なプログラミングをするためのもの
に過ぎないんじゃないかなぁ…という問題も、もちろんあります。--sumim


まあ、経典を理解どころか読みもしてない似非信者は多いかも、という気はする。
そして彼らが、「これこそはOOPだ!」と叫んでいる、というか。
#俺はどうなんだろう?(藁 --

なお、「教祖は経典を書いてません」ってのは言えてるかも。
てゆーか真の教祖(ひとりの人)って居るの?

俺にとってはオブジェクト指向は、
「存在すること」
&&「存在を区別できること」 // 優先順位を替えさせてください。(自分の心に対して)間違ってたので。 --
&&「存在を「数え」られること」
&&「んで数えた数がタカの知れた(つまり工学的(?)に)数えられる数であること」
かな。
#&&は、C言語などでの短絡評価だと思ってください(^^;

あと、実用的には、それに加えて
&&「他のオブジェクトと繋ぐことが出来ること」
&&「なにか動く(つーか、命じたら命じた間くらい(笑)は動いてくれる(ActiveObjectは俺は必須とは思ってない))らしいぞ」
とかも欲しいかな、くらいな。

あと、それら(公理みたいなキブン)の結果(定理?)として、
「スルことじゃなくサレルことを記述するといいよ」って感じ。
なお俺としてはこれがメッセージ送信パラダイムだと思う。オブジェクトが上記のようなものだと
捉えた「結果」として、メッセージというものが有ると考えたほうがシックリくるようになる、というか。


教典は知る限り存在しないですね。
それぞれの言語における教典的なものはあると思います。>オリジナルペーパーかそれに準ずる物
オブジェクト指向という言葉をはじめて使った論文は(あれば)読んでみたいですね。

まあ、オブジェクト指向がいかなるものであれ
まず(SIMULA 67 の、あるいはそれに準ずる)オブジェクトありき、ってところから始めて欲しいものです。
SIMULA 67 はオブジェクト指向という考え方こそ(当初)提示できていなかったけれど、
オブジェクト(と本質ではないにしてもクラス)がここからスタートしたのは確かだからです。
そこからの筋道がないなら、例外なく(不勉強から生じた)オレ定義と私は見なしています。--sumim


追記:これは、間違いです。ごめんなさい。オブジェクトやクラスはたしかに Smalltalk や C++ に先んじて、SIMULA で装備された言語機能なのは確かですが、これらは決してオブジェクト指向のために生まれたものではありません。そして、ケイのオブジェクト指向にしても、ストラウストラップのにしても、オブジェクトやクラスが自分たちの考え方を具現化するのに便利だから SIMULA から拝借したにすぎません(前者ではメッセージングの担い手としてオブジェクトを、後者ではユーザー定義型のためにクラスを…)。オブジェクト指向がいかなるものであれ、それを語ろうとするならば、まず、ケイのオブジェクト指向に重きを置くのか、それともストラウスとラップのオブジェクト指向に重きを置くのか、(あるいは、それらとはまったく別のオリジナルの体系に基づくものなのか)をはっきりさせるべきでしょう。--sumim

教典について気になって調べてみたところ、驚いたことに、
Smalltalk 関係の論文でさえ「オブジェクト指向」が現われるのは、1978 年の 1 月になってからです。
The Smalltalk language is object oriented rather than function oriented, and this often confuses people with previous experience in computer science. For example, to evaiuate <some object>+4 means to present +4 as a message to the object. The fundamental difference is that the object is in control, not +. If <some object> is the integer 3, then the result will be the integer 7. However, if <some object> were the string 'Meta', the result might be 'Meta4'. in this way, meaning rides with the objects of the system, and code remains an abstract form, merely directing the flow of communication. As we shall see, this separation is a key factor in the ability of a system to handle complexity. --Daniel H. H. Ingalls, "The Smalltalk-76 Programming System - Design and Implementation", Proceedings of the 5th ACM SIGACT-SIGPLAN symposium on Principles of programming languages, 9-16 (1978)
この前年の 1977 年の論文では
冒頭に2カ所だけですが別の著者(アデル・ゴールドバーグ)により
「メッセージ指向」という言葉が使われています。
が、「オブジェクト指向」はありません。
ちなみにメッセージ送信メタファについては、1973 年のアラン・ケイのメモにすでに出てきています。
(もちろん時期的にアクター理論への言及付きです。どこかで書きましたが、
 オブジェクトへのメッセージ送信というメタファについて学術的には
 同年のヒューイットのアクター理論のオリジナルペーパーが初出ということになります)
「メッセージ送信メタファ=オブジェクト指向」派の私としては残念なことに、
文脈で両者(メッセージ指向とオブジェクト指向)は似てはいますが同義では使われていません。
Smalltalk に限らず、1977 年以前で「オブジェクト指向」を使っているドキュメント、どこかにないですかね。--sumim

前後しますが、先の引用の前の文章もなかなかいけてます。
The purpose of the Smalltalk project is to support children of all ages in the world of information. The challenge is to identify and harness metaphors of sufficient simplicity and power to allow a single person to have access to, and creative control over, information which ranges from numbers and text through sounds and images. In our experience, the SIMULA notion of class and instance is an outstanding metaphor for information structure. To describe processing, we have found the concept of message-sending to be correspondingly simple and general. Rather than provide this organization as a 'feature' in an existing system, we have taken these two metaphors as the point of departure for the Smalltalk programming language. The result is a lively interactive system which provides its own text editing, debugging, file handling and graphics display on a personal computer.
つまり、
SIMULA のオブジェクトを情報の枠組みのメタファに使用するというアイデアはすばらしい。
(これはオブジェクトという言葉を使っては '68 に、同種のアイデアは '66 にすでに SIMULA が提示)
それに加えて、処理を記述するのにメッセージ送信という考え方を用いることによっても、
物事を単純にしたり普遍的にするのに同等の有効性をもって働くことを彼らは見いだした。
それが新しい「何か」なわけですが、
その「何か」イコール「オブジェクト指向」かについては残念ながらここには明言されていません。--sumim

>「存在すること」
>&&「存在を「数え」られること」
<snip>
>&&「なにか動く(つーか、命じたら命じた間くらい(笑)は動いてくれる(ActiveObjectは俺は必須とは思ってない))らしいぞ」
>とかも欲しいかな、くらいな。

というのは、オブジェクト指向する際にオブジェクトにあらまほしきことですよね?
ではその「オブジェクト指向」は具体的にはなんなのでしょう…。
>「スルことじゃなくサレルことを記述するといいよ」って感じ。
がそれにあたるのでしょうか。--sumim


(俺にとっては)逆!逆っす!
(オブジェクトとして扱うのが妥当と思える)モノはオブジェクトとして
扱いたい(そう位置付けて設計したりプログラムしたりしたい)、ってのがまず有るの。

オブジェクト指向あってのオブジェクトじゃなく、
オブジェクトあってのオブジェクト指向っす。

前から言ってるように、スル/サレルという動詞についての問題は、俺にとっては2番目。
一番目は名詞の問題。 --


これぞObject(笑)指向だよなあ --戯


このページを編集 (11205 bytes)


Sorry! このページは Swiki ブック内で孤立しています。

This page has been visited 9707 times.