「インスタンス」を非ITでも解るように解説する試みから継承の話
「インスタンス」という言葉をプログラミング用語でよく使うのですが、判りにくいという話が出てたので、改めて学生に向けて解説する気分でやってみます。
「インスタンス」の定義
先ず、ここで解説しようとしているものを定義します。プログラミング用語でいうところの「インスタンス」とします。これは、例えばプログラムコードで、
class HogeClass{
};
HogeClass hoge1 = new HogeClass();
とあったら、hoge1のことがインスタンスです。他にも、グラフィックで何等かコピー元があってそれからコピーを作ってある構造で、元を変えるとみな変わるものも「インスタンス」という言い方で大方、通用します。
説明し辛さの根源は「対になる”型”」の必要性
このように、何等か「型」という抽象的な存在から、ハンコを押してできたものが「インスタンス」であり、その関係性が無いと説明が付きません。相対的な意味を持ってます。「子供」も説明をするときに「親」との対比を示さないと判りづらいのと同値です。その関係性があるものを、りかいしやすいところで表現すれば分かりやすくなります。
型とインスタンスもどきを並べてみる
実例的に思い浮かぶものを挙げてみましょう。
設計図と作った工作物
これが一番、判りやすい気がしていますレシピから創ったたい焼き
実際には、それこそ「型」で作りますがそれはちょっと違いますねキャラクタ設定と演じる俳優
これはわりといい線行ってる感じはします、俳優はメモリ空間が物理的存在の体で、振る舞いをインスタンスとしている。シナリオはインスタンスを利用するプログラムというところでしょうか。図鑑のピカチュウと野生のピカチュウ
プログラム的にもピカチュウのインスタンスを作ってるはずなので、これはまさにそのまんまだったりしますね。DNAと生き物
これもほぼ、そのままな印象です。
プログラマ的な観点からのインスタンスと型
翻って、プログラミング初心者に対して、これを説明するならば、プログラムで扱うものは全てインスタンスである、と言えます。
例えば整数型は、「整数の振る舞いをする」という型から出来ているインスタンスです。C#でなら変数も含めてすべてObject型のインスタンスで出来ていて、元素ともいえるものがObjectです。
https://docs.microsoft.com/ja-JP/dotnet/api/system.int32?view=net-6.0
現世の万物は狭義で定義すれば元素で出来ていて、物理的なふるまいをします。それを組み合わせたものが石ころだったり空気だったりします。特殊な組み合わせで生物ができました。
こう考えると、型の継承も解りやすくなります。
「なにとみなせるか」が継承の親
これはよく出てくる話ですが、いまひとつピンと来にくいです。これを先ほどの話で置き換えると解りやすくなります。地球上のすべての万物は元素で出来てると仮定し、それぞれの基本特性が在ります。
重力を生む・反応する
万有引力の法則ですね質量をもつ
危ないことをしない限りは質量は同じで必ずあります化学反応でエネルギーが出る
色々ありますけど、燃焼して熱が出たりとか
こうした基本的なふるまいは、空気でも人間でも馬でも岩でも、ありますね。つまり、「基本的な物理を全うする物質」を、空気でも人間でも馬でも岩でも、継承しています。親クラスが元素で、継承したのが空気や人間や馬や岩です。ここで人間と馬は似ています、同じ哺乳類だからです。だから人間は元素の集合体であり、尚且つ哺乳類です。人間は哺乳類とみなせます、また、哺乳類全体は元素の集合体とみなせます。ここまでを継承で考えると、
元素←哺乳類←人間、馬
という継承の図式になります。こう考えると継承のasは分かりやすくなります。地球という物理的視点から見るとどれも元素の集まりであり、食べられる野菜などの視点でみると人間も馬も動物で哺乳類です、病院に行ったときは人間と馬は区別されます。それぞれの階層での視点で価値観は変わり、それぞれの階層で何らかの意味が生まれます。人間の思考も、局所的に見れば単なる化学反応です、それを人間という階層で見ると「思考」という意味で捉えます。
そんなのを考えると楽しいですねプログラミング。