wetchのブログ

他人に見られることを想定していない書き散らかし独習ノート.物理学とかVBAとか.

物理量クラス考え中...

エクセルvbaのクラスモジュール勉強中。で悩み中。

作りたいのは前も言ってた物理量クラス。

  • privateなフィールド変数として、数値と物理次元(質量、長さ、時間それぞれの何乗かを表す整数)を持っている。
  • 数値と次元をできるだけひとまとめに扱い、個別に扱うようなのは避けたい。つまり数値や次元は標準モジュールから直接読み書きしたくない。
  • 標準モジュール内で物理量をsetするには、通常の実数を無次元物理量に変換(キャスト?)するCPhysical関数と、1単位を表す定数を使う。例えばxに長さ10 mをsetするには、 1 mを表す定数METERを使って
set x=CPhysical(10).times(METER) 

 というふうにする。このことにより、通常のproperty setは作らない。

  • public property getも作りたくない。少なくとも標準モジュールでは使えないようにしたいからpublicにはできない。

以上の制約のもとで、2つの物理量の次元が一致するのかをチェックする isSameDimension 関数を作りたい。xとyを比較するのに x.isSameDimension(y) というふうに呼び出すとして、物理量クラスモジュール内で

public function isSameDimension(y as 物理量) as boolean
    isSameDimension = (質量=y.質量) and (長さ=y.長さ) and (時間=y.時間)
end function

としたいけれど、こうは書けない。これではyのフィールド変数が得られない。

標準モジュールからは見えないけど同じクラスの別インスタンスからは見える、なんて都合のいいものはないのか。
独学がつらくなってきた今日この頃。




追記:
ん? ここにヒントがある?
thom.hateblo.jp