ホーム » スタッフ » 斉藤徹 » 構造図(UML)

2014年7月
« 6月   8月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  

最近の投稿(電子情報)

アーカイブ

カテゴリー

構造図(UML)

先週のUMLの概要説明の後なので、今回は構造図を説明する。

構造図には、以下の記法がメインであり、基本的にプログラムやシステムの構造を記載する記法。

  • クラス図とオブジェクト図
  • コンポーネント図
  • 配置図
  • パッケージ図

以下の記事は、IT専科のUML入門の要点をまとめたものであり、詳しくは元を参照。

クラス図とオブジェクト図

クラス図は、クラスの中身と他のクラス間の関係を記述するための図。

1つのクラスは、上段にクラス名・中段に要素・下段にメソッドを記載する。 各要素・メソッドの前には、限定子として("-":private,"+":public,"#":protected)などを 記載する。


IT専科から引用

コンポジションと集約

各クラスの間は、その関係により、線の描き方を変える。 線の両端には、多重度を示す数値や記号、線の中央には役割などを必要に応じて記載する。
関連:────
集約:◇───
コンポジション:◆───
依存:←——-
汎化:◁────

クラスと他のクラスの間の関連は直線で表し、多重度やその役割を書き添える。 継承は白抜き△矢印で表現し、そのクラスの基底クラスに向かって矢印を描く。 関連においてオブジェクトの寿命が同じ(クラスの要素に別要素が包含される)場合は、 コンポジション(合成)と呼ばれ、黒塗り◆で矢印を描く。 寿命などが別であり、ポインタで結合されるような関係は集約と呼ばれ、 白抜き◇で矢印を描く。

class Engine {
// エンジン
} ;
class Tire {
// タイヤ
} ;
class Car {
Engine engine ;     // コンポジション
Tire*  wheel[ 4 ] ; // 集約
} ;

is-a,has-a

クラス設計を考えるとき、派生とすべきか、コンポジション(or集約)で実装すべきか 悩む場合も多い。この時の判断の方法では、is-a,has-a関係という言葉が使われる。 基底クラス「どうぶつ」から派生した「哺乳類」は、"哺乳類は動物である"という 言い方ができる。一方で、前コンポジションの説明では、 "Car は、Engine(Tire)を、部品として持つ"という言い方ができる。 このことから、is-a で関係を表現できるか、has-a で表現できるかがカギとなる。

class Animal {
//どうぶつ
} ;
class Mammalia : Animal { // is-a 関係なので派生で実装すべき。
// 哺乳類
} ;

オブジェクト図は、クラス図の理解を助けるために、具体的な値を記載したもの。 クラス図の最上段を下線付きで記載する。

パッケージ図

パッケージ図は、クラス図をパッケージ毎に分類して記載する図。 パッケージの塊を、フォルダのような図で記載する。


IT専科から引用

コンポーネント図とコンポジット構造図

コンポーネント図は、複数のクラスで構成される処理に、 インタフェースを用意し、あたかも1つのクラスのように扱ったもの。 接続するインタフェースを、提供側を◯───で表し、要求側を⊃──で表す。


IT専科から引用

配置図

配置図は、システムのハードウェア構成や通信経路などを表現するための図。 ハードウェアは直方体の絵で表現し、 デバイスの説明は、"≪device≫"などを示し、実行環境には、"≪executionEnvironment≫" などの目印で表現する。


IT専科から引用