オブジェクト指向分析@アーキテクチャ¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. オブジェクト指向分析¶
機能の視点¶
DFD、ユースケース図、アクティビティ図などがある。
振舞の視点¶
システムシーケンス図、ステートマシン図などがある。
02. DFD:Data Flow Diagram (データフロー図)¶
DFDとは¶
03. ユースケース図¶
ユースケース図とは¶
アクターとユースケースと関係性を基に、アクターの要求に対するソフトウェアの具体的な『機能』を表す。
ユースケース図はソフトウェアの構造を表現できないため、設計の前段階としては適さない。
そのため、ユースケース図は、オブジェクト図の前段階としてオブジェクトの具体例を抽出することにとどめる。
オブジェクト図の方が、設計の前段階の参考資料として適している。
ユースケース名は、『ソフトウェアは、ユーザーが〇〇を△△する機能を提供する。
』と考え、〇〇 (名詞) をオブジェクト図に反映させる。
記法¶
記号名 | 説明 | 補足 |
---|---|---|
アクター: |
ソフトウェアを利用するユーザーや、連携する他のソフトウェアを表す。 | |
ユースケース: |
ソフトウェアの具体的な機能を表す。 | |
サブジェクト: |
アクターとソフトウェアの境界線を表す。 | |
パッケージ: |
アクターによって提供する機能に違いがある場合、これの境界線を表す。 | |
関連: |
アクターと機能を結ぶことにより、機能がアクターに提供されることを表す。 | |
汎化: |
アクター間またはユースケース間に、is-a-kind-ofな関係 (グループとメンバーの関係性) があることを表す。 | |
包含: |
矢印元の機能を細分化すると、矢印先の機能も含まれることを表す。 | << invoke >> も同じである。 |
先行:<< precedes >> |
矢印元の機能が必ず先に使用されてから、矢印先の機能が使用されることを表す。 | |
拡張: |
矢印元の機能は矢印先の機能の追加機能であり、場合によってはこれが使用されることを表す。 | |
ノート: |
機能の前提事項や考慮事項を記載する。認証/認可は全てのユースケースに関係するため、ノートに記載する。 - https://stackoverflow.com/questions/49530596/suggested-way-of-creating-use-case-diagram-where-some-use-cases-requires-authent> |
*例*
とある映画チケット料金を題材に、ハッシュタグチケット料金モデリングとして、色々な方がユースケース図とクラス図を作成されている。
いずれの方も非常に参考になる
(1)
-
映画チケット購入者の受注管理ソフトウェアを開発する例を考える。
(2)
-
要件定義が終えた想定で、ユースケース図を作成する。オブジェクト図は省略する。
(3)
-
クラス図を作成する。ユースケースから以下のオブジェクトを抽出する。
ユースケース | 抽出されたオブジェクト |
---|---|
映画を選択する | 映画オブジェクト |
タイトルを選択する | タイトルオブジェクト |
映画の形式を選択する | 映画形式オブジェクト、上映形態オブジェクト |
上映回を選択する | 上映回オブジェクト、上映日オブジェクト、上映開始時刻オブジェクト |
04. アクティビティ図¶
アクティビティ図とは¶
ビジネスロジックや業務フローを手続き的に表記する。
*例*
05. システムシーケンス図¶
システムシーケンス図とは¶
アクターとソフトウェアの出入力を基に、ユーザーの要求に対するソフトウェアの『動的な振舞』を表す。
オブジェクト間の関係性に基づくシーケンス図とは異なり、図式化の目的としてはユースケース図と似ている。
06. ステートマシン図¶
ステートマシン図とは¶
ステート、遷移 (矢印) 、ステート遷移を起こす動作 (アクション) を記載する。
ステートマシンをオブジェクト、各ステートをステートマシンの依存先オブジェクト、アクションをオブジェクトのメソッド、として実装する。
ステートマシン表とは¶
ストップウォッチのステートマシン図がある。
ステートマシン表を作成してみると、ステートマシン図では、9つあるセルのうち4
個のセルしか表現できておらず、残り5つのセルは表現されていないことに気づける。
07. オブジェクト図 (インスタンス図)¶
オブジェクト図とは¶
『インスタンス図』ともいう。
特定のデータを保持する具体的なオブジェクト間の関係性を基に、ソフトウェアの『静的構造』を表す。
記法¶
記号名 | 説明 |
---|---|
インスタンス指定 | 特定の状態にあるオブジェクト (インスタンス) の具体例を表す。『<具体的なインスタンス名>:<クラス名> 』のように下線付きで表記する。 |
スロット | インスタンスが保持する具体的なデータを表す。『<属性名>:<データ型> = <値> 』で表記する。 |
リンク | インスタンス間の関係性を表す。何かしらの関係性があれば、全てリンクとして定義する。 |