• 締切済み

オブジェクト指向の間違いと改善案について

オブジェクト指向というより オブジェクト指向プログラミングについての間違いと改善案をブログに書いてみました。 http://chaosblogchaos.blog.fc2.com/?no=2 この考え方に間違いがあるでしょうか? 説明不足の点はないでしょうか? よろしくお願いします。 以下ブログの内容 ---------- ■カオス指向(仮) カオス指向(仮)とは、オブジェクトに処理を追加・削除することでオブジェクトの振る舞いに無限性を持たせる試みです。 カオス指向(仮)ではデータが主体となり、木構造で保持します。 (ファイルフォルダで例えると、フォルダがオブジェクト、ファイルがプロパティに当たるイメージです) 処理を追加・削除が可能なことからプロトタイプベースがもっとも近いですが、 オブジェクトが親子関係を持つことと オブジェクトの親子関係から処理が影響を受ける事が異なります。 ●オブジェクトの内容  ・配列か連想配列で子オブジェクトを保持できます。    オブジェクトどうしの強い関係を意味し、親が削除される場合、子も削除される関係にあります。    オブジェクトはルートからの木構造の中に必ず存在する事になります。  ・別途、変数領域を確保する。    処理で使用する値を保持します。    オブジェクトどうしの弱い関係を保持できます。  ・処理を持つ。    オブジェクトに処理を持たせることができるます。    プロトタイプベースと異なる点は、    オブジェクトが処理を持っていても、オブジェクトがその処理をするわけでは無く、自身と子オブジェクトに対して適用され、”認識タイプ”を持つ場合に処理します。  ・”認識タイプ”を持つ。    処理の実行を制御します。認識タイプを含むかどうかで処理を行うかどうかを決定します。    オブジェクトのクラスは”認識タイプ”で実現可能と考えて問題ありません。 ●”認識タイプ” オブジェクト指向なら、 人は歩く、話す、・・・。Aさんは人。Aさんは話す。 カオス指向なら、 歩けるなら歩く、話せるなら話す、・・・。Aさんは歩ける、話せる、・・・。Aさんは話す。(歩ける・話せるを認識するようにした場合) 人は歩く、人は話す、・・・。Aさんは人。Aさんは話す。(人を認識するようにした場合) のどちらでも作成が可能で、 話せるなら話す、・・・。の場合、ウサギAの”認識タイプ”に話せるを追加することで、ウサギAは話せるようになります。 話せるウサギは実用的ではありませんが、 特定ユーザーのアクセスログだけ出力したい場合は、 処理を用意し、対象ユーザーに”認識タイプ”を追加することでログ出力処理を追加することが出来ます。 ●木構造と処理 ユーザー   日本     Aさん     Bさん   アメリカ     Cさん とある場合、 全ユーザーの処理をユーザーに保持 日本用の処理がある場合、日本に アメリカ用の処理がある場合、アメリカに処理を追加します。 そうすることでAさんは日本の処理、Cさんはアメリカの処理が行われます。 ●同一処理による関係 処理には優先順位が存在し、その順番で処理します。 処理A、処理Bとある場合、処理Aの中で元処理として実行します。 処理Aの中で元処理を行わない場合、処理Bは行われません。 ■カオス指向(仮)でどうなるか? ・幾つかのデザインパターンが不要になります。   デコレータ・コンポジット・ステートパターン等 ・多重継承らしきものが出来るようになります。   ※根本から違うので、多重継承らしきものとします。 ・循環問題が発生しませんない   ファイルフォルダのような木構造では循環は起こりえない。 ■オブジェクト指向プログラミングの問題点 オブジェクトにつき1クラスという決め付けが オブジェクト指向プログラミングにはあったのではないかと考えております。 オブジェクト指向では、 オブジェクト:クラス:継承クラスは1:1:1で、1:1:*は条件により可能ですが原則不可能。 カオス指向では、 オブジェクト:クラスは1:*と頭からクラスを複数持たせることで多重継承らしき形が実現可能ということです。 クラスの継承がなくなっていますが、クラスを複数持たせる事とクラスに順番を持たせることで継承が可能です。 オブジェクト指向プログラミングでは、オブジェクトにつき1クラスという決め付けが継承というシステムを作り 多重継承を難しくしたのではないかと考えております。

みんなの回答

noname#208507
noname#208507
回答No.2

議論の主題には根拠を示しましょう。一般論のように思えることでも。 また、文章は自分の考えなのか、そうでないのかを明確にしましょう。 「■オブジェクト指向プログラミングの問題点」は出典がありますか? 結論のように書かれていますが、これが議論の前提ですね。前提も結論も自分の考えで閉じているように読めるので、少し独りよがりな文章に見えてしまいます。 過去に類似の議論や論文が存在していたはずです。例えば http://staff.aist.go.jp/y-ichisugi/ja/mj/ など。 また仕組みの説明が多く、利点や新規性がよく分かりません。 「■カオス指向(仮)でどうなるか? 」の三点のうち二点は「不要」や「発生しない」と否定的なものです。残り一つ(多重継承らしきもの)には期待できる効果の説明がありません。 例えば「特定ユーザーのアクセスログだけ出力」は、カオス指向で作った場合とそうでない場合で何が変わるのでしょう。バグが減るのですか、生産性が上がるのですか、それともプログラム言語の表現力の問題でしょうか。

fuku292929
質問者

お礼

ご回答ありがとうございます。 質問の記述内容に致命的なミスがあり、意図しない内容になっておりました。 「カオス指向(仮)とは、オブジェクトに処理を”動的に”追加・削除することでオブジェクトの振る舞いに無限性を持たせる試みです。」が 正しい文章になります。 指摘の点を踏まえ改めて質問を上げるつもりですのでよろしくお願いします。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

斜め読みしたところ、オブジェクト指向の実装方法の一つにすぎない気がします。 「カオス指向」ではなく、せいぜい「カオスベースのオブジェクト指向」程度。 # そもそも、「カオスベース」と名付けられるほどの新しい考え方か、という点にも疑問が残ります。 > 処理を追加・削除が可能なことからプロトタイプベースがもっとも近いですが、 > オブジェクトが親子関係を持つことと > オブジェクトの親子関係から処理が影響を受ける事が異なります。 プロトタイプベースとクラスベースの混合は、既にRuby等で実装されています。 > ●”認識タイプ” Java等に存在するInterfaceと同等に見えます。 > ●木構造と処理 AさんとCさんの子供は、どうなるのでしょう? > オブジェクトにつき1クラスという決め付け そんなものはありません。 そういう実装をしているプログラミング言語はありますが、「オブジェクト指向」には、そんな制約はありません。

fuku292929
質問者

お礼

ご回答ありがとうございます。 質問の記述内容に致命的なミスがあり、意図しない内容になっておりました。 「カオス指向(仮)とは、オブジェクトに処理を”動的に”追加・削除することでオブジェクトの振る舞いに無限性を持たせる試みです。」が正しい文章になります。 ”動的に”が入っていないとオブジェクト指向プログラミングと大差ありません。 指摘の通りオブジェクト指向の実装方法の1つです。「オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方」です。 改めて質問を上げるつもりですのでよろしくお願いします。

関連するQ&A