人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

オブジェクト指向とは何かについての質問です。ふと、思いついたことです。何かを感じたり、思いついたことがあれば、いわしに記入してください。


オブジェクト指向とは、すべての「対象のもの」や「対象のこと」や「階層ツリー」や「関係性」に固有の名前をつけることであると考えてみたらどうでしょうか。

それらの階層構造や関係性は、それぞれどこかに表に記入するだけでいい。あるいは、定義を行なっておく。

この名前を使ってEQUAL, AND, OR, NOT, GT, LTなどの演算を行なうと、階層化されたデータ、関係づけられたデータは、処理される。必要に応じて生じた結果に名前をつける。

方程式のように、名前を演算子でつなげることもできる。まったく抽象的な現象や科学的な推論などであっても名前をつけることができれば、それはひとつのオブジェクトとして取り扱われる。

オブジェクト指向とは、「対象に適切な言葉を与えること」である。




●質問者: ShinRai
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:EQUAL GT LT いわし どうでしょう
○ 状態 :終了
└ 回答数 : 16/16件

▽最新の回答へ

[1]toki-2131

対象に適切な言葉を与えること


[2]「物の考え方」として一般化するものではないと思います mjy

「名前をつける」とか「対象」、「言葉を与える」などのいいまわしが具体性に欠けます。

(インスタンスを代入する変数の命名のことなのか、クラス名のことなのか)


もちろん何となくおっしゃりたいことは分りますが…… 雲を掴むようなお話しです。


これはプログラミングの技法なのであり、それ以上に一般化した用途、用法があるものではありません。

哲学用語でもないはずです。


「データ構造」「関数」などのオブジェクト指向以前の "具体的" なプログラミング用語を使い、

「クラス」「メンバ」「メソッド」「メッセージ」「インスタンス」などの "具体的" なオブジェクト指向の用語

(言語により異なりますが)を組み立て、それらを使う "手法" としてオブジェクト指向をとらえるべきと考えます。


[3]>2 具体的な用語なくても、「名前をつけている」、「名前で管理している」のでは? ShinRai

書き込みありがとうございます。

私がデータベースのことを調べはじめたのは、階層と関係という二つの考え方が、ピアジェのいう概念の2種類と似ていることに気づいたからです。

(ピアジェ「知能の心理学」第2章)

ヒトが言葉によって記憶するとき、それにオブジェクト指向の具体的な用語をつけていませんが、人名、地名、一般名詞、関係性、抽象概念などなど、概念を使い分けています。

それとオブジェクト指向が近いように思ったのです。

具体的な用語なしでも、名前で管理するというところさえおさえていたら、プログラミングできるということはありませんか?


[4]「対象に適切な言葉を与えること」のみでは TAK_TAK

そのような言い方はできなくはないですが、

それはオブジェクト指向の一部でしかない...はずです。


[5]>4 もしこの定義が一部を意味するのであれば ShinRai

定義としてあと何が不足しているのか、

考えていただけませんか


[6]オブジェクト指向と、データベースシステムは、関係ありますか ShinRai

初歩的な質問ですみません

オブジェクト指向という考え方と、データベースシステムの原理は、関係があるものでしょうか。

つまり、データベースシステムの構築をしているときに、オブジェクト指向が生れたというようなことはありますか。


[7]>6 教科書的な回答ですが JULY

オブジェクト指向プログラミング - Wikipedia

オブジェクト指向自体は、ソフトウェア開発が大規模化するなかで生まれたもので、Smalltalk が元祖とされます。Smalltalk の開発は 1972 年に始まってます。

オブジェクトデータベース - Wikipedia

データベースの世界にオブジェクト指向の考え方が入ってきたのは、研究レベルで 1970 年代中頃、と言われていますので、順序から考えると、ソフトウェア開発でオブジェクト指向という概念が出てきたのが先だと思われます。


[8]正確な意図を汲んでいるか分かりませんが・・・ tdoi

「対象に適切な言葉を与えること」をもう少し噛み砕いて説明して頂けるとありがたいです。というのが、まずは印象です。

その上で、オブジェクト指向(OO)はある種の抽象化の手法と言えると思います。

何らかのシステムを表現する際に、それを構成するオブジェクトの集合と、そのオブジェクト間のメッセージのやり取りにより表現する手法です。

このオブジェクトというものが、実世界の構造に比較的近く理解しやすいということが挙げられます。

例えば、ものすごく大雑把に言えば、自動車はタイヤとボディとエンジンから構成されていて、エンジンからの動力がタイヤに伝わり、タイヤに乗っかっているボディを移動させる。というような考え方できます。

このときに、自動車を動きの視点からみて3つのオブジェクトにより表現しましたが、構造的な視点から見れば、タイヤとシャフトとシャシーとボディというオブジェクトから構成されると表現することも可能です。

そこで、OOとはこのように視点に応じて、必要な要素を選択することができます。

この必要な要素を選択するということを、「対象に適切な言葉を与えること」と呼んでいるのであれば、近い言い方だと思います。ただ、OOにおいては、対象をどう捉えるかという部分もまた重要な要素です。

先ほどの例でいえば、自動車という対象をどう分けるかという視点です。その部分が弱いかなと感じます。

また、どう捉えるかというところに関しては、継承や委譲といったオブジェクト間の関連の意味についても、「対象に適切な言葉を与えること」で表現できているのかは、若干、微妙な気がしています。

「ものを表現するための言葉を規定し、その言葉を使ってものを定義し、そのものの有機的な集合と全体像をとらえようとすること」

というのが、質問者さんの流れに沿った僕的なOOの意味になるかなと思います。


