• ベストアンサー

モジュールとクラスの違いってなんなんですか?

モジュールとクラスの違いってなんなんですか? 本などをみてもいまいち分かりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

端的かつ正確に言うと、クラスはオブジェクトで、標準モジュール(質問内でモジュールと呼んでいるのは標準モジュールのことだと思いますが)はオブジェクトではありません。 (もし、質問内でモジュールと呼んでいるのが、本当にモジュールという意味で言っているのであれば、クラスはクラスモジュールですし、フォームはフォームモジュールです。クラスはモジュールの一種です、という答えです) 使用方法で言うと、クラスはインスタンス作成時、破棄時にそれぞれイベントが発生するため、変数等の初期化や終了処理などをオブジェクト内で自動化できます。 オブジェクト内で自動化されるため、初期化手続き、参照の開放などクラスを使用する際には内部の動作を意識することなく使用することができます。 つまり、再利用性が高いと言いかえることができます。 また、VB5/6ではAddressOf演算子が標準モジュール内の関数以外には使用できないという制限があるが、それを使用しない前提では、標準モジュールで実現できることはクラスで書きかえることができます。 逆に、クラスではできる事でも、標準モジュールではできないことは山のようにあります。 #1さんが書いたように、複数のインスタンスを作成することもそうですが、当方の利用方法では、コレクションに追加できるという点を挙げたいと思います。他には、自己再起定義(造語)です。ClassA内でClassAオブジェクトを作成するような動作です。ClassA内でClassAを定義した場合、中に作成されたClassAの中にさらにClassAが定義可能で、さらにその内部にClassAが、さらにその内部に・・・と、スタックの許す限り無限に定義されます。 ポリモーフィズム、関数の引数や返り値にクラスを渡すなど、いろいろと標準モジュールには不可能な点が多くあります。

lucky_123
質問者

お礼

皆様 ご回答・アドバイス等ありがとうございます。

その他の回答 (1)

noname#7749
noname#7749
回答No.1

標準モジュールもクラスの1種ですが、任意のタイミングでインスタンスの生成/破棄ができない点、複数のインスタンスを生成できない ( = 常に一つしか存在しないことが保障されている) 点が異なります。 つまり、標準モジュールはデザインパターンで言うところのシングルトンに相当する機能を提供するものと言えます。 詳細はこちら↓を熟読するとよいでしょう。 http://homepage1.nifty.com/CavalierLab/lab/vb/clsmdl/ やや古い (1998~99年頃?) 内容ですが、参考になるはと思います。 # この記事を書いた当時、執筆者は高校生ぐらい?だったはず。 # 現在はどうされているのでしょうか......?

参考URL:
http://homepage1.nifty.com/CavalierLab/lab/vb/clsmdl/

関連するQ&A