午後問題の歩き方 | ソフトウェア設計 問題の読み方


2020-03-23 更新

従来のソフトウェア設計の問題は、フローチャートで示されたファイル処理がほとんどでしたが、最近の問題では、フローチャートだけでなく、UML 、E-R 図、CRUD 表、決定表など、様々な図が使われています。

それらの中でも UML は、出題頻度が高い ので、重点的に学習しておきましょう。

ここでは、例として、平成 21 年度 秋期 午後 問 5「航空券発券システム」 を紹介します。

UML のクラス図とシーケンス図が読めれば、簡単に解ける問題です。

クラス図の読み方

UML は、主にオブジェクト指向による分析や設計を図示するために使われます。UML には、10 数種類の図が用意されています。

それらの中で、試験によく出題されるのは、クラス図シーケンス図 です。これら 2 つの図が読めれば、ほとんどの問題を解けます。

クラス図

システムの静的な構造を示す図(クラスの構造と関連)
シーケンス図
システムの動的な振る舞いを示す図(オブジェクト間のメッセージパッシング)

オブジェクト指向は、システムの部品分けにおける指向です。

オブジェクト指向では、データと処理のまとまりを部品にして、それを「クラス」と呼びます。

UML のクラス図は、クラスの構造を示します。

以下は、「時給」と「時間」というデータと、それらを使って「給与を求める。」という処理を行う、「社員」という名前のクラスを示すクラス図です(図の内容に意味はありません。あくまでもサンプルです)。

クラス図は、四角形を 3 つの部分に区切って、上から順に

  • クラス名
  • データ
  • 処理

を記述します。

クラスと他のクラスを線で結び、両者に関連があることを示します。関連の多重度は、0 、1 、* などで示します。 * は、多数という意味です。線の横に、役割名を書き添えることもあります。

たとえば、以下は、「社員」クラスが「商品」クラスと関連を持ち、社員クラスには、「販売担当者」という役割名があります。

1 および 0..* という多重度は、1 人の社員が、0 個以上で多数の商品の販売担当者であることを示しています。

シーケンス図の読み方

システムの起動後に、必要に応じてクラスがメモリにロードされて動作します。

これを「クラスのインスタンス」または「オブジェクト」と呼びます(これ以降は、オブジェクトと呼びます)。

あるオブジェクトが他のオブジェクトの処理を呼び出し、そのオブジェクトがまた別のオブジェクトにメッセージを送ることで、システムが動作します。

これをメッセージパッシングと呼びます。

メッセージを送る とは、オブジェクトが持つ処理を呼び出すこと です。

ある場面において、そこに登場する オブジェクトと、オブジェクト間のメッセージのやりとりを図示するのが、シーケンス図 です。

 

以下は、システムのユーザーが、まず、

  1. 社員クラスのオブジェクトに「給与を求める。」というメッセージを送る
  2. その戻り値として「給与の値」を得る
  3. 次に、商品クラスのオブジェクトに「商品単価」を設定する

というメッセージを送っている様子を図示したものです(図の内容に意味はありません。あくまでもサンプルです)。

人の形をしたアイコンが、ユーザーを示します。四角形の中に「:クラス名」と書いて下線を付けたものが、そのクラスのオブジェクトを示します。

シーケンス図の上から下に向かって、時間が経過します。

メッセージは、実線の矢印の上にメッセージの内容(メッセージを受けるオブジェクトが持つ処理)を記述して示します。

メッセージに戻り値がある場合は、破線の矢印の上に戻り値の内容を記述して示します。処理を行っている期間を、細長い四角形で示します。

label関連タグUML

PR

クラス図が読めれば設問 1 は楽勝

それでは、問題を解いてみましょう。

以下は、問題の冒頭に示されたシステムの概要です。細かな説明は気にせずに、「航空券発券システム」であることがわかれば十分です。

問 5 航空券発券システムに関する次の記述を読んで,設問 1 ~ 3 に答えよ。

オブジェクト指向分析/設計を用いて,航空券発券システムの設計を行う。航空券発券業務の分析から,図 1 の分析クラス図を作成した。

【航空券発券業務の内容】
  1. 航空会社の航空券販売担当者(以下,販売担当者という)は,顧客が窓口で申し込んだ内容を基に,航空券発券システムで空席確認及び発券を行う。
  2. 顧客が窓口で申し込む内容は,出発日時,出発地及び到着地となる空港名,便名,グレード(ファースト,エコノミー),人数,席種(窓側,中間,通路側)である。すべての便は直行便である。
  3. 販売担当者は (2) で受け付けた申込み内容を確認し,その情報をシステムに入力する。システムはその便の空席状態を確認する。空席があれば (4) に進み,なければ,顧客は申込み内容を変更して再度申込みをする。
  4. 販売担当者は顧客が希望しているグレードと席種の座席を確保し,顧客情報を登録して航空券を発券する。

次に、クラス図と凡例が示されています。この凡例では、クラスが持つデータを「属性」と呼び、処理を「操作」と呼んでいます。

これは、オブジェクト指向に限ったことではありませんが、1 つの事物には複数の呼び名があるものです。このクラス図では、処理(操作)が省略されています。

設問 1 は、空欄 a 、空欄 b 、空欄 c に入るクラス名を答えるものです。

設問 1

図 1 中の       に入れる適切なクラス名を,解答群の中から選べ。

