クラスモジュールを使うタイミング

解決


てつ  2002-08-31 02:12:32  No: 76039

みなさんのクラスモジュールを使うタイミングを教えてください。
最近クラスの使い方を覚えたのですが、標準モジュールとクラスの
使い分けが微妙です。
どういった場合にクラスにしようと思うのでしょうか。


Say  2002-08-31 03:36:00  No: 76040

本来、ある一連のデータの集まりと、それを操作,管理する
一連の関数をくくって、1つのクラスにします。
例えば、個人情報があります。
ID番号、住所、氏名、生年月日のデータから構成されてます。
これをPrivateなユーザ定義型で定義します。
各項目に読み書きする関数を作ります。これがプロパティです。
生年月日から年齢を計算する関数を作ります。これがメソッドです。

クラスというのは閉架式図書館のようなもので、
ユーザは図書(データ変数)を直接出し入れすることはできず、
司書(プロパティ=関数)を通じて出し入れします。
このようにすれば、図書を間違った棚に戻したり、
破損した図書を戻したりする行為を防げます。
(住所に存在しない県名をいれたり、
生年月日に未来や、はるか昔の日付をいれようとするのを
プロパティ関数でチェックして、防ぐことができます。)

本来クラスはこのようにデータ主体であるべきですが、
(オブジェクト指向とはそういうことです。)
実際には、関連する関数の集まりとして使われることが
多いようです。
「算術関数クラス」とか、「データベース操作クラス」などです。
ものによってはメソッドのみで構成されている場合もあるでしょう。

クラスにする目安は「再利用性」と「独立性」です。
1度しか使わない関数をクラス化するメリットはあまりありませんし、
特定のFormに依存したり、外部のパブリック変数を参照したり
していたのではクラスの価値がありません。
かといって、クラス化していけないわけではありませんので、
最終的には個人の判断の問題です。

ただ、クラスモジュールの真骨頂は、
クラスモジュールをActiveX DLL または ActiveX EXE として
コンパイルしておけば、ほかのプロジェクトから
参照設定、またはCreateObjectしてSetするだけで
手軽に使えるようになる、ということです。
便利なクラスを作れば作るほど、その後の開発が楽になります。

「とりあえずなんでもかんでもクラス化する。
どうしてもクラスにならないものは
しかたがないから標準モジュールに記述する」でもいいとおもいます。

そのうち自分のスタイルがかたまってくるでしょう。

==================================================================

参考:円の面積DLLの作成

VBを起動しActiveX DLLを選択。
プロジェクト名  prjEn_Mensekki
クラス名        clsEn_Menseki
コード
Option Explicit

Public Function En_Menseki(ByVal hankei As Double) As Double
    En_Menseki = hankei * hankei * 3.14159265358979
End Function

セーブした後、ファイル→prjEn_Mensekkiの作成  でコンパイルして終了。

----------------------------------------------------

円の面積DLLの利用

VBを起動し標準Exeを選択。
プロジェクト名  Project1
フォーム名      Form1
コマンドボタン  Command1

プロジェクト→参照設定から  prjEn_Mensekki  にチェック

コード
Option Explicit

Private Sub Command1_Click()
    Dim objEn_Menseki As New prjEn_Mensekki.clsEn_Menseki
    MsgBox objEn_Menseki.En_Menseki(10#)
End Sub

このように、一度コンパイルしてしまえば、
標準のライブラリと同じように使えるようになります。


てつ  2002-09-01 00:50:34  No: 76041

丁寧な説明有り難う御座います。
Sayさんの教えを元に、
これからバリバリクラスを使っていきたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加