Nm

目次

Blog 利用状況

書庫

日記カテゴリ

オブジェクト指向02 定義2

前回の私の質問の、私なりの解釈です。

 

 

私が犬に鳴けといったら、犬がワンと鳴いた。

これをオブジェクト指向(*1)であらわすとしたら、何になるのかという質問でした。

 

ズバリ結論からいきましょう。

・クラス = 私の頭の中の像

・クラスのインスタンス = 私の頭の中の像

・オブジェクト = クラスのインスタンス

・開発者 = 該当無し(あえていうなら神?/世界?)

・プログラム=実行ファイル=私

・設計図 = 該当無し(誰も犬を作ったりはしていない)

 

"犬"に値するものはリストにないです。

私はリソースと呼んでることが多いです。

 

 

 

実際に現実のプログラムを見た時、私=実行ファイルとすれば、

クラスとクラスのインスタンスは私=実行ファイルの中にあるという解釈以外ありえないと思います。

 

犬ではわかりにくいと思うので、もっとよくある例にしてみます。

例えばファイル。

ファイルは実行ファイルの外にありますが、アクセスする時には実行ファイルの中にクラス及びクラスのインスタンスを作成します。

 

例えばユーザ。

ユーザは、実行ファイルどころかPCの外にいますが、操作する時には実行ファイルの中にクラス及びクラスのインスタンスを作成します。

 

 

私-犬の関係の時、私のなかに本当にクラス/クラスインスタンスができてるかも考えて見ます。

人は、自分の中で世界を再構築し、その世界を通して行動しています。

(単に目や耳をとおしてるというだけでもここでは十分かもしれませんがもう一歩)

 

例えば犬がワンと鳴く時、その音は口から出ていると思いますよね。

でも音だけ聞いただけだと、多分正確な位置はわからないでしょう。

視覚情報と、聴覚情報が組み合わさって、つまり脳内で再構築するおかげで

正しく口の位置から声が出ていると判断できるわけです。

 

 

 

まとめます。

クラス/クラスのインスタンスと、ここでいう犬(つまりリソース?)は、全く違うものであるということです。

そしてそれはつまり、クラス/クラスのインスタンスがオブジェクトであれば、

犬(つまりリソース?)は

 

オ ブ ジ ェ ク ト で は な い

 

ということです。

投稿日時 : 2008年12月16日 21:48

コメントを追加

# re: オブジェクト指向02 定義2 2008/12/16 21:49 あるふ

*1 前回コメントでbiacさんに指摘されていろいろと考えてみました。
biacさんの定義では、"別物"とよばれた無印オブジェクト指向が一番近かったです..。
だからとりあえずは無印オブジェクト指向ということで。

ただし、プログラムの話にきっちり落とす予定なので、
繋がらないといわれると少し納得がいかないです。
「それ」が本当にオブジェクト指向と呼んでいいものかどうかは未だに判断つきかねているのですが・・。

# re: オブジェクト指向02 定義2 2008/12/17 1:50 ゆーち

抽象化モデリングのことを言ってあるようですね。
「私=実行ファイル」という意味がとりあえずわかりましたが、「犬に鳴け」という「私」も実行ファイルだとするとちょっと違う気がします。

オブジェクト指向プログラミングではクラスは概念で、オブジェクトはクラスのインスタンスのことです。
オブジェクト指向設計という観点でのクラスとオブジェクトは、抽象化された概念とかモデルのことでしょうから、タイトルについてはその辺の明確化を指摘されたのだと思います。

# re: オブジェクト指向02 定義2 2008/12/17 1:55 ゆーち

すみません。もう一点。

設計にしろ、実装にしろ、「ここでの犬はオブジェクトではない」という意見は、一般的に言われているオブジェクト指向ほにゃららとは、かけ離れているように思います。

# re: オブジェクト指向02 定義2 2008/12/17 9:35 R・田中一郎

どういう視点で論じられているのかが良く理解できないので外しているかも知れませんが。

>犬(つまりリソース?)は
>オ ブ ジ ェ ク ト で は な い
>ということです。

