◯×は「定義の主語・向き・数」をすり替えてくる。下表の右列(ひっかけ)を先に覚えると、本番では文の1か所を見るだけで判定できる。
| 論点 | 正しい理解 | よく出るひっかけ(=×になる書き方) |
|---|---|---|
| コミュニケーション図の四角 | オブジェクト(インスタンス)。名前は「オブジェクト名:クラス名」で下線付き。 | 「四角はクラスを表す」→ × |
| 多重度の読み方 | 反対端のインスタンス1個に対して、当該端のインスタンスがいくつ対応するか。 | 「m個にn個が関連している」のようなm対nの総数解釈 → × |
| コンポジション | ◆側が全体。全体が消滅すると部分も消滅(生存期間が等しい)。 | ◆の向きを逆にする/「部分が消えると全体も消える」→ × |
| 集約 | 全体と部分だが生存期間は別。全体が消えても部分は残る(白抜き◇)。 | 集約なのに「一緒に削除される」→ × |
| 汎化の向き | 「BはAの一種」と読めるなら、AがBを汎化したもの(A=親、B=子)。 | 親子を入れ替える → ×。文を「〜の一種」に直して読むのがコツ。 |
| 継承 | 下位クラスは上位クラスの属性・振舞いをすべて持ち、さらに追加できる。 | 「一部だけ継承」「追加できない」→ × |
| プライマリアクタ | ユースケースを起動するアクタ。一連の相互作用を始める側。 | 「後から参加するアクタ」(=セカンダリアクタ)と入替 → × |
| アクタ | 役割を表す。人でなくてもよい(外部システム・I/Oデバイス・タイマ)。1人が複数アクタを兼ねてよい。 | 「アクタは個人を表す」「必ず人間」→ × |
| ユースケース記述の粒度 | アクタとシステムの外部からのやりとりのみ。内部構造・内部処理は書かない。 | 「内部の振舞いまで詳細に記述すべき」→ × |
| ユースケース記述とUI | アクタの意図を書く(「目覚ましを止める」)。 | 「ボタンを押す」などUI操作の記述を推奨 → × |
| 同期メッセージ | 送信先の処理が完了する(応答が返る)まで送信元は次に進めない。 | 非同期の説明とすり替え → × |
| opt / alt / loop | 条件で生じたり生じなかったりする交換=opt。多岐選択=alt。繰返し=loop。 | optとaltの入替、loopをoptに → × |
| アクティビティ(do) | ある状態に留まっている間に継続実行される処理。 | 「遷移の際に実行」(=アクション)と入替 → × |
| アクション | 状態遷移の際に実行。所要時間は0。複数書けるが依存関係があってはならない。 | 「状態にいる間ずっと実行」→ × |
| entry / exit | その状態に入る時/出る時に実行。遷移ではなく状態に付随。 | 遷移に付随すると書く → × |
| 状態と時間 | 状態遷移に要する時間は0。イベント処理中に割り込まれない。 | 「遷移に時間がかかる」→ × |
| 初期状態/終了状態 | 初期状態は必ず1個、終了状態は0個以上。 | 「終了状態は必ず1個」→ × |
| 階層ステートマシン図 | 常に平坦なステートマシン図に変換できる。可読性と抽象度分離のための記法。 | 「変換できない」「表現力が増える」→ × |
| 階層制御パターン | 複数の制御コンポーネントがあり、うち1つが他を調停して全体を司る(上下関係あり)。 | 「上下関係のない同格」→ それは分散制御。× |
| 集中制御パターン | 1つの制御コンポーネントが有限状態機械として全体を司る。 | 「複数の制御コンポーネント」→ × |
| extend / include | extend:基底は拡張なしでも機能する/基底は拡張先を知らない。include:基底は挿入なしでは機能しない/基底が明示的に指定。 | この4点の入替が定番 → 表で暗記(§3) |
| 静的メンバ/オブジェクト名 | どちらも下線。静的属性は全インスタンス共通の値。 | 「太字」「斜体」など表記のすり替え → × |
| 分析と設計の分担 | 分析=What(クラス・関連・多重度・メッセージ内容)。設計=How(並行性・同期/非同期・パラメータ・可視性)。 | 「分析で同期/非同期を決める」→ × |
| 項目 | 内容 |
|---|---|
| ユースケース名 | 「〜する」と動詞で終わる名前。 |
| 概要 | 1〜2文の簡単な説明。 |
| アクタ | 関係するアクタ名(primary / secondary)。 |
| 依存関係 | 他ユースケースを include / extend するか。 |
| 事前条件 | 開始時に充たされているべき条件。 |
| 主シーケンス | 開始から成功裏に終わるまでの、最も代表的なやりとり。番号付き。 |
| 代替的シーケンス | 条件処理・エラー処理などの副次的なやりとり。どのStepから分岐するかを書く。 |
| 事後条件 | 主シーケンス終了時に充たされているべき条件。 |
| 未解決の課題 | 議論中の事項。 |
唯一解はなく、大多数が納得する「納得解」を目指す。理解と意思疎通のために描くのだからわかりやすさこそ正義。書きすぎも書かなすぎも誤り。
出題は「どちらを使うか」「矢印の向き」「拡張点の位置」「展開後のシーケンス」。この表を丸暗記すれば全部解ける。
| 観点 | extend(拡張) | include(挿入) |
|---|---|---|
| 意味 | 相互作用列の外からの追加 | 相互作用列の中からの挿入 |
| 基底だけで動くか | 動く(拡張ユースケースは無くてもよい) | 動かない(挿入ユースケースなしには機能し得ない) |
| 相手を知っているか | 基底はどの拡張に拡張されるか知らない | 基底が明示的に指定する |
| 矢印の向き(UML) | 拡張 --《extend》--> 基底(子→親向き) | 基底 --《include》--> 挿入 |
| 拡張点 | 基底の主シーケンス中に「拡張点:◯◯」と書く。展開時はそこが拡張側の相互作用列に置き換わる。 | 基底の主シーケンスに「include ◯◯する」と1行書く。 |
| 条件 | ガード条件 [条件] を付けられる。条件が排他的なら1つの拡張点に複数の拡張を接続可。 | 条件は付けない(必ず実行される)。 |
| アクタ | — | 挿入ユースケースは特定のアクタを想定しない |
| 使いどころ | 条件実行部分・選択的実行部分・複雑/代替的な相互作用列を切り出す | 共通の相互作用列の重複排除/抽象度による分離 |
| 典型例 | 「電話をかける」+「電話帳で相手を指定する」 | 「履修科目を登録する」/「個人成績を閲覧する」← 「ログインする」 |
refで他図を参照)。シーケンス式:メッセージ名(引数)/戻り 型 = メッセージ名( ):戻り値。リカレンス 3*[j:=1,n]、条件 4[x<n]。| keyword | 意味 | keyword | 意味 |
|---|---|---|---|
opt | 条件実行(ガード条件成立時のみ) | par | 並行実行 |
alt | 多岐選択 | critical | 割り込まれずに実行 |
loop | 繰返し実行 | seq | 異なるライフライン間で順序が厳守されない |
break | 送信されると親フレームを中止 | strict | 送信順序を厳守 |
loop。条件付き(「〜の場合」)なら opt/alt。| 要素 | 書き方と意味 |
|---|---|
| 遷移ラベル | イベント [ガード条件] / アクション, アクション ※アクション複数可・同時実行・依存関係を持たせない |
| イベント | 有限状態機械への入力。時間0のシグナル。ガード条件成立時のみ遷移を引き起こす。 |
| タイマイベント | after(時間) その状態に入ってから指定時間経過で発生。 |
| アクション | 遷移の際に実行。所要時間0。 |
| entry / exit | entry / 処理 exit / 処理 状態に入る時/出る時。状態に付随。同じアクションが多数の遷移に重複するときの簡略化に使う。 |
| アクティビティ | do / 処理 その状態に留まっている間、継続して実行。状態に付随。 |
| 初期/終了状態 | ●が初期状態(必ず1個)、◎が終了状態(0個以上)。 |
履歴状態 H | 最後に親状態を脱出したときの副状態に戻る。 |
| 階層化 | 可読性向上+抽象度別の記述。常に平坦な図に変換可能。親状態からの遷移は全副状態に共通して効く。 |
f(現在状態, 入力イベント)→次状態、g(現在状態, 入力イベント)→出力イベント。| 日本語の言い回し | クラス図での表現 |
|---|---|
| 「AはBの一種である」 | 汎化。B(親)△←A(子)。白抜き三角はいつも親側。 |
| 「Aは◯◯を属性として持つ」 | Aのクラス箱の2段目に - ◯◯。 |
| 「Aは1個以上のBで構成され、Aを削除すればBも削除される」 | コンポジション。A側に◆、A側多重度1、B側 1..*。 |
| 「Aは0個以上のBで構成され、Aを削除してもBは残る」 | 集約。A側に◇、B側 *。 |
| 「1つのBは1つのAに属する」 | B側から見たAの多重度=1。 |
| 「1人のAは0個以上のBを提供する」 | 関連「提供する」、B側 *。 |
| 「1つのBは0人以上のAに提供される」 | 同じ関連のA側 *。 |
| 関連の情報(成績・履修年度など) | 関連クラス(関連線に破線でぶら下げる)。 |
| 「〜としてのA」 | 関連端名(旧・関連ロール名)。同じ2クラス間に複数の関連があるときに必須。 |
n=n個、*=0個以上、m..n=m個以上n個以下、1..*=1個以上。省略時は1。ただし試験では「関連には多重度を必ずつけること」と指示されるので両端に必ず記入。+ public(全クラス)/- private(自クラス)/# protected(自分と子)/~ package(同一パッケージ)。| 分類 | 役割 | ステレオタイプ |
|---|---|---|
| インターフェースクラス | 外部環境との窓口(境界オブジェクト) | 《interface》《device interface》《input device interface》《output device interface》《user interface》《system interface》 |
| 制御クラス | オブジェクト群の監督役 | 《control》《coordinator》《state dependent control》《timer》 |
| 実体クラス | 概念=永続データの記録役 | 《entity》《data abstraction》《database wrapper》 |
| アプリケーションロジッククラス | ロジックの隠蔽 | 《application logic》《business logic》《algorithm》《agent》 |
| 外部クラス(物理クラス) | ソフトウェアの外側 | 《external device》《external user》《external system》《external timer》《system》 |
パターンは3分類(アーキテクチャパターン/デザインパターン=マイクロアーキテクチャ/イディオム=言語依存)。アーキテクチャパターンはさらに構造と通信に分かれる。パターンの三大観点は文脈・問題・解決策。
| パターン | 特徴(この一文で判定する) |
|---|---|
| 階層構造パターン | 上位層が下位層のサービスを使う。直下のみ利用=Strict、より下層も利用=Flexible。例:OSI参照モデル、TCP/IP。 |
| カーネルパターン | 核心的な基本機能をカーネルに閉じ込め、明確に定義された手続(システムコール)経由でのみアクセスさせる。 |
| サーバ/クライアント | サーバが要求に応じてサービス提供。多層もあり。 |
| ブローカ | サーバとクライアントの間に仲介人。クライアントはサーバの所在を知らなくてよい=疎結合。 |
| サーバ/エージェント/クライアント | エージェントが代理交渉する。 |
| 集中制御 | 1つの制御コンポーネントが有限状態機械として全体を司る。I/Fクラス群が中央の制御クラスにぶら下がる形。 |
| 分散制御 | 複数の制御コンポーネントが各自の役割を司り、同格でP2P通信。例:自動車のECU+CAN。 |
| 階層制御 | 複数の制御コンポーネントがあり、うち1つが他を調停して全体を司る。例:店頭端末全体制御+UI制御/印刷制御/DBアクセス制御。 |
| 通信するコンポーネント | 異なるスレッドの並行コンポーネントが相互通信(メッセージパッシング/共有メモリ)。 |
トランザクション=完全に実行されるか全く実行されないかの一蓮托生のオペレーション列(Commit/Abort)。Two-Phase Commit(準備→コミットの2段階)、複合トランザクション(小分割・各々ロールバック可)、Long-Living(人間が介在し時間が読めないものを2つ以上に分割)。
| 用語 | 定義(この言い回しで書く) |
|---|---|
| ソフトウェアライフサイクル | ソフトウェアの一生。各ステージ=フェーズ。開発/運用/保守/廃棄。 |
| ソフトウェア開発プロセス | ソフトウェア開発の段取り(一連の工程)。 |
| 段階的詳細化 | 各種の図表を作りながら、徐々に詳細度を上げていく開発の進め方。 |
| 要求定義 | どのようなソフトウェアを作りたいかを、実装の詳細に立ち入らず記述する(What)。 |
| 基本設計(=外部設計) | ソフトウェアをモジュールに分割し、そのインターフェースを設計(WhatをHowに)。 |
| 詳細設計(=内部設計) | 各モジュールの内部を設計(HowをさらにHowに)。 |
| 実装 | 実際にプログラムを作成する(Howをコードに)。 |
| テスト | 期待通りの振舞いをするか検証。単体→結合→システム(→受入)。 |
| 用語 | 定義 |
|---|---|
| 要求 | これから開発するシステムがどうあって欲しいかを記述したもの。受益者の視点。 |
| 仕様(要求仕様) | 同じくどうあって欲しいかの記述だが開発者の視点。要求を詳細化したもの。文書=要求仕様書。 |
| 機能要求/非機能要求 | 提供すべき機能/充たすべき特性。非機能=品質要求+制約(法令遵守・アーキテクチャ制約・開発制約)。 |
| 品質要求(5つ) | 信頼性・使用性・効率性・保守性・移植性。 |
| 仕様に必要な性質 | 曖昧さ・モレ・ヌケ・矛盾がない/実現可能性と検証可能性が吟味されている。 |
| 要求工学プロセス | 要求獲得 → 要求分析 → 要求仕様化 → 要求の検証・妥当性確認・評価(+要求管理)。 |
| 分析/設計/実装 | 分析=要求仕様書を書くまで(What)。設計=コードを書くまで(How、複数案を評価して意思決定)。実装=コードを書く。 |
| ソフトウェアのモデル | 実現の詳細に立ち入らず問題の本質を、自然言語より低くプログラミング言語より高い抽象度で記述したもの。重要な3観点=機能・構造・振舞い。 |
| OOA / OOD / OOP | オブジェクト指向分析/設計/プログラミング。 |
| クラス/インスタンス | クラス=オブジェクトの種(型)。インスタンス=クラスに属する個々のオブジェクト。 |
解答は黒塗り。まず自力で解いてからタップして確認。右上の「解答を全部表示」で一括表示もできる。
| No. | 解答 | 理由 |
|---|---|---|
| ① | × | コミュニケーション図の四角はオブジェクト(インスタンス)。クラスではない。 |
| ② | ◯ | コンポジションは◆側が全体。全体の消滅とともに部分も消滅する(生存期間が等しい)。 |
| ③ | × | 多重度は「反対端のインスタンス1個に対し当該端がいくつ対応するか」。m個にn個、という総数の解釈は誤り。 |
| ④ | ◯ | 「AはBの一種」=Bが親。したがって「BはAを汎化した関係」で正しい。 |
| ⑤ | ◯ | 条件によって生じたり生じなかったりする=条件実行=opt。 |
| ⑥ | × | ユースケース記述はシステムの内部構造に立ち入らない。外部仕様のみ。 |
| ⑦ | ◯ | 同期メッセージの定義そのもの。 |
| ⑧ | ◯ | プライマリアクタ=ユースケースを起動する(相互作用を始める)アクタ。 |
| ⑨ | ◯ | アクティビティ(do)=状態に留まっている間、継続して実行される振舞い。 |
| ⑩ | × | 「上下関係のない同格」は分散制御パターン。階層制御は1つが他を調停する。 |
(小問1)アーキテクチャ構造パターンの名前 → 集中制御パターン
制御クラスは「給湯ポット制御」1つだけで、それが全I/Fクラスを制御し、状態依存の振舞い(有限状態機械)を持つ。制御クラスが1つ=集中制御。
(小問2)シーケンス図の空欄(登場順:タイマ/水温センサI/F/給湯ポット制御/ヒータI/F)
| 空欄 | 解答 | やりとり | 対応する主シーケンス |
|---|---|---|---|
| ① | ヒータON | 制御 → ヒータI/F | 1. 通電開始後、ヒータに通電を始める |
| ② | 沸騰 | 水温センサI/F → 制御 | 2. 水温が98℃を超えた |
| ③ | 計時開始要求 | 制御 → タイマ | 3の前提(2分の計時を依頼) |
| ④ | 計時完了通知 | タイマ → 制御 | 3. 2分経過を知らせる |
| ⑤ | loop | 複合フラグメント | 8. 保温のため4〜7を繰り返す |
| ⑥ | ヒータOFF | 制御 → ヒータI/F | 4. 通電を止める |
| ⑦ | 水温低下 | 水温センサI/F → 制御 | 5. 90℃を割った |
| ⑧ | ヒータON | 制御 → ヒータI/F | 6. 通電を再開する |
| ⑨ | 沸騰 | 水温センサI/F → 制御 | 7. 98℃を超えた |
loop。ここで opt や alt を選ばないこと。選択肢に par があるのは撹乱。(小問3)階層ステートマシン図の空欄
| 空欄 | 遷移 | イベント | アクション | 根拠 |
|---|---|---|---|---|
| ① | 初期化中 → 加熱中 | 初期化完了(既出) | ヒータON | 主1. 通電を始める |
| ② | 加熱中 → 沸騰中 | 沸騰 | 計時開始要求 | 主2→3. 98℃超過で2分の計時を開始 |
| ③ | 沸騰中 → 保温中(加熱待機中) | 計時完了通知 | ヒータOFF | 主3→4. 2分経過で通電停止 |
| ④ | 加熱待機中 → 再加熱中 | 水温低下 | ヒータON | 主5→6. 90℃を割って通電再開 |
| ⑤ | 再加熱中 → 加熱待機中 | 沸騰 | ヒータOFF | 主7→4. 98℃超過で通電停止 |
| ⑥ | 保温中 → 加熱中 | 再沸騰ボタン押下 | ヒータON | 代替 Step4-7. 再沸騰要求で1に戻る |
| ⑦ | 動作中 → 停止中 | 水位低下 | ヒータOFF | 代替 Step1-7. 空焚き防止 |
| ⑧ | 停止中 → 加熱中 | 水位回復 | ヒータON | 代替. 水位上昇で1に戻る |
| 記述 | 図での表現 |
|---|---|
| 楽曲/アルバムは作品の一種 | 作品を親とする汎化(△は作品側) |
| 楽曲=曲名・演奏時間、アルバム=アルバム名、アーティスト=名前 | 各クラスの属性欄に記入(作品・プレイリストは属性なし) |
| 1つのアルバムは1曲以上の楽曲で構成、アルバム削除で楽曲も削除/1つの楽曲は1つのアルバムに属する | コンポジション。アルバム側◆で多重度1、楽曲側 1..* |
| 1人のアーティストは0個以上の作品を提供/1つの作品は0人以上のアーティストに提供される | 関連「提供する」、両端とも * |
| プレイリストは0個以上の作品で構成、削除しても作品は残る/作品は0個以上のプレイリストの構成要素 | 集約。プレイリスト側◇、両端とも * |
| No. | 解答 | 補足 |
|---|---|---|
| ① | ソフトウェア開発プロセス | 一連の工程=開発の段取り。 |
| ② | 要求定義 | 顧客要求を聞き取り整理する工程(What)。 |
| ③ | 基本設計(外部設計) | 部品とインターフェースの設計。 |
| ④ | 詳細設計(内部設計) | 各部品の内部の設計。 |
| ⑤ | 段階的詳細化 | 徐々にソフトウェアのつくりの詳細を固めていくこと。 |