UML
Strategyパターン
Stateパターン
1
デザインパターン
UML
2
概要
• デザインパターンを学習するに、クラス図を知っていた方が便
利です。
• ここではUML(主にクラス図)について学びます。
• デザインパターンの中から「Strategyパターン」「Stateパター
ン」について学びます。
3
UML
• UMLとは
• Unified Modeling Language の略です。
• オブジェクト指向におけるプログラムの構造を把握する
場合に使用します。
• システムの要件や業務の流れを整理する際にも使用され
ます。
• UMLに含まれる図のことを「ダイアグラム」と呼びます。
4
UML
• UMLを学習することのメリット
• クラス間の関連性の整理に役立ちます。
• オブジェクト指向の設計・理解の手助けとなります。
• 日本語の通じない相手にもクラス設計を伝えることがで
きます。
• 業務分析の際の整理術として使用できます。
5
UML
• UMLで使用されるダイアグラム一覧
• アクテビティ図
• オブジェクト図
• クラス図
• コミュニケーション図
• コンポーネント図
• コンポジット構造図
• シーケンス図
• 状態マシン図
• 相互作用概念図
• タイミング図
• 配置図
• パッケージ図
• ユースケース図
6
※名前順
UML
• UMLの分類
UMLの図は大きく2種類に分類できます。
• 構造の表記
• 振る舞いの表記
7
UML
• 構造の記述
• オブジェクト図
• クラス図
• コンポーネント図
• コンポジット構成図
• 配置図
• パッケージ図
8
UML
• 振る舞いの記述
• アクティビティ図
• コミュニケーション図
• シーケンス図
• 状態マシン図
• 相互作用概要
• タイミング図
• ユースケース図
9
UML
• プログラムを把握するためによく使用されるダイアグラム
• クラス図
• シーケンス図
• 業務分析でよく使用されるダイアグラム
• ユースケース図
• アクティビティ図
10
クラス図
• クラス図とは
• UMLの中で最も使用頻度の高いダイアグラム
• クラスの仕様とクラス間の関連性を記述できるものです。
• デザインパターンを説明するうえでクラス図を使用するので、クラス
図は抑えておきましょう。
11
クラス図
• クラス
• 一番上はクラス名。
• 真ん中はフィールド。
• 下はメソッドになります。
• クラスフィールドやクラスメソッド
の場合は、下線を入れます。
• アクセス修飾子を指定することも可能です。
12
クラス図
• 継承
• 継承関係を表した図
• 図の矢印は継承を指します。
• 上のクラスがスーパークラスで、
下がサブクラスです。
• 抽象クラスや抽象メソッドは斜体で
表記するのが一般的です。
13
クラス図
• 実装
• 実装関係を表した図
• 破線の矢印は実装を指します。
• 上がインターフェースで、下が
実装しているクラスです。
• インターフェースの場合は
<<interface>>を表記します。
14
クラス図
• 集約
• 集約(アグリゲーション)を表した図
• 矢印は、オブジェクトを持っている側から
持たれている側に向かう。
• 図は、Carクラスの
オブジェクトがTireクラスの
オブジェクトを保持している
ことを示しています。
15
クラス図
• 関連
• 関連(知っている)ことを表した図
• プログラム的には集約と同じ意味。
16
クラス図
• 使用
• クラスを使用すること表すには、図の矢印を使用する。
• ClassがUtilクラスを使用することを示している。
17
シーケンス図
• シーケンス図
• クラス図は、クラス間の静的な関係を表した図でした。
• クラス図ではクラスの振る舞いの相互作用(どのメソッドからどのメ
ソッドが呼ばれるかなど)は分かりません。
• この振る舞いの相互作用を表したのがシーケンス図です。
18
シーケンス図
• シーケンス図
19
ユースケース図
• ユースケース図とは
• ユースケース図は、ユーザーとシステム間のやり取り(相互作用)を
記述すための図です。
20
ユースケース図
• ユースケース図
21
アクティビティ図
• アクティビティ図とは
• 手続きや、メソッド(関数)のロジック、ビジネスプロセスなどのフ
ローを記述するための技法。
• フローチャートに似た役割を果たす。
22
アクティビティ図
• アクティビティ図
23
オブジェクト図
• オブジェクト図とは
• オブジェクトのある時点におけるスナップショットを表す図。
• インスタンス図とも呼ばれる。
• クラス図だけでは構造を把握するのが困難な場合に有効。
24
コミュニケーション図
• コミュニケーション図とは
• シーケンス図では、時系列でオブジェクト間のやり取りを記述します
が、コミュニケーション図では、時系列に関係なくオブジェクトを配
置できます。
• メッセージのやり取りをオブジェクトの関係を中心に表現できる。
25
コミュニケーション図
• コミュニケーション図
26
コンポーネント図
• コンポーネント図とは
• コンポーネントの構造や、コンポーネント間の相互作用と表す図です。
• そもそもコンポーネントとは、ソフトウェアの部品という意味ですが
クラスとの明確な違いはありません。
一般には複数のクラスから構成されるシステムの一部をコンポーネ
ン
と呼びます。
• システムをいくつかの部品に分割し、その関係性や構造を示す場合に
使用します。
27
コンポジット構造図
• コンポジット構造図とは
• 複数のクラスを包括するようなクラス、コンポーネントにおいて、
その内部構造を表現するための図です。
28
ステートマシン図
• ステートマシン図とは
• ステートマシン図は、1つのオブジェクトの存在期間中における振る
舞いを示す図。
29
相互作用概要図
• 相互作用概要図とは
• 相互作用概要図は、アクティビティ図とシーケンス図を合体させたも
のです。
• アクティビティ図の中のアクテビティを、シーケンス図に置き換えた
もの、もしくはアクティビティ図の記法で制御フローを分割したシー
ケンス図。
30
タイミング図
• タイミング図とは
• タイミングは、オブジェクトの状態が変化するタイミングを表すこと
を重視した図です。
31
配置図
• 配置図とは
• 配置図は、システムの物理的なレイアウトを示す図です。
• ソフトウェアのどの部分がハードウェアのどの部分で動作するかを示
す。
32
パッケージ図
• パッケージ図とは
• パッケージとは、クラスをグルーピングするための仕組みです。
• 言語によっては名前空間とも呼ばれます。
• パッケージ図は、パッケージ(名前空間)、およびパッケージ間の依
存関係を表す図です。
• 規模が大きいシステムでは、パッケージ間の依存関係を把握するのに
便利です。
33
まとめ
• クラス図・シーケンス図・ユースケース図・アクティビティ図
は役に立つ場面も多いので知っておくと良いでしょう。
• クラスの構造や処理の流れを理解するためのツール、人に説明
するためのツールとして活用すると便利です。
34
UML演習
35
演習
• 演習
• 「Template Methodパターン」のサンプルのソースを参照
して、クラス図を作成してください。
36
デザインパターン
37
Strategyパターン
• Strategyパターン
• Strategyは戦略という意味です。
• アルゴリズムを柔軟に変更することができるデザインパターンです。
• Strategyのインターフェースを用意し、それを実装したクラスにアルゴ
リズムを記述する。
• 別のアルゴリズムを増やしたいときは、インターフェースを実装した
クラスを増やせばいいので、他のクラスに影響を与えず、機能を追加
することができる。
38
Strategyパターン
• Strategyパターンのクラス図
39
Strategyパターン
• 演習
• Main.javaとShain.javaを「Strategyパターン」を使用した
ソースに修正してください。
• また、ソースのクラス図を作成してください。
40
Strategyパターン
• 解説
• 業種をインターフェースとして作成する。
• 業種のインターフェースを実装したクラス(営業クラス、マネージャー
クラス、プログラマークラス)を作成し、mainWorkメソッドを実装す
る。
• 詳しくは解答サンプルを参照。
41
Stateパターン
• Stateパターン
• stateは状態という意味です。
• 「状態」をクラスで表現し、オブジェクトの状態によって動作が変更
される場合に使用します。
• クラス図を見ると、Strategyパターンと似ていることが分かります。
• Strategyパターンでは、振る舞いに注目してクラスを分けましたが、
Stateパターンでは状態に着目する点が異なっています。
42
Stateパターン
• Stateパターンのクラス図
43
Stateパターン
• 演習
• Main.javaとShain.javaを「Stateパターン」を使用したソー
スに修正してください。
• また、ソースのクラス図を作成してください。
44
Stateパターン
• 解説
• 役職をインターフェースとして作成。
• 役職のインターフェースを実装したクラス(平社員クラ
ス、主任クラス、係長クラス)を作成し、昇格、降格、
給与取得のメソッドを実装する。
45

2018年度 若手技術者向け講座 UML