UML構造図
先週のUMLの全体像の話に続いて、UMLの中の構造図を中心に説明を行う。
- クラス図
- オブジェクト図
- コンポーネント図
- パッケージ図
- 配置図
いかのサイトが、必要最小限かつ細かい表現方法が記載されていて便利。 (具体例は他のサイトを参照したほうがいい…)
クラス図とオブジェクト図
四角の枠の中に、クラス名、属性、メソッドを記載。 属性・メソッドの前には、可視性の+:public,-:private,#:protectedの記号を書く。 クラス間に何らかのつながりがあれば、関連ということで直線で結ぶ。 線上には、役割や多重度(例:1..*)を記載。
関連で、包含関係にあるものは集約(あるいは単に包含)と呼ばれ、 ◇ーの矢印で接続する。集約の中で特にライフサイクル依存が強いものは、 コンポジションと呼ばれ、一般的に"has-a"関係となる。 この場合は、[本体] ◆ー [パーツ]の矢印で接続する。 C++あたりであれば、大抵の場合は、集約ならポインタで実装され、コンポジションなら実体で実装されるだろう。
class Tire { | class Engine { : | : } ; | } ; -----------------+---------+------------------- class Car { // Composition | class Car { private: | private: Tire wheel[ 4 ] ; | Tire* wheel[ 4 ] ; Engine engine ; | Engine* engine ; } ; | } ;
汎化や派生(継承)といった関係の例えば、"Person is-a Animal" といった関係は、 派生クラスから親クラスへの△矢印で接続を行う。
オブジェクト図は、クラス図を具体的な実例で書く。クラス名には下線を書く。
コンポーネント図、パッケージ図
コンポーネント図は、物理的な構成要素からシステム構造を記述する。 大きなプロジェクトの全体像を広い視点で見渡すような場合に有効。 他のコンポーネントとのインタフェースを、ロリポップで表現。
[コンポーネント]—(◯—[コンポーネント]—(◯—[…]
パッケージ図は、パッケージ同士の依存関係を論理的なグルーピングで表現。 1つのパッケージは、フォルダの図で表現し、そのパッケージ間の依存関係を、 破線の矢印で結ぶ。
配置図
具体的なデバイスや実行環境を、立方体の絵で表現。 各デバイス間の関係を直線で接続して表す。