graph -- frame -- axis | |-- data | |-- parts | |-- usrconst | |-- usrfnc | |-- buffer |-- init各オブジェクトの意味を以下に示します。
graph -- frame[0] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- usrconst | |-- usrfnc | |-- buffer |-- init新たなインスタンスを生成するには、"new"コマンドを用います。例えば、frameオブジェクトの新たなインスタンスをつくるためには、
$graph->new('frame');とします。frameオブジェクトはgraphオブジェクトの子であるため、親であるgraphオブジェクトのメソッド"new"を用いるわけです。このスクリプトの実行により、新たにframeオブジェクトのインスタンスが生成され、インスタンス階層図は以下のようになります。
graph -- frame[0] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- usrconst | |-- usrfnc |-- frame[1] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- usrconst | |-- usrfnc | |-- buffer |-- initgraph、buffer及びinitオブジェクトのインスタンスはただ1つしか存在せず、プログラム起動時に生成されていることに注意してください。また、usrconst及びusrfuncはframeオブジェクトごとに自動的に生成されます。
さて、frameオブジェクトの2番目のインスタンスframe[1]にdataオブジェクトの新たなインスタンスをつくるためには、以下のようにします。
$graph->frame[1]->new('data');これにより階層図は以下のように変化します。
graph -- frame[0] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- usrconst | |-- usrfnc |-- frame[1] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- data[0] | |-- usrconst | |-- usrfnc | |-- buffer |-- initframeオブジェクトの2番目のインスタンスframe[1]にpartsオブジェクトの新たなインスタンスをつくるためには、dataオブジェクトの場合と同様ですが、partsオブジェクトには種類があるため、"new"コマンドには2つの引数が必要です。
$graph->frame[1]->new('parts', 'text');'text'属性を持ったpartsオブジェクトのインスタンスが追加され、階層図は以下のように変化します。
graph -- frame[0] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- usrconst | |-- usrfnc |-- frame[1] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- data[0] | |-- parts[0] | |-- usrconst | |-- usrfnc | |-- buffer |-- initインスタンスを削除するためには、"delete"コマンドを用います。上の階層図で、frame[1]のparts[0]を削除するためには、以下のようにします。
$graph->frame[1]->delete('parts', 0);deleteの第2引数は、第1引数である'parts'オブジェクトの1番目のインスタンスであることを示しています。このようなインスタンスにふられた番号のことを配列id(array index: aid)と呼びます。aidは、0番目から始まることに注意しましょう。
aidと混同しやすい番号にインスタンスid(instance index: iid)があります。aidは配列中にインスタンスが格納された順番に0から振られた番号であり、インスタンスの格納順を入れ替えればそのインスタンスのaidは変ってしまいます。 一方、iidはインスタンスの生成された順に0から振られ、各インスタンスがこの番号を保持しているため、格納順を入れ替えてもそのインスタンスのiidは変りません。例えば、dataオブジェクトのiidは、
$graph->frame[0]->data[0]->idで参照できます。
さて、frame[1]のdata[0]を削除するためには、'parts'の場合と同様、
$graph->frame[1]->delete('data', 0);とすることができます。この段階での階層図は以下のようになります。
graph -- frame[0] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- usrconst | |-- usrfnc |-- frame[1] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- parts[0] | |-- usrconst | |-- usrfnc | |-- buffer |-- initさてここで、以下のようにframe[1]を削除してみましょう。
$graph->delete('frame', 1);階層図は以下のようになります。
graph -- frame[0] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- usrconst | |-- usrfnc |-- buffer |-- initframeオブジェクトのインスタンスを削除すると、その子オブジェクトも同時に削除されることに注意してください。
deleteコマンドのaidには、以下のような特殊変数を用いることが可能です。
$_ALL インスタンス全て $_SEL 選択状態にあるインスタンス全て
graph -- frame[0] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- data[0] | |-- data[1] | |-- parts[0] | |-- parts[1] | |-- parts[2] | |-- usrconst | |-- usrfnc | |-- frame[1] -- axis[0] | |-- axis[1] | |-- axis[2] | |-- axis[3] | |-- data[0] | |-- parts[0] | |-- parts[1] <------ this instance | |-- usrconst | |-- usrfnc | |-- buffer |-- init各オブジェクトは、C++におけるオブジェクトのように、メンバとメソッドを持っています。どのようなメンバとメソッドがあるかは、reference部を参照してください。ここでは、各インスタンスのメンバやメソッドにアクセスする方法について述べます。 矢印で示したpartsオブジェクトのインスタンスのもつメンバ"text"を"Mozart"に設定するには以下のように記述します。
$graph->frame[1]->parts[1]->text = 'Mozart';の様に記述します。またこのメンバの値を得るには、
$name = $graph->frame[1]->parts[1]->text;のように記述します。グラフオブジェクトはヒエラルキーを持ちますが、演算子"->"を用いてこのヒエラルキーに応じた記述方法をとることでインスタンスのメンバーへのアクセスが実現できます。ここで注意しなければならないのは、演算子"->"はポインタではないことです。Topazスクリプトにはもともとポインタは存在しないことをももう一度思い起こして下さい。演算子"->"はオブジェクト階層を示すためだけのものと考えて下さい。従って、
$name = $graph->frame[1]->parts[1];の様な記述をしてもpartsオブジェクトのアドレスが得られるわけではありませんし、実行時エラーになります。
$graph->frame[1]->parts[1]->flushnodes();のように記述します。
$a = $graph->frame[1]->length('data'); @a = @graph->frame[1]->getallusrconst();getallusrconst()関数は配列を返すため、配列変数@aで結果を受けています。 またこの場合、$graph->...ではなく、@graph->...で始まっていることに注意してください。