コンテキストがなければ、あなたの質問に対する 100% 正確な回答はないと思います。
たとえば、私たちのコンテキストでトラックと車を分離するには、車とトラックの動作が異なることを明確に判断できる必要があります。
車とトラックの両方が、(たとえば) 「名前」と「質量」の単純なコンテナーである場合、またはアプリケーションでまったく同じ動作をする所有者などである場合、おそらくクラスではなく特定のオブジェクトの観点から考えます。Vehicle
2 つのインスタンスを持つクラス (または単に電動車両)を実装する
Vehicle car = new Vehicle("Car",1200,someMotor);
Vehicle truck = new Vehicle("Truck",3400,someMotor);
それは「用語」だけの単純なことですが、文脈との関係性の問題もあります。関係とは、つながりを意味します。それはほぼ確実です(しかし、それ以上のものをMotorized vehicle
持つMotor
こともできる記憶があります)が、「モーターが車両を持っている」可能性はかなり高いです(所有者として、特にデータベースエンティティのコンテキストで、特に私たちのコンテキストの場合)車両よりもモーターの周りに集中しています - たとえば、自動車ディーラー向けのシステムを構築している場合)。
誰にとってもそれほど明確ではない小さなことがもう 1 つあります。それは、「車にはモーターがある」および「トラックにはモーターがある」だけでなく、「電動車両にはモーターがある」ということです。車にはモーターがある」が、「動力車だから!」。
また、詳細に進むと (質問は oop タグが付けられているため)、オブジェクト指向の用語では、クラスとインターフェイスについて考える必要があり、最終的には、クラスMotorizedVehicle
よりもインターフェイス (モーターを取得できる) の方が多いという結論に達することができます。私たちの環境は(ほとんどの場合と同様に)多重継承を許可していません。MotorizedVehicle
これにより、「オバマの車は両方である必要がありますArmoredVehicle
が、私は別のクラス階層で電動化/装甲を装備しています」などの問題を防ぐことができます。
TL;DR はすべてコンテキストに依存し、複雑なクラス階層ではなく構成とインターフェイスを優先します