クラスとインスタンスの違い、new演算子 について ( No.28 )
日時: 2021/09/25 07:31
名前: REDCHEEKS

白状すると、これまでは、説明が面倒だったので、インスタンスと言うべきところをクラスと言ってしまっている所があったんだな。

>>21 の最後の方
> 読み込んだデータをもとに、NakigotoOshikari クラスを大量に生成する。

これは本当はインスタンスなんだな
インスタンスを説明するのがめんどくさくて、しかも一度に説明するとかえって混乱を招くので、あえてそうしていたんだ。

では、クラスとインスタンスの違いとは何かについてこれから説明しよう。

******************************
クラス     とは 設計図、間取り図
インスタンス とは 実体、実際の建物
******************************

そして、プログラム中にある new とは、設計図から実体を作り出すという意味

実体1 = new 設計図()
実体2 = new 設計図()
実体3 = new 設計図()
  :

これを100万回繰り返せば、1つの設計図から100万個の実体が出来ると言うことなんだ。

実体といっても、実際はコンピュータ内に「メモリ領域」を確保するって事なんだな。

クラスは設計図、インスタンスは実体、そして設計図を元に、同じ間取りの部屋を多量に作る、マンション建設のような事が、コンピュータ内部で行われているんだ。
マトリックスの世界を垣間見たような気がするね。

オブジェクト指向以前の時代は、メモリ領域の確保は、手動(マニュアル)でやってたから面倒だったよ。

http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=484&no=192

今はオートマ車、new 一発で済むから、簡単楽ちん!

継承とは ( No.29 )
日時: 2022/03/27 12:27
名前: REDCHEEKS

継承とは、クラスとインスタンスに並ぶ、オブジェクト指向のキモで、重要な概念。

これをREDCHEEKS名物の、超お下劣お下品エッチなやり方で、これから説明して行くよ。

さて、>>28 では、

実体1 = new 設計図()

ということで、建物と間取り図に例えて説明していたが、これは人間にも例えることが出来る。

人間1 = new 人間の設計図()

人間の設計図? うぁーここからエッチな話が始まるんだな、左右に割れたオシリとか(笑)

というわけで、期待しビンビン勃起しながら、やって欲しい準備があるんだ、それは以下の通り。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214800.jpg

@ スタートボタンをクリックする。
A Visual Studio 2019 を選択する。
B 新しいプロジェクトの作成(N) をクリックする。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214833.png

C C# Windows コンソール を選択する。
D コンソール アプリケーション を選択する。
E「次へ(N)」ボタンをクリックする。
F プロジェクト名(J) に「課題H」を入力する。ほんとエッチだよね。
G「次へ(N)」ボタンをクリックする。
H「作成(C)」ボタンをクリックする。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214856.png

@ 人クラスを定義する。
  名前、身長、体重、尻
A 人クラスを継承して男クラスを定義する。
  名前、身長、体重などは人クラスから引き継がれるので記述しない、男にしかないものを記述する。
B 人クラスを継承して女クラスを定義する。
  名前、身長、体重などは人クラスから引き継がれるので記述しない、女にしかないものを記述する。
C 男のインスタンスを作成し、それを "red" とする。
  red と入力した後、ピリオド . を打つと、男クラスの要素が一覧表示される。
  一覧には、人クラスで定義したものと、男クラスで追加定義したものが、表示される。
  とりあえず、名前を選択する。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214916.png

D 同様に、女クラスを定義し、名前などを適当に設定すると、このようになる。

男クラスのインスタンスである red には、人クラスから継承された、名前、身長、体重などに加え、男クラス独自の項目がある。
女クラスのインスタンスである zan には、人クラスから継承された、名前、身長、体重などに加え、女クラス独自の項目がある。
これが継承って機能なんだ。
何が便利かっていうと、今後人クラスに何らかの修正が加わった場合、それが自動的に男クラスと女クラスに反映されると言うことだ。
では、その修正例を示そう。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214856.png

まず、人クラス@の中身を確認すると、

「public object 尻;」という記述がある。

尻を1つのオブジェクトとして、オブジェクト指向的に記述しているわけだが、間違いではないが、これでは大ざっぱすぎて使えない。
少なくとも、尻は左右に割れているという事ぐらいは、コンピュータに認識させたい。
というわけで、その手順は以下の通りである。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214916.png

E まず、尻の設計図である "けつ" クラスを定義する。
  右尻オブジェクトと、左尻オブジェクトに加え、ペンペン機能を記述する。
F 人クラス内の「public object 尻;」記述の先頭に「//」を追加し、コメント化(無効化)し、代わりに「public けつ 尻 = new けつ();」を記述する。

さて、これで準備は整った、後はメインプログラムへの記述である。

G まず、red に続いて、ピリオド . を打つと、一覧が表示されるので、尻を選択する。
H さらに、尻に続いて、ピリオド . を打つと、一覧が表示されるので、ペンペンを選択する。
  ※ この時、ペンペンの他にも、右尻と左尻も表示されている。尻が左右に割れていることをコンピュータが認識しているのだ!
I red と同様、zan もペンペンを選択する。
J 「課題H」を実行する。
K 2人から悲鳴が上がればOK。

p.s. REDCHEEKSの説明は、お下劣お下品でケツの臭いプンプン、学校の授業では絶対使えないが、下半身・性に直結するだけあって、わかりやすいだろ、みんな分かったかな、勉強は下半身でするものだよ(笑)
http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=558&no=22