私は一般的に、実際の例を使用してオブジェクト指向プログラミングを試して説明します。
たとえば、クラスと呼ばれるVehicle
ものは、車両が持つ最低限のことを記述していると言えます。私は彼または彼女に車両が何であると思うかを彼に教えてくれるように頼むでしょう。時々彼らは「まあ、車やトラックのように」のようなことを言う、そして私はうなずいて同意する。次に、車とトラックの違いは何ですか。時々彼らはサイズ、時には目的、および他のものについて言及します。
次に、車やトラックのことを忘れて、車の説明を続けるように依頼します。
「ああ、よく動く」
「オペレーターまたはドライバーがいる」
等...
すぐに、ビークルとは何かがわかったので、OOPではビークルを定義すると言いました。議論のために、それは動くことができ、ある種のドライバーを与えます。それでは、質問します。では、車には何がありますか?
「ドア」
"ウィンドウズ"
そしてトラック…
「ドア」「窓」「その他の車輪!」
すぐに、多くの議論の後、他の人は一般的に次のことを確認しました:
1)車両を構成するもの
2)車を構成するもの
3)トラックを構成するもの
4)飛行機を構成するもの。
すべて専門的な技術はありません。それぞれのプロパティを適切な領域に分割しました。彼らは継承を理解しています(「ええ、車は車両であり、トラックは車両ですが、車はトラックではありません。単純ですよね」)。
「確かに、基本的に同じことをしますが、少し異なるかもしれません。」という多態性も理解しています。動作と、オブジェクトツリーのどこに配置するかについて話し合うことができます。
彼らの学歴と経歴に応じて、他の人よりも早くそれを得る人もいます。しかし、OOPを実際のオブジェクトと比較すると、ほとんどの人は常にそれを理解しています。実際、技術者以外の人との会話で、今まで考えたこともなかったことがわかりました。車両は有人である必要はありません(ドローンなど)が、プログラマーは車両のオペレーターをその所有者であると考えているでしょうか?オペレーターに言及してもらうのは正しいことでも間違っていることでもありませんが、それによって、私たちがモデル化していることや、ソフトウェアを開発するときに達成しようとしていることについて考えるようになります。
一方、部分的なテンプレートの特殊化は、一方で... ...)