遊びながら何かを学ぼうかな クラスの継承 7
2024.11.5
クラスについて「お前に言われんでもわかっとるわ!」という方にはそもそもこのシリーズの記事は退屈で不向きですが、全くわからんという方にもまた向かないのも事実。
それは、私の理解は一般的な教科書的理解とは異なっている可能性があるからです。
何故か。
そもそも私はVB6の時代にオブジェクト指向など聞いたことも見たことも無い状態でExcelの延長で我流でVBAを触っていただけで、数年前に競馬予想AIを作るために昔の知識を思い出しながら必要なVB.NETの上澄みだけを吸収し、目的達成の為の最低限の知識と気持ちで挑んでいるに過ぎません。
そもそも(二回目)わからなかったり上手くいかなかった時にガッツで何とかしてきたので、理屈より実践用の知識しかありません。
確かにそのスタイルだと限界が来ます。
Deep Learningなどが最たる例で、今必死になって線形代数をやっているのはその為です。
英語と同じで、いつかは文法をちゃんとやらないといけない日が来るんですね。
なので、クラスとインスタンスというオブジェクト指向の核となる部分は諸先輩方の素晴らしい解説を基に理解する方が100%正しいです。
しかしそんな事を言っていたら私が記事を書く意味が全く無いという残念な事実を認め、泣きながらnoteから脱会する事になってしまいます。
それじゃああんまりだってんで、私がクラスの勉強をしていた時に読んだ記事の中にあったわかり易い例を挙げ、ソレらしくしてみますね。
クラスとは自動販売機の設計図であり、インスタンスは自動販売機そのもので、オブジェクトとして扱う。
メソッドとは、実際にお金を入れるだとか、ボタンを押す、飲み物が出るなどの行為。
プロパティとは、現在の自動販売機内の在庫や飲み物の販売価格。
ここで具体的な記述にまで言及すると100%散らかるので、ますはクラスからという方はこれらを頭に入れておけば読み進められると思います。
あくまでメインは継承についてです。
VB.NETに限らずインスタンスをオブジェクトとして書いていくのが他の言語も共通しているのかは、VB.NETとPythonしか知らないのでわかりませんが、Pythonでもクラスとインスタンスについての考え方は一緒でしたね。
※今回は単にJVLinkを扱うので、ExcelVBAでもPythonでもなくVisual Studio2022のVB.NETでやらせていただきます。
C#も知らないのですか、恐らく生成AIに言えば書き直してくれるとは思います。
簡単の為、クラスについては今回の継承学習記事内では三つの使い方だけにしたいと思います。
1 クラスモジュール
2 JVDTLabLibで用意されているメソッドを使用するためのクラス
3 継承学習用に作る事になる自作のクラス
まずはVB.NETで真っ先に出てくるのがモジュールですね。
これは、手続き型の簡素な記述に向いています。
そのモジュール内ではオブジェクトのインスタンスは一つだけという制限があり、複雑な記述はできないです。
次にクラスモジュールです。
これは以下のsubプロシージャ内において、クラスとインスタンスを呼び出せる形で書いていきますよという宣言みたいなものでしょうか。
つまり、この定義自体に深い意味は無いと思っていますが、クラスモジュールにして書く事により、必要に応じて複数のインスタンスを作成可能で、各インスタンスが独立したデータを持てます。
インスタンスが共有されないため、個別のデータ管理や処理ができます。
つまり、同じクラスから作られた異なるインスタンスが互いに独立して共存し、独自の振る舞いをさせられます。←私はこれをポリモーフィズムなんだと理解しています
どちらを使うか?
簡単にいえば、シンプルな手続き型の処理ならモジュール、オブジェクト指向が求められる場合はクラスモジュールが適しています。
私はだいたいというか、いつも.NETフレームワークのフォームアプリでモノを作るので、そちらから新規で立ち上げてコードを書くときには、デフォルトでForm1クラスのクラス宣言が自動で入るので、何も考えずそのまま書き始めています。
わざわざ簡単なコードだからモジュールでいいやとか、実際クラスを使うも使わないも気にせずクラス内で書いています。
相変わらず無駄が多く長くなったので今日はこのあたりで。