3章 CommonMPの要素モデルを作成する
3.3 要素モデル スタブを作成する(その2)
public override McCalModel
CreateCalModel(HySObjectKind
csModelKind) if
(csModelKind.Equals(MyExerciseModelDefine.MY_DYNAMIC_MODEL_KIND) ==
true) |
(補足) 「演算データクラス」の必要性
CommonMPでは、計算中にそれを一時中断し、その情報をファイルに保存しておき、別な時にそれを読み出し、計算を再開して継続する機能があります。 この機能をを実現する為には、要素モデル内のメンバー変数の内容を全てファイルに書き出したり、ファイルに保存された情報を読みだして要素モデル内部のメンバー変数に展開しなければなりません。 要素モデルのメンバー変数の個数や種類はモデルによって異なるため、CommonMPフレームワークから、一般的な方法で実現することができません。 (要素モデル作成者が自クラスに、ファイル書き出し、読み出しのメソッドを実装する必要があります)
しかしながら、要素モデルが使用する全てのメンバー変数を演算データクラスに纏めてしまうと、CommonMPフレームワーク側で演算データクラスに対して ファイル入出力処理を実装するだけで、要素モデル側はファイル入出力に関わる全ての処理を意識する必要が無くなります。
このため、要素モデルクラスは 全ての計算情報を 演算データクラスの中に入れておく必要があります。(但し、独自のメンバー変数を作成しても、ファイル保存/復元が出来ないだけで、計算処理自体には影響しません。)
このメソッド内では、引数で与えられたモデルの種別に対応する複数の演算データを作成する事が可能です。
引数の要素モデル種別は、MyExerciseModelDefineで定義された値が与えられます。(詳しくは
GetCalModelInfoListメソッドで説明)
以下の様にコーディングします。
public override McCalInfo
CreateCalInfo(HySObjectKind
csModelKind) if
(csModelKind.Equals(MyExerciseModelDefine.MY_DYNAMIC_MODEL_KIND) ==
true) |
public override
McCellModelPropertyIF CreateModelProperty(HySID csLibraryID, HySObjectKind
csModelKind) if
(csModelKind.Equals(MyExerciseModelDefine.MY_DYNAMIC_MODEL_KIND) ==
true)
csRtnCellPrptyDt.SetStepTime(60); // δT設定
60秒 |
public override
McPropertyInfoRoot CreateModelInitialInfo(HySID csLibraryID, HySObjectKind
csModelKind) McInitialInfo csRtnDt = null; if
(csModelKind.Equals(MyExerciseModelDefine.MY_DYNAMIC_MODEL_KIND) ==
true) |
public override
HySDataLinkedList
GetCalModelInfoList()
csModelInfo = new
McModelInfo(
m_csCalModelInforList.AddLast(csModelInfo); //
演算モデル情報の追加 |
”リスト”について
表示するモデル情報は McModelInfo クラスで管理し、”リスト”という形で提供します。 FORTRANでは 複数のデータは配列で取り扱うことが多いですが、CommonMPでは ”リスト” という形式で扱う事が多くあります。 リスト形式で扱うと データを任意の位置に挿入したり取り外したりすることが可能です。また、管理するデータの数も可変です。
(雑談)
C#が提供するリスト構造を扱うクラスが有りますが、2章でも言及したように、当初 C++への移行の可能性もあったので、CommonMPは独自のリストクラス(HySDataLinkedList)を持っています。 (CommonMPのリストクラスは [Serializable]可能です。[Serializable])については、いずれ説明します。)
初版:2013/06/15 |