ポリモーフィズム、インターフェース ( No.36 )
日時: 2022/03/27 12:28
名前: REDCHEEKS

ポリモーフィズムというのも、これもまたオブジェクト指向の考え方であり、キモなんだな。
そしてそれを実現する手段の一つが「インターフェース」なんだ。
さて、これらを説明するにあたり、練習問題>>32 で作ったプログラムを使用する。
念のためその解答を示しておくよ、http://mediasp.kir.jp/img20220326/imgloglog-box/img20211030211151.png
このプログラムは充分にエッチだが、さらに次元を超えたとんでもないエッチな変更をこれから加える。

そもそも "ポリモーフィズム" とは何か?
(融通の利かない)昔のプログラミング言語は、数字なら数字、文字なら文字と、同じ種類のデータしかまとめて扱えなかった。
この考えで行くと、男クラスである red と、女クラスである zan は、一緒に処理できず、男は男、女は女と、別々に扱う事になるので、プログラムは複雑になる。
それに加え、最近はLGBTとかいろいろあってますますややこしくなるので、それらを解決する技術が必要とされてきた。
これからの時代は、同じ種類のデータを集めた「配列」ではなく、多種多様なデータが入り交じった「コレクション」なんだな。

貴方はコレクションと聞くと何を思い浮かべるだろうか?
フィギュアとかマニアックな世界? そうそう個性ある人形達だね。
このように、最新のオブジェクト指向プログラミングは、多様なものを扱えるようになった、それが "ポリモーフィズム" なんだ。
ではこれから「おなに」という機能を例に、 "ポリモーフィズム" を説明して行こう。

おなにと一口に言っても、男と女とでは、体の構造は異なり、やり方が違うはずである。
男と女では、オナにのし方に違いがある。
red は男クラスなので、ちんちんのしこしこを実行する。
それに対し
zan は女クラスなので、おまんこのしこしこを実行する。
という違いがある。
何度も言うが、これらをどうやって一つの処理として統合するのか、といった難題を解決し、さらにはLGBTなどさらに複雑化する世界にコンピュータシステムを対応させる技術、それがオブジェクト指向であり "ポリモーフィズム" なのだ。

REDCHEEKSの超下ネタ解説はわかりやすいだろ?
IT関連の書籍を読んでチンプンカンプンな人もこれで一発理解、これで本を出そうかな(笑)

さてその手順について、具体的に示そう。

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

@ コレクションの使用を宣言する。
A インターフェース "Iえっち" を定義する。
  ・インターフェース名の先頭には、Iを付けるというルールがあるので一応従う。
  ・人類共通の快楽である「おなに」機能の使用を宣言する。
B 男クラスに、"Iえっち" インターフェースを(コンマに続けて)追記する。
C「おなに」機能の中身を定義する。
D 女クラスにもBCと同様の処置を施す。
E「//2人ともオナニー」の下にある、red と zan の直接記述をコメント化し無効にする。
F 変態コレクションを作成し、そこに、red と zan を追加する。
G 変態コレクションに含まれるすべての変態に対し、おなに() を実行するようにプログラムを記述する。

動作確認は以下の通り、

H「課題H」をクリックする。
I 2人の悲鳴のあと、あえぎ声が聞こえてくればOKです。

ポリモーフィズムのまとめ(解説) ( No.37 )
日時: 2022/03/27 12:29
名前: REDCHEEKS

>>36 のまとめ(解説)

http://mediasp.kir.jp/img20220326/imgloglog-box/img20211030225906.png について解説しよう。

まずEについて、これまでは、

red.ちんちん.しこしこ();
zan.おまんこ.しこしこ();

と言う具合に、プログラム上に red や zan を直接記述していた、これでも動作はするが、2人程度なら2行だが、何千何万人のデータを処理しようとすれば、プログラムの行数が増え、非常に長くなり、見にくく、最終的に管理できなくなるので困る。
それを避けるため、まずコレクション機能を利用する。
Fの変態コレクションがそうである。

var 変態コレクション = new List<Iエッチ>();    // Iえっちインターフェースを持つ変態コレクションを作成する。

そして、そこに、red と zan を追加する。

変態コレクション.Add(red);    // 変態コレクションに、red を追加する
変態コレクション.Add(zan);    // 変態コレクションに、zan を追加する

でも貴方はここで疑問が沸いてくるのでは?
変態コレクションの作成は、1行で済むが、その後の、red と zan を追加するところで、何千何万人のデータを追加しようとすれば、プログラムの行数が増えるのではないか?
結局見にくく、最終的に管理できなくなるのでは?

でもこれには解決策があるんだ、プログラム上に red や zan を直接記述していた時とは違ってね。
それはエクセルなどの外部ファイルに出来ると言うことなんだ。
(これについては、課題01における、エクセルからのデータの読み込み >>33 を参考に出来る、但し今回は説明を省略する)

そして最終的な極めつけはGの、foreach 繰り返し構文。

foreach(var hentai in 変態コレクション)
{
  hentai.おなに();
}

これで変態コレクションに含まれるすべての変態に対し、おなに() が実行されるわけだ。

このようにプログラムを組めば、変態が何千万人いようが、一瞬で処理できる。

※ ちなみに、コロナの定額給付金の配布に何ヶ月もかかったのは、我が国のIT化が遅れているからであって、foreach 文を使えば、こんなもの一瞬だよ(笑)


p.s. それにしても、おなに() の定義をまじまじと眺めて思った C D ホンマ恥ずかしいわ。
「自分の名前を名乗って、これから○○します」その後ハアハアだって(笑)
もちろん了解は取ってあります。ざんちゃんさんありがとう、変な事付き合わせてしまってごめんなさい。

練習問題(ポリモーフィズム) ( No.38 )
日時: 2021/10/31 11:27
名前: REDCHEEKS

(1) Iえっちインターフェースに、おしおき(); を追加してください。

(2) 男クラスに、おしおき() 機能を追加して下さい。内容は以下の通り、
・ぼくは〜です。これから罰としてお尻叩きを受けます。
・尻クラスのペンペン() を実行する。

(3) 女クラスに、おしおき() 機能を追加して下さい。内容は以下の通り、
・わたしは〜です。これから罰としてお尻叩きを受けます。
・尻クラスのペンペン() を実行する。

(4) 2人ともオシオキの下の、
red.尻.ぺんぺん();
zan.尻.ぺんぺん();
をコメント化(無効に)してください。

(5) 変態コレクションに含まれるすべての変態に対し、おしおき() を実行するようにプログラムしてください。