前回の授業の締めで説明をしていたUMLについて、 本格的に説明を行う。
UMLは、OOD(オブジェクト指向デザイン)などからOML(オブジェクトモデリング言語)などを経て、UMLへと変化していった。 UMLでは、大きく分けると構造図・振る舞い図に分類され、 それぞれについて、さらに具体的な図の書き方が決められている。
- 構造図
- クラス図とオブジェクト図
- コンポーネント図
- 配置図
- パッケージ図
- 振る舞い図
- ユースケース図
- アクティビティ図
- ステートチャート図(状態遷移図)
- 相互作用図
- シーケンス図
- コミュニケーション図
クラス図とオブジェクト図
クラス図は、クラスの中身と他のクラス間の関係を記述するための図。
1つのクラスは、上段にクラス名・中段に要素・下段にメソッドを記載する。 各要素・メソッドの前には、限定子として("-":private,"+":public,"#":protected)などを 記載する。
コンポジションと集約
クラスと他のクラスの間の関連は直線で表し、多重度やその役割を書き添える。 継承は白抜き△矢印で表現し、そのクラスの基底クラスに向かって矢印を描く。 関連においてオブジェクトの寿命が同じ(クラスの要素に別要素が包含される)場合は、 コンポジション(合成)と呼ばれ、黒塗り◆で矢印を描く。 寿命などが別であり、ポインタで結合されるような関係は集約と呼ばれ、 白抜き◇で矢印を描く。
class Engine { // エンジン } ; class Tire { // タイヤ } ; class Car { Engine engine ; // コンポジション Tire* wheel[ 4 ] ; // 集約 } ;
is-a,has-a
クラス構造で派生で表現できるような関係 例えば、基底クラス:どうぶつ、から派生した哺乳類とか鳥といったクラスを 考えると、"哺乳類はどうぶつである"という言い方が可能であり、これを"is-a"の関係と呼ぶ。 一方、"哺乳類は足を持っている"という言い方ができる場合は、"has-a"の関係と呼ばれ、 "足"というクラスを、集約なりコンポジションで実装することになる。
class Animal { // どうぶつ } ; class Mammalia : Animal { // is-a 関係,派生で実装 // 哺乳類 } ;