オブジェクト指向な世界では森羅万象がオブジェクトです。
というのが僕の解釈です。

# re: オブジェクト指向02 定義2 2008/12/17 12:12 とっちゃん

面白そうなので参戦。

私=実行ファイル(プログラム)という解釈をするのなら
犬=実行ファイル(別のプログラム)となって
鳴け=プロセス間通信

かな。

私が実行ファイルとなれば私プロセスなので、
そこに犬プロセスがいたらおかしいものw

全然OOしてないっすw

ってか単位が大きすぎて、クラスとか出てくる以前の問題のような。。。

# re: オブジェクト指向02 定義2 2008/12/17 17:57 biac

> これをオブジェクト指向(*1)であらわすとしたら、何になるのか

どうしても 「オブジェクト指向」を名詞として使いたいのなら、 まずその言葉の定義をしてみてくださいな。
この文の用法だと、 ソレを使ってなにかを「あらわす」ことが出来るようですから、 ソレは何らかの表現手段か表現技法を意味しているんですよね? f(^^;

あるいは、 そうですねぇ…
「私が犬に鳴けといったら、犬がワンと鳴いた。」 を別の指向で、 たとえば「上流指向」とか「現場指向」とかで表してください、
…って質問すればいいかな? f(^^;


PS. 私の LT 資料、 PDF 版も上げておきました。

# re: オブジェクト指向02 定義2 2008/12/18 2:19 あるふ

>>ゆーちさん
>>ここでのオブジェクト指向は一般的ではない
すみません。一般的なオブジェクト指向プログラミングからは少しはずします。
本当は別の名前をつけるべきだったと思うのですが、ど~してもいい名前がでてこなかったんです。ほんとすみません

>>R・田中一郎さん
そうですね、"オブジェクト指向プログラミング"であれば、全てオブジェクトです。ただし、オブジェクト指向プログラミングの適用範囲はプログラムの中、つまりプログラム=実行ファイルの中のみで通用する理論です(ちょっと嘘ですが)。
だからプログラムの外にあるものはオブジェクト指向プログラミング世界の外にあり、適用範囲外なのです。"オブジェクト指向プログラミング用語のオブジェクト"にはあたりません。

>>とっちゃんさん
はい。それで問題ないです。
その場合、私=実行ファイルの中に、犬クラスがあり、犬クラスと犬プロセスが通信しますよね。
この3者の権限と位置関係に注目中です

>>biacさん
すみません。どうもありがとうございます。
うーん。でもまたよくわからなくなってしまいました。

# re: オブジェクト指向02 定義2 2008/12/18 10:24 R・田中一郎

ちょっと誤解があるような・・・

オブジェクト指向は、読んで名のごとくオブジェクト指向な訳ですから、まずオブジェクトありきです。

オブジェクト指向プログラミングだけの話ではないですよ。

# re: オブジェクト指向02 定義2 2008/12/18 13:30 biac

> オブジェクト指向プログラミングだけの話ではないですよ。

オブジェクトを指向したなんちゃら、 ってのがプログラム以外に存在したって別に構いませんし、 実際あるわけですが…

「オブジェクト指向」は Object-Oriented という形容詞の日本語訳なのでね。
そうじゃなくて名詞だと言うのなら、 形容詞 (Object-Oriented) ではない名詞としての、 「オブジェクト指向」 というものの具体的な定義を示してほしいし。
形容詞のまま使うなら、 後ろに続く名詞を明らかにしてほしいわけですよ。

いや、 形容詞を形容詞のまま議論してるだけだ、 ってことなのかもしれませんが…
それならば、 たとえば 「赤い」 という形容詞を、 対象領域を限定せずに議論して、 それで唯一の結論が得られると思いますか?
# いや結論は出なくていい、 っていうコトバ遊びなら、 それはそれでかまいませんけど f(^^;


> まずオブジェクトありきです。

その「オブジェクト」は、 オブジェクト指向プログラミング言語におけるオブジェクトのことですか? 現実に存在するモノのことですか? なにかの作用を及ぼす対象のことですか? それとも、 標的、 目的、 客観…?

クラスベースのオブジェクト指向プログラミング言語においては、 クラスをインスタンス化したものがオブジェクトですね。
でも、 Object-Oriented Program の Object は、 ソレじゃないです。 Object-Oriented Program を作るための道具立ての一つとして考え出されたのが、 クラスをインスタンス化してオブジェクトを作るという仕掛けでしょう?
そもそも oriented (なにかを志向している、ある方向を向いている) というコトバは、 自分がそっちへ行きたい、 裏を返せば、 今は自分はそこに居ない・そうなっていない、 という状態をも表しています。 Object-Oriented Program というコトバの先頭のオブジェクトと、 クラスをインスタンス化したオブジェクトとは、 別モノなのです。 ( 同じモノを指していたなら、 Object-Oriented Program ではなく、 Objective Program とか Programming by Object とか呼ばれていたことでしょう。 )

# re: オブジェクト指向02 定義2 2008/12/18 22:00 Jitta

> その場合、私=実行ファイルの中に、犬クラスがあり、犬クラスと犬プロセスが通信しますよね。

 「私=実行ファイル」の中に犬クラスは要りません。
 犬プロセスと通信するためには、「私=実行ファイル=プロセス」が「指令することが出来る「存在がある」こと」を認識出来ればいいだけです。私=実行ファイルの中に指令対象のクラス or 設計図は必要がなく、ただ、私に「他のオブジェクトに指令をする方法」が備わっていればいいだけです。

 私は、何かわからないけれど、生きている何かが私の前にいることを認識しています。そしてそれに向かって「鳴け」と言ってみました。言ってみたことを「何か」がどう受け取って、どう処理するか、私は知りませんし、知る必要もありません。私に「鳴け」と発する能力、その結果を受け取る能力があれば十分です。


 No1 のコメントに、こう書かれています。
> 犬君をnewしているのは私=実行ファイルです。これって普通のことですよ
> どうしてもイメージできなければ、ファイルとか(現実の)ユーザで考えてみてください。
> それらは実行ファイルの外にありますが、クラスは実行ファイルの中で生成されますよね?

これと、ここに書かれている「クラス/クラスのインスタンスと、ここでいう犬(つまりリソース?)は、全く違うものであるということです。」が矛盾します。私が new した「犬」は、いったい何?リソースならば、私の外にすでに存在しており、私が私の中に new する必要はありません。私が外から「招き入れれば」いいはずです。つまり、new するのではなく、誰かに設定してもらう、と。

 この矛盾は、「クラス」と「クラスのインスタンス」を同じものとして扱っているからではないでしょうか。

# re: オブジェクト指向02 定義2 2008/12/18 23:42 あるふ

>>Jittaさん
-前半部
それはそれで一つの方法論なのですが、その場合どこにもオブジェクトがないため、除外とさせてください。

>>new した「犬」
クラスのインスタンスにあたります
私の外にある犬を、私の中に仮想的に表現したものです。


>>「招き入れれば・・
ちょっと意味が取れませんでした。すみません

# re: オブジェクト指向02 定義2 2008/12/19 7:47 Jitta

> その場合どこにもオブジェクトがないため
そんなことないですよ。プロセスはオブジェクトだし、命令を出すために認識している「対象」もオブジェクトです。
.NET の世界に限ると、object クラスは全てのクラスの派生元です。ですから、犬クラスは Object クラスにキャスト出来ます。そのため、私プロセスは犬というクラスがあることを知る必要はありません。Object クラスのインスタンスにたいして命令をする方法があれば十分です。

この様に、犬その物を知らなくても指令は出来るのですが、あるいは、犬を知らないから私は犬インスタンスを作成出来ません。作成できないということは、指令対象がないということ?いえ、外部にある訳です。すると、私プロセスは外部に有るものを作成するのか?違いますよね。私が作らなくても、そこにあるのです。
んー、そうですね。犬ではなく、雪男にしましょう。UMA です。なんだか判っていないものです。
なんだかわからないものなので、作ることは勿論出来ません。しかし、少し観察することで、意思の疎通は出来そうだと判断できました。この時、私プロセスは UMA に指令するためのインターフェースがあることを知り、そのインターフェースを手に入れました。このインターフェースは、私が作ったものですか?違いますよね。UMA が観察をさせてくれたことで、私に教えてくれたものです。つまり、外から招き入れたものです。

ブログのほうも読んでくださいね。

# re: オブジェクト指向02 定義2 2008/12/19 22:45 あるふ

>>Jittaさん
ブログ拝見しました。
私=主体=視点が開発者固定としてであれば、全く問題のない解釈だと思います。

ただし、ここで扱う予定なのは主体を開発者にしたり、プログラムとしたり、オブジェクトとしたりさまざまに変える予定です。できれば一度、開発者の立場ではなく、プログラムの立場で世界がどう見えるかを考えてもらえないでしょうか。

>雪男の例
もし招き入れたものが、インターフェースのことであれば、それはクラス/クラスのインスタンスと同等のものですよね?
であれば、それがリソース(私の外にいる雪男そのもの)と別のものであるという私の主張自体に特に矛盾が感じられないのですが..

# re: オブジェクト指向02 定義2 2008/12/24 23:56 Jitta

なぜ、プログラムの立場=「私」をプログラムに持って行かなければならないのでしょう?それを現実に投影すると、私は「世界」すなわち、何らかの「存在」であるオブジェクトではなく、オブジェクトを存在させているものになってしまいます。オブジェクトを存在させているものは、命令をしたりしません。ただ、存在させているだけです。
プログラムに投影します。「new クラス」と、インスタンスを生成させます。生成させるのは、本当に「実行ファイル」ですか?実行ファイルは、単なるデータで・・・ってのは外れるからやめて、「new 犬」としたとき、世界が犬に「生まれろ」と命令するのでしょうか。私は、違うと思います。命令をするのは開発者です。開発者が、そこに命令を置いたから、そこで生成されます。実行ファイルは、開発者の「生成しろ」という命令に従って、そのように処理するだけです。
これを、実行ファイルに主体を移し・・・移すの?なんのために?
私は、「オブジェクト指向**」というのは、人間が、何らかのものを考えるときに、何に着目するかと言うことだと思います。「オブジェクト志向プログラミング」の前はどうだったかというと、「プロセス志向プログラミング」でした。これは、ある結果を得るために、「こうして、ああして、そうすれば、結果が得られる」と、「何を行うか」を中心に考えていました。
それに対してオブジェクト志向プログラミングではどうかというと、「これができるのは誰。あれができるのは誰。それができるのは誰。」と、まずプロセスを行うことができる「なにか」を定義し、その「なにか」つまりオブジェクトを中心に考えるものだと思っています。ですから物事を見る「主体」が何に変わろうが、「オブジェクト」そのものは変わりません。オブジェクトは、主体と共に平行して存在するオブジェクトだからです。

# re: オブジェクト指向02 定義2 2008/12/24 23:58 Jitta

ああ、書き忘れた。ちょうど、エピさんの、このエントリが、当てはまります。
http://blogs.wankuma.com/episteme/archive/2008/12/24/164852.aspx

> 僕的には詳細仕様書は"何をするか"を詳細に書くものなんだが、
> 先様的には"どう実装するか"を詳細に書くものらしい。

# re: オブジェクト指向02 定義2 2010/07/06 17:43 moncler jacket

実際に現実のプログラムを見た時、私=実行ファイルとすれば、クラスとクラスのインスタンスは私=実行ファイルの中にあるという解釈以外ありえないと思います。
http://www.tf-mart.com/
http://www.thomassabosales.com/

# re: オブジェクト指向02 定義2 2010/07/07 11:54 links of london bracelets

何らかの「存在」であるオブジェクトではなく、オブジェクトを存在させているものになってしまいます。オブジェクトを存在させているものは、命令をしたりしません。ただ、存在させているだけです。

タイトル
名前
URL
コメント