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

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

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

ここでは、例として、平成21年度秋期午後 問5「航空券発券システム」を紹介します。UMLのクラス図とシーケンス図が読めれば、簡単に解ける問題です。

 

 

クラス図の読み方

UMLは、主にオブジェクト指向による分析や設計を図示するために使われます。

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

 

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

 

オブジェクト指向は、システムの部品分けにおける指向です。オブジェクト指向では、データと処理のまとまりを部品にして、それを「クラス」と呼びます。UMLのクラス図は、クラスの構造を示します。以下は、「時給」と「時間」というデータと、それらを使って「給与を求める。」という処理を行う、「社員」という名前のクラスを示すクラス図です(図の内容に意味はありません。あくまでもサンプルです)。クラス図は、四角形を3つの部分に区切って、上から順にクラス名、データ、処理を記述します。

 

 

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

たとえば、以下は、「社員」クラスが「商品」クラスと関連を持ち、社員クラスには、「販売担当者」という役割名があります。1および0..* という多重度は、1人の社員が、0個以上で多数の商品の販売担当者であることを示しています。

 

 

 

シーケンス図の読み方

システムの起動後に、必要に応じてクラスがメモリにロードされて動作します。これを「クラスのインスタンス」または「オブジェクト」と呼びます(これ以降は、オブジェクトと呼びます)。

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

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

 

以下は、システムのユーザーが、まず、社員クラスのオブジェクトに「給与を求める。」というメッセージを送り、その戻り値として「給与の値」を得て、次に、商品クラスのオブジェクトに「商品単価を設定する。」というメッセージを送っている様子を図示したものです(図の内容に意味はありません。あくまでもサンプルです)。

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

 

シーケンス図の上から下に向かって、時間が経過します。メッセージは、実線の矢印の上にメッセージの内容(メッセージを受けるオブジェクトが持つ処理)を記述して示します。メッセージに戻り値がある場合は、破線の矢印の上に戻り値の内容を記述して示します。処理を行っている期間を、細長い四角形で示します。

 

-PR-

 

 

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

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

 

 

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

 

 

設問1は、空欄a、空欄b、空欄cに入るクラス名を答えるものです。空欄aは、「名称」と「所在地」というデータ(属性)を持ち、他のクラスに対して「出発空港」および「到着空港」という役割名を持つクラスです。選択肢を見るまでもなく「空港」だとわかります。もちろん、正解は、選択肢アの「空港」です。同様に考えて、空欄bは「発券日時」というデータを持つことから、選択肢エの「航空券」が正解です。空欄cは、「便名」「出発日時」「到着日時」というデータを持つことから、選択肢カの「便」が正解です。

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

 

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

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

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

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

 

 

 

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

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

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

 

 

 

先ほどの図2のシーケンス図を見ると、「航空券発券画面」クラスのオブジェクトに送られているメッセージ(「航空券発券画面」クラスが持つ処理)が、「出発日時、出発地および到着地となる空港名、便名、グレード、人数、席種を入力し、発券可否を確認する。」「発券可否を表示する」「座席を確保する。」「顧客情報を登録する。」「航空券を発券する。」の5つだとわかります。

図3の「航空券発券画面」クラスのクラス図を見ると、このクラスが持つ処理が「出発日時、出発地および到着地となる空港名、便名、グレード、人数、席種を入力し、発券可否を確認する。」「座席を確保する。」「航空券を発券する。」の3つ、および空欄fと空欄gだとわかります。したがって、空欄fと空欄gに入るのは、「顧客情報を登録する。」と「発券可否を表示する」です。

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

 


 

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

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

逆に、従来のフローチャートを使った問題の多くは、時間がかかり難しいものです。ソフトウェア設計は、午後問題の問5として必ず出題されます。

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

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

 

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

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

主な著作物

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