【チュートリアル】 - 分析編

bn_clss_kan

3. モデル・図の作成
3.4 クラス図(class diagram)
jun 次は、これらのクラス間の関係について考えることにしよう。分析段階では、関連集約という2つの関係を使用するんだよ。関連は、クラスとクラスの間の双方向の意味的な接続を表す関係のことで、ただの線分で表すんだ。集約も関連の一種なんだが、一方のクラスともう一方のクラスが「全体−部分」を表す関係になっているんだよ。例えば、「注文商品」と「注文」との間に関連があるのは分かると思うが、「注文商品」は「注文」の情報の一部だと考えると、集約になるよね?
chen 表記法も違うんですよね?
jun そうだよ。集約の場合は、関連の全体を表す方のクラスに白抜きの菱形を付けるんだよ。
chen 関連に名前を付けることはできるのですか?
jun 関連の意味を明らかにするために、関連名を付けることができるよ。あるいは、関連名の代わりにロールを定義することもできるんだ。ロールは、一方のクラスから見たもう一方のクラスの目的や立場を示すもので、関連の一方または両方の端にロールの名前を付けて表すんだよ。そして、関連を引くときには、分かる範囲で多重度を決定しよう。
chen 多重度とは何ですか?
jun 多重度とはクラス間のインスタンスの数の対応関係を表すもので、一方のクラスのインスタンスが、もう一方のクラスのいくつのインスタンスと関係するかを示すんだ。例えば、1回の注文に対しては、複数の注文商品が存在するよね?図3.4.3の左の図はそれを具体的なオブジェクトで表したものだよ。オブジェクトは、オブジェクト名の下に下線を引くことでクラスと区別していることを覚えておこう。クラス図では、図3.4.3の右の図のように表すんだよ。
図3.4.3 多重度について
wd_08
chen なるほど。右の図では、「注文」クラスと「注文商品」の多重度が「1」対「1以上」ということを表しているのですね?また、「注文」を全体とすると、ひとつひとつの「注文商品」は部分と考えることができるので、集約の関係になるのですね?
jun そうだよ。それに、多重度を決定するときに、モデル化される問題や仕様について明らかになることもあるから、多重度を記述しておくことは大切なんだよ。では、クラス間の関係を考えながらクラス図を作成してみよう。

27_TIT_3

図3.4.4 Chen君が作成したクラス図(その1):クラス間の関係を表示した図
class1
chen
このようにクラス間に関連を引いてみましたがどうでしょうか?関連の意味を分かりやすくするために、分かる範囲でロール名も入れています。「配送センター」は指定配送センターの役割を持つ場合と別の配送センターの役割を持つ場合があるので、「配送」クラスから「配送センター」を見た場合には役割に応じて2種類の関連があると思いました。ですから、「配送センター」に対してそれぞれ「配送先」、「配送元」というロール名を付けました。
jun ロール名や関連名は必須ではないので、このように必要な部分に書いておけばいいだろう。では、多重度についてはどうなっているのかな?
chen 注文商品によって配送票が必要な場合と必要じゃない場合があるので、「注文商品」に対する「配送」の多重度は「0または1」にしました。一方、1枚の配送票が受け持つ商品は複数あり得るので、「配送」に対する「注文商品」の多重度は、「1以上」にしました。また、「配送」と「配送センター」の間の2本の関連については、ひとつの配送情報につき「配送先」と「配送元」はひとつに決まるので、「配送センター」側の多重度を「1」としました。
Prev. Next Home Top