3章 クラス、関連

クラスとは
インスタンスとは
関連
多重度とは 役割(ロール名)とは
限定
集約とは

クラスとは

光栄の3国志ゲームで,コンピュータ君主を参考に考える。
人物クラスをもとに主君クラスと部将クラスは派生している。
人物クラスは主君クラスと部将クラスの共通祖先である。
主君クラスと部将クラスは祖先の人物クラスの性質を備えている。継承している。
例えば主君クラスは自分に命令を与え,それを実行することが出来る。命令を実行するメソッドを祖先の人物クラスから継承しているからである。
 
属性はクラスが所有する物,データである。
操作はクラスが有する処理である。
クラス名 人物
親クラス なし
属性 名前,年齢,顔、性格(義理固さ)

健康状態(健康、病気,生前,存命,死亡)

能力,

武器アイテム

立場(君主、在野部将,部下、捕虜)

労働状態(ヒマ,業務中、業務終了,侵略状態,防衛状態)

操作
生まれる、死ぬ。
与えられた行政命令を行う。
人物に対して:一騎打ちをする、しゃべる。
 
軍団に対して:軍団を率いる、命令する,訓練する
都市に対して:徴兵する、行政を行う。

 

クラス名 君主
親クラス 人物
拡張属性 所有する都市
拡張操作 .部将に対して、命令を与える

部将に対して、褒美を与える,アイテムを取り上げる

相手君主に降伏勧告をする

相手君主からの降伏勧告を受理、断る

 

 


インスタンスとは

インスタンスとはクラスの実体である。
君主クラスのインスタンスが例えば リュウビ,ソウソウ,ソンケン である。
部将クラスのインスタンスが,カンウ,チョウヒなどである。
兵士団クラスのインスタンスがリュウビ配下軍、カンウ配下軍である。
 

関連

君主クラスから部将クラスへの関連
リンク名
雇用(する)
リンク属性
部下リスト(部将名、忠誠心,官位)
リンク操作
部下リストの拡張、削除
 

人物クラスから都市クラスへの関連
リンク名
所在(する)
リンク属性
住所録
リンク操作
住所録の修正
 

人物クラスから兵士団クラスへの関連
リンク名
統率(する)
リンク属性
 なし
リンク操作
統率人物の能力次第で兵士団の攻撃力を増減させる
この例をみると,兵士団と指揮部将との関連は一方的に統率するだけである。すなわち兵士団の方から部将を裏切って殺害することは無い、というシステム設計になっている。

 

君主クラスから君主クラスへの関連
リンク名
敵対,同盟関係
リンク属性
敵対同盟相手のリスト(敵対,同盟状態、敵対心)
リンク操作
敵対同盟リストの修正
 

都市クラスから都市クラスへの関連
リンク名
隣接関係
リンク属性
隣接地形(水路、陸路、山道,関所,道中の戦場)
リンク操作
なし
 

君主クラスから都市クラスへの関連
リンク名
支配(する)
リンク属性
領地リスト(都、属領,空地,敵地)
リンク操作
領地リストの修正
 

ポインタや他のオブジェクトへの参照を属性値としてオブジェクトの中に入れ込むべきではない。


多重度とは 役割(ロール名)とは

インスタンス同士の関連が1対1,1対多といったことを意味する。
君主と部将は,雇用という1対多の関連がある。
君主にとって雇用した部将は「部下」という役割であり、
部将にとって君主は主君という役割である。
主君の下に複数の部下がいるが、部下の上に主君は一人である。
 
君主と都市は,支配という1対多の関連がある。
君主にとって支配した都市は「領地」という役割であり、
都市にとって君主は支配者という役割である。
主君の下に複数の領地があるが、都市の上に支配者は一人である。

限定
ほとんどの多重関連は限定を用いることで1対1の関連に置換でき,問題を単純化出来る。
 
君主(役割:主君)と部将(役割:部下)は,雇用という1対多の関連がある。
しかし雇用した部下の名前のリスト帳を君主が持っているならば、そのリストの上では 部下名と部下部将は1対1の関連がある。
君主と部下リスト間には「所有」という1対1の関連があり、リスト上の部下名と部下の間には「雇用登録」という1対1の関連がある。
 
よって君主と部将間の「雇用」という1対多の関連は,君主、部下リスト、部将間の「所有」,「雇用登録」という1対1の関連に置き換えることが出来る。
つまり,部下リストというオブジェクトをこのシステムに拡張したほうがよい、ということがわかる。

集約とは

部分と全体の関係(XX is a part of YY)を表す。
軍団は軍団長,部隊、軍資金から成る。部隊の中の1つは兵糧を預かる兵糧部隊となる。
部隊は統率者と兵士団から成る。
 
軍団クラス {
軍団長 1つ(部隊統率者の中の一人が成る)
軍資金クラス 1つ
部隊クラス 1つ以上複数
}
 
部隊クラス{
統率者クラス 1つ
兵士団クラス 1つ