オブジェクト指向というより
オブジェクト指向プログラミングについての間違いと改善案をブログに書いてみました。
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クラスという決め付けが継承というシステムを作り
多重継承を難しくしたのではないかと考えております。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
議論の主題には根拠を示しましょう。
一般論のように思えることでも。また、文章は自分の考えなのか、そうでないのかを明確にしましょう。
「■オブジェクト指向プログラミングの問題点」は出典がありますか?
結論のように書かれていますが、これが議論の前提ですね。前提も結論も自分の考えで閉じているように読めるので、少し独りよがりな文章に見えてしまいます。
過去に類似の議論や論文が存在していたはずです。例えば
http://staff.aist.go.jp/y-ichisugi/ja/mj/
など。
また仕組みの説明が多く、利点や新規性がよく分かりません。
「■カオス指向(仮)でどうなるか? 」の三点のうち二点は「不要」や「発生しない」と否定的なものです。残り一つ(多重継承らしきもの)には期待できる効果の説明がありません。
例えば「特定ユーザーのアクセスログだけ出力」は、カオス指向で作った場合とそうでない場合で何が変わるのでしょう。バグが減るのですか、生産性が上がるのですか、それともプログラム言語の表現力の問題でしょうか。
ご回答ありがとうございます。
質問の記述内容に致命的なミスがあり、意図しない内容になっておりました。
「カオス指向(仮)とは、オブジェクトに処理を”動的に”追加・削除することでオブジェクトの振る舞いに無限性を持たせる試みです。」が
正しい文章になります。
指摘の点を踏まえ改めて質問を上げるつもりですのでよろしくお願いします。
No.1
- 回答日時:
斜め読みしたところ、オブジェクト指向の実装方法の一つにすぎない気がします。
「カオス指向」ではなく、せいぜい「カオスベースのオブジェクト指向」程度。
# そもそも、「カオスベース」と名付けられるほどの新しい考え方か、という点にも疑問が残ります。
> 処理を追加・削除が可能なことからプロトタイプベースがもっとも近いですが、
> オブジェクトが親子関係を持つことと
> オブジェクトの親子関係から処理が影響を受ける事が異なります。
プロトタイプベースとクラスベースの混合は、既にRuby等で実装されています。
> ●”認識タイプ”
Java等に存在するInterfaceと同等に見えます。
> ●木構造と処理
AさんとCさんの子供は、どうなるのでしょう?
> オブジェクトにつき1クラスという決め付け
そんなものはありません。
そういう実装をしているプログラミング言語はありますが、「オブジェクト指向」には、そんな制約はありません。
ご回答ありがとうございます。
質問の記述内容に致命的なミスがあり、意図しない内容になっておりました。
「カオス指向(仮)とは、オブジェクトに処理を”動的に”追加・削除することでオブジェクトの振る舞いに無限性を持たせる試みです。」が正しい文章になります。
”動的に”が入っていないとオブジェクト指向プログラミングと大差ありません。
指摘の通りオブジェクト指向の実装方法の1つです。「オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方」です。
改めて質問を上げるつもりですのでよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java オブジェクト指向プログラミングの実践本を紹介してください 3 2022/09/19 04:56
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- JavaScript 質問すいません。 javascriptの質問で、 人物4名、名前と年齢をオブジェクトと指定し人物1人 2 2022/06/26 22:08
- JavaScript javascript で外部サイトにデータ入力させて自動でボタンを押すことは可能ですか? 1 2023/01/30 16:23
- Visual Basic(VBA) Excel VBA オブジェクトマクロ 使用指定について お詳しい方教えてください。 共通エクセルフ 2 2023/03/14 17:26
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- その他(コンピューター・テクノロジー) ChatGPT ExcelVBAの精度は3.5と4で違いはある? 1 2023/04/21 21:00
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
多人数のじゃんけんプログラム
-
COMコンポーネントって何?
-
VBA 同じ名前のオブジェクトを...
-
ワイルドカード<?>と型パラメー...
-
VBAのWindowオブジェクトとWork...
-
文字列でクラス型名を取得したい
-
Listに格納されているオブジェ...
-
オブジェクト名をforループ内で...
-
ArrayLsitのデータ取得
-
LISTBOXの内容が更新されま...
-
Visual Studioでのbmpファイル...
-
パワーポイントのVBAでテキスト...
-
.getElementById()のエラーにつ...
-
C#でフォームのオブジェクト名...
-
Listに格納されたオブジェクト...
-
Vbで通常使用するプリンターを...
-
Excelで =EMBED("Acrobat Docu...
-
VBAからノーツを起動
-
Java認定試験3級の問題です。 ...
-
BufferedWriterのcloseメソッド
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
EXCEL VBAにて動的にCheckBOXを...
-
ワイルドカード<?>と型パラメー...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
vb.net オブジェクト指向につい...
-
COMコンポーネントって何?
-
オブジェクトレベルとメタレベル
-
ビジュアルC++でボタンの有...
-
時間帯判定をする。
-
LISTBOXの内容が更新されま...
-
VBA 同じ名前のオブジェクトを...
-
オブジェクト名をforループ内で...
-
Object型からDouble型へのキャスト
-
ADO オブジェクトの渡し方
-
bmp画像をjpegやpng画像に圧縮...
-
Vbで通常使用するプリンターを...
-
戻り値がクラスオブジェクト
-
VBAでvlookup関数から、別シー...
おすすめ情報