車のモデルのみを分解して、車の範囲外の個別のエンティティとして公開します。それについて考える別の方法は、キーを回したときに車がどのように始動するかを本当に理解していますか? 典型的なドライバーに関する限り、ボンネットの下にあるものはすべて 1 つの大きな (そしてうるさい) ブラック ボックスです。自動車エンジニアは、車の所有者によるメンテナンスが必要な一般的な部品を知っており、オイル ディップスティックやクーラント リザーバーのリフィル キャップなど、さまざまなレベルのユーザー インタラクション用に明示的に設計しています。
車の各パーツをモデル化できますか? もちろん。個々のスパーク プラグをモデル化することは役に立ちますか? おそらくそうではありません。
色やサイズなど、さまざまな属性の車が必要ですか? 乗客や牽引能力など、さまざまな機能を備えた車が必要ですか? 異なる 1 つの場所は、異なる動作の車が必要な場合です。これは、反応時間のような単純なものから攻撃性のような複雑なものまで、属性を持つ Driver オブジェクトのモデル化について本当に考える必要があるところです。
オブジェクト指向や継承の例として車両をモデル化することには問題があります。その例では、クラスを定義する重要な属性間の真の違いが実際には説明されていないからです。これは StackOverflow にとって新しいものではありませんが、この質問も重複していません 。この SO スレッドを参照してください。私はこれと同じ議論を友人と行い、そのログをブログに投稿しました。FAA が認識しているさまざまな航空機のタイプと、各タイプの規制がどのように細分化されているかをお読みください。航空機にはさまざまな種類がありますが、最大の違いは動力付きと動力なしの違いです。
FAA で使用されている定義を確認してください。
航空機とは、空中を飛行するために使用される、または使用されることを意図した装置を意味します。
飛行機とは、翼に対する空気の動的な反応によって飛行中に支えられる、空気より重いエンジン駆動の固定翼航空機を意味します。
飛行船とは、操縦可能なエンジン駆動の空気より軽い航空機を意味します。
空気より軽いものと空気より重いものもあります。熱気球は動力がなく、空気より軽いです。飛行船は動力があり、空気より軽いです。グライダーは動力がなく、空気より重いです。ボーイング 757 は動力付きで空気より重いですが、別のカテゴリーの「固定翼」を追加します。これは、同様に動力付きで空気より重いが「回転翼」であるヘリコプターとは異なります。
最初の 4 つを表形式で示します。
| Powered | Unpowered
---------------------------------------------------
Lighter-than-air | Blimp | Hot-air balloon
Heavier-than-air | 737 | Glider
あなたは絵を手に入れます。
エンジンを車とは別にモデル化するとは言えません。エンジンのない車はまったく別の動物になる可能性があるからです。エンジンのない車は、トレーラーのようなものではありません。これらの場合、「is-a」も「has-a」も、オブジェクトを構築する具体的な方法には適合しません。飛行船が空気より軽い航空機であるとは宣言しません。熱気球もそうです。それらが両方とも空気より軽いという事実は、それらが利用する物理学を除いて、何らかの形でそれらを関連させるものではありません. 適用される規則や規制が異なるため、この区別は重要です。別の角度から言えば、私たちは飛行船を「エンジンを搭載した」熱気球とは言いません。航空機は物理的に関連していませんが、
オブジェクトをその詳細レベルまで定義する必要がない場合は、オブジェクトをその詳細レベルまでモデル化する必要もないかもしれません。