@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

オブジェクト指向の理解度を測るためには?

投稿者投稿内容
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-06-09 13:32
引用:

Jittaさんの書き込み (2004-06-09 10:05) より:
 私としては、「データ」は“情報”しか含んでおらず、対して「オブジェクト」は“情報”だけでなく“振る舞い”も含んでいます。喩えるなら、Cの構造体は“情報”しかありませんよね。関数へのポインタを持たせて擬似的に“振る舞い”を定義することはできますが、あくまで擬似的なものですから。


う〜ん、それは擬似的なんでしょうか。オブジェクト指向だと私は思いますが。
いま念頭に置いているのは、Berkeley DB バージョン4 で、DB->open とか
DB->get とかやるようなことです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-09 15:55
引用:

ぽんすさんの書き込み (2004-06-09 13:32) より:
引用:

Jittaの書き込み (2004-06-09 10:05) より:
関数へのポインタを持たせて擬似的に“振る舞い”を定義することはできますが、あくまで擬似的なものですから。


う〜ん、それは擬似的なんでしょうか。オブジェクト指向だと私は思いますが。
いま念頭に置いているのは、Berkeley DB バージョン4 で、DB->open とか
DB->get とかやるようなことです。


 例えば、C++でクラスに定義されたメソッドは、インスタンスレベルでは変更できません。しかし、Cの構造体に追加された関数へのポインタは、ポインタを差し替えることで変更できます。これは変態や多態とは違った概念ですよね。また、必ずどこかで代入してやる必要があります。この「代入する」ということによって、「振る舞いを擬似的に定義する」としました。つまり、そこにあるのは「振る舞い」ではなく、振る舞いが定義された“場所(アドレス)という情報”だと思います。


#####
この辺、近いことがBorland C++ Builderのイベントハンドラ定義で議論されていたのを見かけたことがあるんだけどなぁ
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-06-09 16:10
msoです。

ヨコヤリみたいですが、本来のネタにしてみます。
アンケート問題作ってみました。
#一部名称を変えていますけどね・・・

私の周りの人からはハードルが高すぎると
非難を浴びております
ハードル高いでしょうか?
#つっこみお願いします。


以下の設問について答えてください。(制限時間は1日)

設問1:
 太郎君が自動販売機でジュースを買う一連の動作を
 クラス設計してください。
 表現方法はUMLが望ましいですが、UMLについて詳しく
 わからないのであればプログラムでも可とします。
 ただし、必ず”自動販売機クラス”を作成してください。

設問2:
 オブジェクト指向は再利用性が高いといわれていますが、
 構造化プログラミングでも再利用が可能な抽象化部品(関数)が
 あります。
 なぜオブジェクト指向が再利用性が高いのかを説明してください。





