オブジェクト

\includegraphics[width=.5\hsize ]{fig/utclass.eps}
Fig.  : Object class hierarchy

ほとんどすべてのSpringheadオブジェクトはObjectクラスから派生します. オブジェクトは複数の子オブジェクトを持つことができます. Springheadのデータ構造はオブジェクトが成すツリー構造によって出来上がっています. FoundationモジュールにおけるObjectからのクラス階層をFig. #.#.#に示します.

まずObjectクラスの子オブジェクトの作成・管理に関係する関数を紹介します.

ObjectIf

size_t NChildObject()

子オブジェクトの数を取得する.

ObjectIf* GetChildObject(size_t pos)

pos番目の子オブジェクトを取得する.

bool AddChildObject(ObjectIf* o)

オブジェクトoを子オブジェクトとして追加する. 正しく追加されたらtrue,それ以外はfalseを返す.

bool DelChildObject(ObjectIf* o)

オブジェクトoを子オブジェクトから削除する. 正しく削除されたらtrue,それ以外はfalseを返す.

void Clear();

クリアする.

これらの関数は派生クラスによって実装されますので,追加できる子オブジェクトの種類や数などはクラスごとに異なります. また,Springheadを普通に使用する範囲内ではユーザがこれらの関数を直接呼び出す場面はないでしょう.

ストリーム出力のために以下の機能があります.

ObjectIf

void Print(std::ostream& os) const

オブジェクトの内容をストリームosに出力する.

Printは,基本的にはそのオブジェクトの名前を出力し,子オブジェクトのPrintを再帰的に呼び出します. ただし派生クラスによってPrintで出力される内容がカスタマイズされている場合はその限りではありません.

NamedObjectは名前付きオブジェクトです. NamedObjectの派生クラスには名前を文字列で与えることができ,名前からオブジェクトを検索することができます. 名前付きオブジェクトには,直接の親オブジェクト以外に,名前を管理するためのネームマネジャが対応します.

NamedObjectIf

const char* GetName()

名前を取得する.

void SetName(const char* n)

名前を設定する.

NameManagerIf* GetNameManager()

ネームマネジャを取得する.

名前付きオブジェクトからはさらにシーンオブジェクトが派生します. シーンオブジェクトからは周辺モジュールのオブジェクト(PHSolid, GRVisualなど)が派生します.

SceneObjectIf

SceneIf* GetScene()

自身が所属するシーンを取得する.