<?xml version='1.0' encoding='Shift_JIS' ?>
<doc xml:lang='ja'>
	<head>
		<title>RelationとChannel</title>
	</head>
	<body>
		<p>
			基礎モデルでは、あるエージェントが他のエージェントを知っているという状態をRelation（関係）によって表現します。これによって，友人関係や家族関係，雇用関係，行きつけの店などの関係を表現することができます。実際のコミュニケーションの際には，このRelationに基づいて開設されるコミュニケーション・パスをChannel（経路）として表し、このChannelを通じて商品や会話内容，貨幣などのGoodsをやり取りします。基礎モデルではRelationは２つのAgentを、方向を含めて接続するオブジェクトとして定義します。</p>
		<p>
			Relationに基づいて開設されるコミュニケーション・パスはChannel（経路）として定義しています。エージェントはこのChannelを通じて商品や会話内容，貨幣などのGoodsの送信・受信を行います。しかし、Channelは、Agent間を接続するものではなく、Behavior間を接続するものです。同じAgentに配置された別のBehaviorのやり取りはChannelを用いて行われます。</p>
		<p>
			このようにエージェント間のコミュニケーションにおいても、エージェント内部の行動の連携においても、Behavior同士のやり取りはすべてChannelを通じたGoodsの取引として抽象化されます。このような抽象化により，モデルにおける統一性を保つだけでなく、Behaviorのモデル部品やプログラム部品の独立性を高めることにもつながっています。</p>
		<p>これらのポリシーに基づくRelation及びChannelのクラス図は以下のとおりです。</p>
		<figure id="fig:lastyear1" src="image/relation"
			title="Relation及びChannelクラス図" />
		<subsection title="Channelの開設と閉鎖">
			<p>
				Channelの作成（経路の開設）はRelationのopenChannel()メソッドを呼び出すことによって行われます。openChannel()はBehaviorTypeを引数にとります。経路開設では、Relationの先のAgentのBehaviorの中からBehaviorTypeに該当するBehaviorを探し、そのBehaviorと経路を開設します。開設した経路(Channelクラス)はopenChannel()の返り値として返されます(ただし、この部分の多くはBehaviorの持つメソッドで隠蔽されているのでRelationのopenChannel（）メソッドを呼び出す必要はありません)。</p>
			<p>
				また、Channelの持つパラメーターとしてkeepパラメーターがあります。これは財送信後そのChannelが継続して存在するかを設定するものです。falseにしていると、財送信・受信処理が完了するとChannelは自動的にcloseが呼ばれます。trueにしていると、財送信・受信処理後もChannelオブジェクトは存続し、Behaviorから取得することができます。</p>
		</subsection>
	</body>
</doc>
