エンジニアになりたい30代の学習備忘録

学習したプログラミングやマークアップについての備忘録

クラスとインスタンスってなんぞ?

またも夜中です。

明日は出かける予定があるというのに…

 

さて、クラスとインスタンスについて、クラスを設計図や雛形あるいはたい焼きの金型に例え、インスタンスをそこから作られる物として例えているのをよく見かけませんか?

 

正直言って私はその例えによってかなり混乱させられました。

なぜなら製造業に長く従事した私にとって設計図や金型は「同じものを作るために用意されたもの」であり、その設計図や金型を使用して作られた製品達は「基本的には同じものだけれど、寸法や外観に多少の差があるもの」という認識だからです。

ついでに言うと設計図や金型はそれそのものがあるのに「クラスに実体はない」とされているからです。

 

矛盾してる!!どういうことなの!!?と、内心半ギレでした。

 

そんな中で「概念」での考え方を知り、やっとクラスとインスタンスの輪郭が見え始めたのです。

長くなりましたが今回はその「概念」で私が理解した考え方をアウトプットします。

 

まずクラス。名前の通りで受け取るのが一番いいように思います。

学校等のクラスのことね。もしくはグループや、分類、とか。

例えば「生き物」クラスを世界が創ったとしましょう。

その「生き物」クラスに「人間」「動物」「虫」などを創り出しました。

これにあたるのがインスタンスです。

「生き物」は概念であり、「生き物」という実体があるわけではありません。

「人間」「動物」「虫」などを創り出し、初めて実体を持ちます。

そしてそれらには、それぞれの特性を持たせていきます。

その特性を持たせる動作がインスタンスメソッドです。

 

規模が大き過ぎてセルフイメージでのコーディングがしづらいので、一旦小さな範囲「家族」で考えてみます。

下図はこのアウトプット用にコーディングしたものです。

f:id:horiuchi_koro:20201220020557p:plain

「家族」クラス

緑枠内がクラス全体、赤枠がインスタンスの生成です。

ちなみに私は「空のクラスを記述⇨用意したいインスタンスを生成⇨クラスの中を書いていく」という手順を取っています。

「家族」というクラスに、その構成員である「父親・母親・娘・息子」インスタンスを生成しました。

そしてそれぞれのプロフィールをインスタンスメソッドで作り、出力しています。

「父親・母親・娘・息子」インスタンスはそれぞれ同じ項目(属性)の「名前、フルネーム、年齢」を持ちますが、その値はそれぞれ違っています。

これがインスタンスの属性と属性値です。

ついでに共通する属性値、ここでは苗字の「堀内」をインスタンス変数で設定しています。

 

個人的にはインスタンスの生成はその存在を生むというより「◯◯っていうの作りたいなー」という企画で、インスタンスメソッドは企画に対する具体的な内容、そしてインスタンスメソッドの実行で初めて最初に企画したものが生まれる。と認識しています。

 

以上。クラスとインスタンスってなんぞ?のアウトプットでした。

最後に一応、出力結果を貼っておきますね。忘れてた。

f:id:horiuchi_koro:20201220023542p:plain