リファクタリング、オブジェクト指向、クラスについて ( No.20 )
日時: 2021/09/15 07:32
名前: REDCHEEKS

前回までで、必要な機能は一応実現したわけだが、このままさらに機能追加、バージョンアップを続けていくと、プログラムが長く汚く見にくくなって、後々トラブルの原因になり、限界に達するので、一息おいて、見直すことにする。

日常用語で言うと「整理整頓」IT用語ではこれを「リファクタリング」って言うんだな。

具体的には、長くなったプログラムを複数個に分割する等の手段がある。

関数を分割したり、クラスを分割したり...ちなみにクラスとは、学校のクラスと同じ、ひとかたまり、一式って意味。

プログラムだけでなく、データも含めた一式を "クラス" という。

昔はプログラムはプログラム、データはデータという具合に別々に扱われていたが、オブジェクト指向になってから、両方まとめて一式ひとかたまりとして扱われるようになった。

これでかなり便利になったよ「オブジェクト指向」って聞いたことあるだろ?

データとプログラムを一式ひとかたまりとして扱う、つまりこれは「おしりという物体」と「叩くという機能」をひとかたまりに扱うようなものなんだ。

REDCHEEKS の説明わかりやすいだろ、ITの本いくら読んでも分からないが、オレの説明一発で分かるだろ? まあエッチお下品だが...

そして「オブジェクト指向」...なんせこれは便利なので、IT業界で一気に普及した。

そりゃ「おしり」とそれを叩く「パドル」が一式そろっていたら便利だもんね(笑)

それが「クラス」って奴なんだ、わかったかな?

***********************************************************************************************
クラス = データ(変数)+ それを処理するプログラム(機能) の一式 ≒ 「おしり」とそれを叩く「パドル機能」 の一式
***********************************************************************************************

というわけで、次にクラスの作り方、使い方を説明する。

クラスの枠組みを作る ( No.21 )
日時: 2022/03/27 12:23
名前: REDCHEEKS

クラスを定義するには、本当はキーボードから、

class 〜

と打ち込んでいかなければならないんだけど、Microsoft Visual Studio 2019 という開発環境は、これをある程度自動で作ってくれるから、これまたベンリーなんだな。

枠組みだけだけど、マウス操作で、簡単にできちゃうんだ。

まず、NakigotoOshikari というクラスを作ってみよう。

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

@「課題01」プロジェクトを右クリックし、
A「追加(D)」を選択し、
B「クラス(C)...」を選択し、
C「クラス」が選択されていることを確認し、
D 名前(N):に「NakigotoOshikari.cs」を入力する。
E「追加(A)」ボタンをクリックする。

同様に、Loading というクラスを作ってみよう。

上の@〜E手順は同じだが、Dで入力する名前が異なる「Loading.cs」


とりあえず、現時点では枠組みだけで、中身は空っぽだが、これから作成して行くクラスの概略を説明しよう。

*******************
NakigotoOshikari クラス
*******************

「泣き言」とそれに対応した「お叱り」を、ペアで格納する。
システムとしては「泣き言」と「お叱り」をそれぞれ別個に管理することも可能だが、それだと一つでもずれたりするとトラブルになる。ペアで格納するのが一番安全。
その1組分のペアを実現するのがこのクラス。

初期設定として、「泣き言」と「お叱り」を格納する。この時「泣き言」を正規表現オブジェクトに変換し、曖昧なマッチング処理が高速に行えるよう準備する。

さらに人間が吐いた泣き言と、クラスに格納されている「泣き言」が、マッチングするかの判定を行う関数が、IsMatch()である。


************
Loading クラス
************

ゲーム等でデータを読み込むときに「Loading...」と出てくる、まさしくその機能。
読み込んだデータをもとに、NakigotoOshikari クラスを大量に生成する。
今は2件しかデータはないが、データが何万件にも増えれば、人間が吐いた泣き言に対するありとあらゆるお叱りが検索可能となり、ぐっとくるお叱りもいっぱい出てくるだろう、キーは泣いて喜ぶんじゃないかな?

※ 現時点では、データをプログラムに直接書いているが、将来的には、ファイルから読み込むようにする予定。

クラスを設定し完成させる ( No.22 )
日時: 2022/03/27 12:23
名前: REDCHEEKS

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

@ NakigotoOshikari.cs をダブルクリックする。
A 正規表現の使用を宣言する。
B クラスの説明文を書く。
C クラスの中身を設定する。

 NakigotoOshikari クラスの中身については、以下の通り。
 ・コンストラクタ NakigotoOshikari(string nakigoto, string oshikari) 〜
   コンストラクタとは初期化のため、クラスが新規作成される時に、一回だけ動作するプログラム。
   パラメータとして与えられた、泣き言とお叱りのペアをクラス内の変数に保存する。
     Oshikari = oshikari;
     regNakigoto = new Regex(nakigoto);
    ※ この時、泣き言に関しては、正規表現クラスに変換し、曖昧検索に備える。
 ・変数 Oshikari
     お叱り
 ・変数 regNakigoto
     泣き言(正規表現クラスに変換された泣き言)
 ・関数 プログラム IsMatch(string nakigoto) 〜
   人間が吐いた泣き言をパラメータとして受け取り、それがクラス内に保存されている泣き言とマッチするか判定する。

D Loading.cs をダブルクリックする。
E クラスの説明文を書く。
F クラスの中身を設定する。

 Loading クラスの中身については、以下の通り。
 ・泣き言お叱り対応配列を作成する。その手順は以下の通り、
   泣き言お叱り対応リストを作成する。
   泣き言お叱りクラスを新規生成(new)し、それを泣き言お叱り対応リストに追加(Add)する。
   泣き言お叱り対応リストを配列に変換(ToArray)する。

作成したクラスを利用する/動作確認 ( No.23 )
日時: 2022/03/27 12:24
名前: REDCHEEKS

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

@ Form1.cs を右クリックする。
A「コードの表示(C)」を選択する。
BC // を先頭に追加し、古いプログラムをコメント化するとともに、新しいプログラムを追加する。
D「開始」をクリックする。


機能的には、以前と変わっていません、異常がないか確認します。


【動作確認】

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

@ 「いたいよぉ」と入力する。
A 「尻を引っ込める」ボタンをクリックする。
B 入力したメッセージと、それに応じたお叱りメッセージが表示される。
C 「ごめんなさい」を入力して「尻を引っ込める」ボタンをクリックする。
D 入力したメッセージと、それに応じたお叱りメッセージが表示される。