OOPには構成と置換があります。
C ++には、多重継承、テンプレートの特殊化、埋め込み、および値/移動/ポインターのセマンティクスがあります。
Javaには、単一の継承とインターフェース、埋め込み、および参照セマンティクスがあります。
OOPスクールがこれらの言語を使用する一般的な方法は、オブジェクトの置換に継承を使用し、構成に埋め込みを使用することです。ただし、共通の祖先とランタイムキャストの方法も必要です(C ++ではが呼び出されdynamic_cast
、Javaでは別のインターフェイスに問い合わせるだけです)。
Javaは、これをすべて独自のjava.lang.Object
ルート階層で行います。C ++には事前定義された共通のルートがないため、同じ「画像」に到達するために少なくとも定義する必要があります(ただし、これはC ++の可能性を制限します...)。
その後、コンパイル時のポリモーフィズム(CRTPと考えてください)と値のセマンティクスを持つ可能性は、「OOPオブジェクト」の概念をC ++プログラムに移植する方法に対する他の代替手段も提供できます。
埋め込みと暗黙の変換を使用して置換とプライベート継承を管理し、構成を管理し、実際には従来の学校のパラダイムを逆にするという異端を想像することさえできます。(もちろん、この方法は他の方法よりも20年若いので、それを行う際に幅広いコミュニティのサポートを期待しないでください)
または、すべてのクラスへの仮想共通ベース、フォームインターフェイス(実装なし)から最終クラス(完全実装)へのインターフェイスを実装します-parallelogram」継承スキーム。
OOPをjavaからC ++に比較すると、唯一のOOP方法が両方の言語の機能を制限していると仮定します。
C ++をJavaコーディングのイディオムに厳密に準拠させることは、JavaをC ++に似た言語として振る舞わせることがJavaを変性させるため、C ++を変性させます。
「感性」の問題ではなく、2つの言語が持つ「集約メカニズム」が異なることと、2つの言語を組み合わせた方法が異なるため、ある言語で他の言語よりも収益性が高くなります。