[9]>8 抽象化(もしくは、具象化)の結果として、適切な名前が与えられる a-kuma3

「対象に適切な言葉を与えること」がオブジェクト指向なんじゃなくて、

オブジェクト指向で対象を正しくとらえられたときに、その結果として、

対象に適切な名前が与えられている、ということだと思うな。


プログラムを設計するときに、対象を「機能」としてとらえるのではなくて、

「もの」としてとらえるだけでは、オブジェクト指向の一部でしか無くて、

「もの」として識別された対象を抽象化(もしくは、具象化)する行為が

重要だと思います。


正しく抽象化できたシステムでは、ポリモーフィズムの恩恵により、

実装がカプセル化されているので、仕様の変更に強い(あちこち直さなくて良い)と、

いうのが、オブジェクト指向を導入した場合のメリットです。


うまく設計できた RDB のテーブル(のレコード)が、「もの」に近いということは

ありますが、それは静的な情報を表しているだけで、オブジェクト指向の動的な振る舞いを

表現できていません。


# tdoi さんの書き込みにぶら下げたのは、きっと同じことを言いたいんだろうな、と、勝手に想像したからです :-)


[10]>9 オブジェクト指向は世界を見る目であり、世界観・概念体系を構築するためのもの ShinRai

tdoiさん、a-kukma3さん、ありがとうございました。

>オブジェクト指向で対象を正しくとらえられたときに、その結果として、

>対象に適切な名前が与えられている

な?るほど。

世界を正しく認識する、理解することがオブジェクト指向ということになりますね。

世界や自然と一体化する、禅あるいは悟りに近いのかも


そして、

>うまく設計できた RDB のテーブル(のレコード)が、「もの」に近いということは

オブジェクト指向は、RDBの構築と密接につながっているのですね


[11]>10 禅の考えに近いのかもしれない、そして現代芸術でいうオブジェも同じだ ShinRai

オブジェクト指向とは、そこにあるものを、あるがままに眺めるということでしょうか。

先入観なく、私心なく、ひたすら現実世界と対峙する


禅であり、現代芸術とつながっていますね


現代芸術では、「オブジェ」というのも同じですね


[12]>10 RDBとOOは別物です tdoi

RDBとOOは似ていている部分はありますが、RDBの構築に密接につながっていません。

テーブルをクラス、行をオブジェクトと見たりする部分は分かりますが、違います。OOをベースとしたORマッパーでは、そのような構造になりますが、OOを元にRDBは構築されていません。カプセル化や隠ぺい、型多層そういった概念はRDBでは扱えません。

僕もRDBの歴史について詳しくないですが、

http://ja.wikipedia.org/wiki/%E9%96%A2%E4%BF%82%E3%83%A2%E3%83%8...

によると、カントールの集合論などを基にしたリレーショナルモデルという概念を基にRDBは開発されています。基礎的なことを踏まえれば、OOよりずっと前に考案されているようなものです。

そのため、OOが発展していくなかで、オブジェクトをオブジェクトとして扱うためのデータベースとして、オブジェクト指向データベースというのが考えられています。実装もいくつかあるようですが、基盤となるシステムですし、まだまだRDBの方が実際には利用されています。

実装技術としてOOが広まる中で、基盤DB技術としてはRDBが広まっているので、間を解消するために、OOに基づいたORマッパーが主流となっているという感じでしょうか。


[13]>3 「名前で管理する」ということではありません mjy

具体的な用語なしでも、名前で管理するというところさえおさえていたら、プログラミングできるということはありませんか?

オブジェクト指向は「名前で管理する」ということではありません。全然ちがいます。

よいプログラムをかくには、名前の付け方は重要でしょうが、オブジェクト指向でなくってもそうです。


オブジェクト指向のプログラミング (http://d.hatena.ne.jp/asin/4775303716) という本をお勧めいたします。

Software-IC などの独特な表現も出てきて、現在のプログラミングからは若干離れてしまいますが、面白いと思いますよ。

(プログラムを書く必要があるのでしたら、この本など読まず Java の本とか読んで下さい)


[14]>13 プログラミングと、RDBの構築とは、まったく別の次元に属しますか? ShinRai

本のご紹介ありがとうございます。

プログラムを書くわけではありませんが、本にはあたってみるつもりです。


オブジェクト指向のプログラミングというのと、RDBの構築(?)というのは(という概念が存在するのでしょうか)、どれくらい近いのか、どれくらい遠いのか、そのあたりおわかりになりますか?


[15]>12 OOとRDBとの関係は、興味深いです ShinRai

OOはRDBより後に生まれた考え方だそうですが、RDBの開発や設計と密接な結びつきをもって生まれたのか、

あるいは、他のアプリケーションの開発中にOOは生まれたのか、


RDB構築・設計とOOの関連性はわかりませんでしょうか


[16]>15 関連はないというのが正しいのではないでしょうか tdoi

ShinRaiさんが関連が興味深いと感じられる気持ちも分からなくはないのですが、他の方からのコメントにもあるように、RDBはOOの一面しか表現することはできません。

時間の流れとして(内容的にもですが)、OOを基にRDBが構築されたということはありえません。

同様にRDBの性質を基にOOが生まれたということも考えられないと思います。この辺りは、僕も深く理解している訳ではありませんが、リレーショナルモデルという集合論の概念を考えて頂ければよく分かると思います。

ちょっとググっただけですが、

http://itpro.nikkeibp.co.jp/article/lecture/20070710/277100/

http://www.8square.net/MS/Technical/OO/1-1.html

などにもありますが、RDBとの関連性を謳っているものはないです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