はゆる
ぬし
会議室デビュー日: 2004/02/16
投稿数: 1008
お住まい・勤務地: 首都圏をウロウロと
投稿日時: 2004-06-09 16:24
こんにちは〜。
生息板違いですが、ちょびっとだけ。(^^;

う〜ん、Berkeley DB はソースを見ていないのですが、構造体に関数へのポインタを埋め込んだとしても 「関数自体は外出し」 や 「構造体の中身はどこからでも書き換えられる」 という点において、やはりオブジェクト指向とは違うかなぁと思うのですが、どうなんでしょう。
(オブジェクト指向をおいしく利用しているとは思いますが)

自分の理解度を推し量るには、著名な本を読むのもよいかなぁと(必ずしも本が正しいとは限りませんけど)。
「翔ソフトウェア (Sho's) - オブジェクト指向 - 書籍-雑誌」 さんで紹介されている書籍とか。
最近出た 「オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―」 は、パラッとしか見ていませんが、おいしそうなカンジでした。
# 個人的には、がるがる さんの 「オブジェクト講座」 がよいと思っています(笑)。

# うわっ、遅レスでした!流れを切っちゃってすいません!

[ メッセージ編集済み 編集者: はゆる 編集日時 2004-06-09 16:28 ]
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-06-09 18:32
引用:

Jittaさんの書き込み (2004-06-09 15:55) より:
 例えば、C++でクラスに定義されたメソッドは、インスタンスレベルでは変更できません。しかし、Cの構造体に追加された関数へのポインタは、ポインタを差し替えることで変更できます。これは変態や多態とは違った概念ですよね。また、必ずどこかで代入してやる必要があります。この「代入する」ということによって、「振る舞いを擬似的に定義する」としました。つまり、そこにあるのは「振る舞い」ではなく、振る舞いが定義された“場所(アドレス)という情報”だと思います。


これは、プロタイプベースのオブジェクト指向プログラムと考えることもできるのでは?
つまり、JavaScriptがオブジェクト指向言語なら、これもそうかもということです。
ちなみに、Rubyなんかも、動的にメソッドを置き換えることが出たりします。
skulker
ベテラン
会議室デビュー日: 2004/06/08
投稿数: 67
投稿日時: 2004-06-09 19:20
引用:

Wataさんの書き込み (2004-06-09 18:32) より:
引用:

Jittaさんの書き込み (2004-06-09 15:55) より:
 例えば、C++でクラスに定義されたメソッドは、インスタンスレベルでは変更できません。しかし、Cの構造体に追加された関数へのポインタは、ポインタを差し替えることで変更できます。これは変態や多態とは違った概念ですよね。また、必ずどこかで代入してやる必要があります。この「代入する」ということによって、「振る舞いを擬似的に定義する」としました。つまり、そこにあるのは「振る舞い」ではなく、振る舞いが定義された“場所(アドレス)という情報”だと思います。


これは、プロタイプベースのオブジェクト指向プログラムと考えることもできるのでは?
つまり、JavaScriptがオブジェクト指向言語なら、これもそうかもということです。
ちなみに、Rubyなんかも、動的にメソッドを置き換えることが出たりします。



プロトタイプチェーンや委譲が実現できればプロトタイプベースOOと言えるのかもしれませんが・・・。
例えばアセンブラでOOPやって、それをOOPと言えるのかというと私はちょっと違う気がしますが、それと同種の違和感があります。
# OOを言語仕様で実現するのか、ライブラリとして実現するのか、みたいな価値観の相違?


スレッドの本題に戻ると、
C++・Javaな人と、Smalltalk・Objective-Cな人と、はたまたSelfな人、CLOSだのSchemeだのな人で、「オブジェクト指向とは?」に関する考え方がまるで違うので、まず自分がどの流派のオブジェクト指向でいくのか決めるべきなのかもしれません。

#私はSmalltalk寄りなので、オブジェクト指向とはメッセージパッシングだ!と思ってます
こくぼ
大ベテラン
会議室デビュー日: 2003/08/11
投稿数: 229
お住まい・勤務地: 国境の南、太陽の西。
投稿日時: 2004-06-09 19:40
引用:

msoさんの書き込み (2004-06-09 16:10) より:
msoです。

私の周りの人からはハードルが高すぎると
非難を浴びております
ハードル高いでしょうか?
#つっこみお願いします。
...省略しました。



具体的にどこが難しいのか ちょっと想像できませんでした^^;
(深く考えてないのでエラそうなことは言えませんが。。)

ちょっとばかり昔の話になりますが
引用:

オブジェクト指向プログラム:データ中心のプログラム


という考えでいくと、
「データ中心=データはデータとしてまとめて、処理は処理として別のところでまとめる。」
となっていると(手元で調べた某書籍を調べた限りでは)思います。
そうなってしまうとオブジェクトがもつロール(責務)という概念はどういった形で存在することになるのでしょうか?
(データと処理を明確に分離して責務を作り出せるのか、といった疑問です)

_________________
"Whatever does not destroy me, only makes me stronger." - Nietzche

[ メッセージ編集済み 編集者: こくぼ 編集日時 2004-06-09 20:21 ]
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-06-09 20:32
msoです。


引用:

こくぼさんの書き込み (2004-06-09 19:40) より:

ちょっとばかり昔の話になりますが
引用:

オブジェクト指向プログラム:データ中心のプログラム


という考えでいくと、
「データ中心=データはデータとしてまとめて、処理は処理として別のところでまとめる。」
となっていると(手元で調べた某書籍を調べた限りでは)思います。
そうなってしまうとオブジェクトがもつロール(責務)という概念はどういった形で存在することになるのでしょうか?
(データと処理を明確に分離して責務を作り出せるのか、といった疑問です)



んー、表現をどうやったらいいんだろうなぁ。
”データ中心”というだけであって、データとロジックを分けるわけじゃないんです。
私はデータ=インスタンスと勝手に思いこんでいる部分が少なからずあります。

自分の時は自分が分かるまで本を読んで、それでも分からないなら他の本という
感じに数冊本を読んでいるので”なんとなく”分かっているつもりになっています。
なのでクラス設計しろとか、プログラムやれ、UML書けと言われたらそれっぽく
できるしココはこうやっている。と言えるのですが、しつこく”なぜ?”を連発
されると相手を説得する自信がありません。
#今回痛感しています。

どうやって説明すればいいのか分かりませんが、
債務をいい加減にしてはいないですよ。

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