昔々、です。
まだヒヨッコだった僕が覚えたてのオブジェクト指向をレクチャしてたとき…
たとえば、だ。 "鳥"ってクラスを考える。
"鳥"は飛ぶけど、その飛び方はスズメとカモメじゃ違うな。
そんなとき、virtual てーのを使うんだ:
class 鳥 {
public:
virtual void 飛ぶ() =0;
...
};
ん? ああ、ケツについた =0 ね。これは"鳥"は抽象的なもので、
これ自体は飛べない。"鳥"から導出した"スズメ"とか"カモメ"とか、
具体的なクラスでないと"本当に飛ぶ"ことはできない。
"飛ぶ"ってふるまいを宣言だけしとく、ってことだな。
ここで質問の手が挙がる。
「ペンギンはどうしましょう?」 ← (なかばお約束の質問)
…ヒヨコだった当時の僕は答に窮しました。
でも今なら自信をもって答えられます。
「"飛ぶ"というふるまいを持つものを"鳥"と定義したのだ。
だからこの世界においてペンギンは鳥じゃない」
今になって考えるに、これこそがモデリングってやつだよなって思う。