オブジェクト指向(関係)
UML
オブジェクト指向とは,ソフトウェアの考え方,とらえ方の一方法である.
1968年第1回NATOソフトウェア工学会議にてソフトウェア危機が叫ばれた.これは,ハードウェアの進化の急速な向上に対して,規模の拡大や機能の増大などによるソフトウェア 開発の問題提起がなされたことである.
そこで様々な施策が提案されてきた.ソフトウェアのとらえ方や分割の仕方などのアイディアが提案されてきた.
例えば,「構造化プログラミング」は,機能を処理を小さなまとまった単位で分割し,階層的な構造をとるように構成する考え方である.これにより,プログラムの構造をとらえやすくする.構造化プログラミングの中で,制御構造として「順次,分岐,反復」のみを用いることを原則としている.
オブジェクト指向プログラミングでは,ソフトウェアをオブジェクトと呼ばれる部品でとらえて構成する考え方である.構造化プログラミングで課題になった,複雑な構造における設計などの弱みを補うものである.ただし,構造化プログラミングをオブジェクト指向で置き換えるものということではない.
構造化プログラミングを表すための技法としてフローチャートやPADなどがある.一方,オブジェクトとしてとらえたときの分析・設計を考えるとき,オブジェクトおよびクラスといった概念や,オブジェクトの関係,振る舞いなどを表現する方法が必要である.その方法として,図を用いた方法が注目され,オブジェクト指向開発での分析,設計を表すための方法としてUMLとしてまとめられこれが広く用いられている.
UMLは,更新されていて2015年7月での最新版はUML 2.5であるが,UML2.0以降では13種類定義されている.
構造図
名称 | 説明 |
クラス図 | クラスの仕様やクラス間関係を定義する |
オブジェクト図 | インスタンスとその関係を定義する |
パッケージ図 | モデルの要素を分類するパッケージを定義する |
コンポジット構造図 | クラスの内部構造を定義する |
コンポーネント図 | コンポーネントを定義する |
配置図 | システムの物理的な構成を定義する |
振る舞い図
名称 | 説明 |
ユースケース図 | システムが提供する機能を定義する |
アクティビティ図 | アクションの実行順序を定義する |
状態マシン図 | 状態と状態遷移を定義する |
シーケンス図 | クラス間の相互作用を時系列に定義する |
コミュニケーション図 | クラス間の相互作用をクラス間の関係に着目して定義する |
相互作用概要図 | 相互作用の実行順序を定義する |
タイミング図 | 相互作用と状態遷移に関する時間制約を定義する |
関係の関係
クラスやオブジェクトでは,互いの「関係」が重要な意味を持つ.関係は,結びつきの強さなどで種類に分けられており,以下の図のように関係付けられている.
関係の表わしかた
関係 Relationship | 表現 | 説明 | Java言語での対応 |
関連 Association | 関連するクラスにメッセージを送ることができる(メソッドを実行する). | 属性の一部として含む.関連するクラスのメソッドを実行できる. | |
集約 Aggregation | 複数のオブジェクトからクラスを構成する. has-a関係を表す.(単独でなり立つ場合.) | 集約されるクラスをフィールドとしてもつ. | |
合成 Composition | 複数のインスタンスからクラスを構成する.has-a関係を表す.(単独で成り立たない場合.) | 合成されるクラスをフィールドとしてもつ. | |
汎化 Generalization | サブクラスを抽象化するスーパークラスに向かう.is-a関係を表す. | 継承(extends)によって,スーパークラスをサブクラスに拡張する. | |
実現 Realization | 宣言のみをしたメソッドに対して,具体的な実装を行う | 実装(implements)によってインターフェイスを実装する. | |
依存 Dependency | 動的または一時的に関係を持つ | ほかのクラスのインスタンスにアクセスする.引数に取る. |
UML図作成の準備
UML図を作成するために,以下のPDFでの説明にしたがって, astah* professionalをインストールしておくこと.