1

ユニバーサルクラスが1つだけ必要な理由に反対する議論はありません。ただし、ObjectクラスとAntiObjectクラスの2つのユニバーサルクラスがあるのはなぜですか。自然と科学の中で、私たちは二元性の概念を見つけます-エネルギーとダークエネルギーのように。男女; プラスマイナス; 乗算と除算; 電子と陽子; 統合と派生; 集合論で。二元論の例は非常に多いので、それ自体が哲学です。プログラミング自体には、デザインパターンの使用方法とは対照的に作業を実行するのに役立つアンチパターンがあります。これをオブジェクト指向プログラミングと呼びます。それは制限要因ですか、それともプログラミング言語の形成を理解する上で私が見逃している基本的なものがありますか?

編集:わかりませんが、この二重性の概念の有用性は、空きオブジェクトまたは緩いオブジェクトと組み合わせて自分自身を破壊し、それによってメモリを解放するアンチオブジェクトを作成するガベージコレクターを作成することにあるかもしれません。または、AntiObjectsがObjectsと連携して、自己変更プログラミング言語を作成することもできます。これにより、安全な自己変更コードを作成し、遺伝的プログラミングを使用して進化的計算を行い、リバースエンジニアリングを防ぐためにコードを非表示にすることができます。ここではトピック外と見なされているため、この質問をStackExchangeのコンピュータサイエンスサイトに移動しました。この質問にコメント/回答したい場合は、それを使用してください。

4

2 に答える 2

4

継承ツリーは通常(C#の場合と同様に)、いくつかの理由から、単一のルートを持つツリーです。これらはすべて、1つの大きなツリーに戻るようです。

  • 複数のルートがある場合、「任意のタイプのオブジェクト」を指定する方法はありません(C ++のようvoid *に、「タイプ」の概念を捨ててしまうので恐ろしいものは別として)。
  • 「あらゆるタイプのオブジェクト」という考えでさえ、受け入れるオブジェクトについて何も保証できなくなるため、ある程度の有用性が失われます。プログラムが実際にそれらを使用できるように、 「すべてのオブジェクトにはプロパティa、b、およびcがある」とはどういう意味ですか?それらすべてが実装するインターフェースが必要です...そして、そのインターフェースがルートタイプになります。
  • GC可能な言語は、管理するすべてのタイプのオブジェクトを収集できなければ役に立たないでしょう。 おっと、その「あらゆるタイプのオブジェクト」が再びあります!

全体として、1つのタイプを階層のルートにする方が簡単です。これにより、システム内のすべてのオブジェクトに適用されるコントラクト/保証などを作成でき、オブジェクトを普遍的に処理できるようにしたいコードへの要求を減らすことができます。

(1)C ++では多重継承が許可されているため、オブジェクトは継承ツリー間のギャップを埋めることができます。(2)テンプレートがあります(ジェネリックよりもはるかに優れており、あらゆるタイプのオブジェクトを取得できます)。void *(3) ;のような手段を介して、「タイプ」の概念を完全に破棄して回避することができます。(4)オブジェクトを管理および収集することはできません。

C#は、多重継承とテンプレートのすべての複雑さを望んでおらず、ガベージコレクションを望んでいました。

于 2012-08-07T06:24:49.623 に答える
2

自然界では、家族の中にまったく異なっていて互いに反対の2人の子供がいる場合でも、彼らには共通の親がいます。

あなたが与えたすべての例は、共通のカテゴリーに分類されます。たとえば、男性と女性はホモサピエンスのカテゴリに分類されます。プラスとマイナスはオペレーターのカテゴリーに分類されます。

OOPSにも2つのタイプがあります。参照型と値型ですが、どちらも対象になります。

あなたが提案していることも良いです。しかし、少しの間、宇宙で、あなたが提案していることを受け入れましょう。それでもSuper_Class、ObjectクラスとAntiObjectクラスが含まれています。したがって、どこかで停止する必要があり、OOPSobjectでは停止するクラスがあります。

于 2012-08-07T06:10:29.990 に答える