ここまでで我々は複数のSwarmと実験装置を獲得しました。次は、アプリケーションの内側にあるオブジェクト自体の使用方法を学習しましょう。ここでは、Heatbugアプリケーションから抜き出した例題をいくつか紹介します。オブジェクトの使用方法を理解するには、これらの例題アプリケーションやライブラリのコードを解読しなければなりません。
シミュレーションの鍵となるコンポーネントはmodel Swarmです。以下のコードは、HeatbugModelSwarm.hから抜粋したHeatbugModelSwarmの定義文です。
@interface HeatbugModelSwarm : Swarm { int numBugs; // シミュレーションパラメータ double evaporationRate; double diffuseConstant; int worldXSize, worldYSize; int minIdealTemp, maxIdealTemp; int minOutputHeat, maxOutputHeat; double randomMoveProbability; id modelActions; // スケジューリングデータ構造 id modelSchedule; id heatbugList; // 世界を表すすべての Grid2d * world; // heatbugオブジェクト HeatSpace * heat; // をリスト。 } -getHeatbugList; // model swarmへのメソッドにアクセス。 -(Grid2d *) getWorld; // これらのメソッドにより、 -(HeatSpace *) getHeat; // model swarmを観測できる。 +createBegin: aZone; // Swarmに追加メソッドを -createEnd; // 提供する。 -buildObjects; -buildActions; -activateIn: swarmContext; |
コードの最初のセクションで、HeatbugModelSwarmはSwarmの一種であると宣言しています。HeatbugModelSwarmは総称Swarmから多くの振る舞いを継承する一方で、新しい変数やメソッドも追加します。
新しい変数はHeatbugModelSwarmの定義の中では中括弧でくくられており、シミュレーションパラメータ、スケジュールデータ構造、世界のオブジェクト群という3つの一般クラスに分かれます。これが代表的なmodel swarm一式です。
最後に、HeatbugModelSwarmは新しいメソッドを定義します。最初のいくつかのメソッドはモデルを観測できるようにするもので、たとえばHeatbugModelSwarmはHeatbugのリスト、あるいはそのHeatSpaceを提供します。観測者はこれらのメソッドを使ってモデルをモニターするわけです。
観測メソッドに加え、Swarmを構築するためのSwarm特有のメソッドがいくつかあります。これらはかなり型にはまったものです。createBeginとcreateEndメッセージは、Swarmオブジェクト自体を作成するのに使われ、buildObjectsはモデルのオブジェクトを、buildActionsはモデルのスケジュールを構築します(詳細は後述します)。最後にactivateInが、Swarm自体を実行する実行装置を準備します。