解答群
ア 空港  
イ 航空会社  
ウ 航空機
エ 航空券  
オ 航空券発券システム  
カ 便

空欄 a は、「名称」と「所在地」というデータ(属性)を持ち、他のクラスに対して「出発空港」および「到着空港」という役割名を持つクラスです。

選択肢を見るまでもなく「空港」だとわかります。

もちろん、正解は、選択肢アの「空港」です。

同様に考えて、空欄 b は「発券日時」というデータを持つことから、選択肢エの「航空券」が正解です。

空欄 c は、「便名」「出発日時」「到着日時」というデータを持つことから、選択肢カの「便」が正解です。

クラス図が読めさえすれば、ビックリするほど簡単でしょう!

シーケンス図が読めれば設問 2 も楽勝

設問 2 は、シーケンス図の穴埋めです。空欄 c には、設問 1 で答えた「便」が入ります。

設問 2

図 2 中の       に入れる正しい答えを,解答群の中から選べ。ただし,図 2 中の   c   には設問 1 の正しい答えが入っているものとする。

d ,e に関する解答群
ア 空席を確認する  
イ 航空券を発券する
ウ 顧客情報を登録する  
エ 出発日時を問い合わせる
オ 出発日時を登録する  
カ 発券可否を確認する

この設問も、シーケンス図が読めさえすれば、ビックリするほど簡単です。

空欄 e のメッセージの戻り値は、「空席状態」です。この戻り値に適したメッセージは、選択肢アの「空席状態を確認する」です。

空欄 d のメッセージの戻り値は、「可否」です。この戻り値に適したメッセージは、選択肢カの「発券可否を確認する」です。

クラス図とシーケンス図を対応付ければ設問 3 も楽勝

続いて、新たに追加した「航空券発券画面」クラスおよび「航空券発券管理」クラスのクラス図が示されています。これらのクラス図では、データが省略されていて、処理だけが示されています。

設問 3 は、「航空券発券画面」クラスの処理を答えるものです。「航空券発券管理」クラスの空欄 d には、設問 2 で答えた「発券可否を確認する」が入ります。

 図 1 の分析クラス図に,実装を考慮して次の二つのクラスを追加した後,操作を洗い出すために,図 2 の販売担当者とシステムのオブジェクトとの関係のシーケンス図を作成した。

[追加したクラス]
① 航空券発券画面: データを入力する画面クラス
② 航空券発券管理: 航空券を発券するための管理クラス

f ,g に関する解答群

ア 空席を確認する  
イ 顧客情報を登録する
ウ 出発日時を登録する  
エ 発券可否を確認する
オ 発券可否を表示する  
カ 便の座席数を確認する

先ほどの図 2 のシーケンス図を見ると、「航空券発券画面」クラスのオブジェクトに送られているメッセージ(「航空券発券画面」クラスが持つ処理)が、

  • 出発日時、出発地および到着地となる空港名、便名、グレード、人数、席種を入力し、発券可否を確認する。
  • 発券可否を表示する
  • 座席を確保する。
  • 顧客情報を登録する。
  • 航空券を発券する。

の 5 つだとわかります。

 

図 3 の「航空券発券画面」クラスのクラス図を見ると、このクラスが持つ処理が

  • 出発日時、出発地および到着地となる空港名、便名、グレード、人数、席種を入力し、発券可否を確認する。
  • 座席を確保する。
  • 航空券を発券する。

の 3 つ、および空欄 f と空欄 g だとわかります。

したがって、空欄 f と空欄 g に入るのは、「顧客情報を登録する。」と「発券可否を表示する」です。

答えは、順不同で選択肢イと選択肢オです。

いかがでしたか。とっても簡単だったでしょう。

UML を使った問題の多くは、ここで紹介した例のように、短時間に簡単に解けます。

逆に、従来のフローチャートを使った問題の多くは、時間がかかり難しいものです。ソフトウェア設計は、午後問題の問 2 ~ 4 の選択問題の中の 1 つの分野として出題されます。

午後問題の歩き方 | 過去問 10 回分から分析した午後問題の出題傾向 (2019 秋期試験 更新)
ソフトウェア設計の出題傾向

もしも、試験当日のソフトウェア設計の問題が UML だったら「ラッキー!」と思って、ぜひ選択してください。ただし、事前に UML の過去問題を十分に学習しておいてください。

それでは、またお会いしましょう。

 

label 関連タグ
実は、午前試験を『免除』できます 独習ゼミで午前免除試験を受けた 85% の方が、
午前分野を免除しています。
2020年 6月 12日 12時
締め切り間近!!
alarm2020年 6月 12日 12時締切!

詳しく見てみるplay_circle_filled
label これまでの『午後問題の歩き方』の連載一覧 label 著者

『プログラムはなぜ動くのか』(日経BP)が大ベストセラー
IT技術を楽しく・分かりやすく教える“自称ソフトウェア芸人”

大手電気メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。
お客様の満足を何よりも大切にし、わかりやすい、のせるのが上手い自称ソフトウェア芸人。

主な著作物

  • 「プログラムはなぜ動くのか」(日経BP)
  • 「コンピュータはなぜ動くのか」(日経BP)
  • 「出るとこだけ! 基本情報技術者」 (翔泳社)
  • 「ベテランが丁寧に教えてくれる ハードウェアの知識と実務」(翔泳社)
  • 「ifとelseの思考術」(ソフトバンククリエイティブ) など多数