平成28年秋期試験午前問題 午後問5

問5 ソフトウェア設計

レンタル業務システムの設計に関する次の記述を読んで,設問1~3に答えよ。

 E社は,レンタル業務システムを利用して,CD,DVD,書籍などの貸出し用の各種資産(以下,レンタル商品という)をレンタルするサービスを行っている。レンタル業務システムによるレンタル業務の概要は,次のとおりである。

〔レンタル業務の概要〕
(1) 会員登録の手順
  1. 担当者は,サービスの利用希望者から入会申込書を受け取り,氏名,住所,生年月日及び電話番号を,会員情報としてレンタル業務システムに登録する。
  2. レンタル業務システムは,利用希望者に会員IDを割り当て,会員IDが印字された会員カードを発行する。会員情報の属性である登録年月日と最終来店年月日に本日日付を,累計支払額と貸出中延滞数に初期値として 0 を登録する。ここで,累計支払額は会員登録時からの支払額の累計(延滞料金を含む)であり,貸出中延滞数は現時点で返却予定年月日を過ぎているレンタル商品の件数である。
  3. 担当者は,レンタル業務システムから発行された会員カードを利用希望者に渡して,会員登録が完了する。
(2) レンタル商品の貸出し手順
 E社は,全てのレンタル商品のそれぞれに,一意となる識別子として資産管理番号を割り当てている。また,同じ種類のレンタル商品の情報(以下,商品情報という)ごとにも一意となる識別子として商品コードを割り当てている。図1は商品名が"オブジェクト指向設計"である3冊の書籍のレンタル商品に対して,資産管理番号を三つ,商品コードを二つ,それぞれ割り当てた例である。
pm05_1.gif
  1. 会員は,会員カードと貸出しを希望するレンタル商品を担当者に渡す。E社では,会員が1回の貸出し手順で借り出せるレンタル商品は最大10件までとしている。
  2. 担当者は,会員が提示した会員カードの会員IDをレンタル業務システムに入力して会員情報を画面に表示する。
  3. 担当者は,会員が貸出しを希望するレンタル商品に貼付された資産管理番号のバーコードをレンタル業務システムに読み込ませ,希望する貸出期間を会員から聞いて,レンタル業務システムに入力する。ここで,貸出期間は1日,2日,1週間のいずれかである。この作業を入力操作と呼ぶ。
  4. レンタル業務システムは,入力操作が行われる都度,レンタル商品の商品コード,貸出期間,商品名,商品概要,返却予定年月日,貸出料金及び貸出料金合計を画面に表示する。貸出料金はレンタル商品の種類ごとに貸出期間によって設定されている単価から,返却予定年月日は貸出期間と本日日付から自動計算する。
  5. 担当者は,会員が貸出しを希望するレンタル商品の数だけ入力操作を繰り返す。4件の入力操作を行った後の画面の表示例を,図2に示す。
  6. 担当者が,会員から貸出料金を受領した後,図2に示す確定ボタンを押すと,レンタル業務システムは,貸し出すレンタル商品ごとに貸出明細番号を割り当てて貸出明細の情報として登録する。さらに,返却予定年月日ごとにまとめて,伝票番号を割り当てて貸出の情報として登録する。図2の例では,貸出は3件,貸出明細は4件を登録する。加えて,貸出明細とレンタル商品を関連付けて,レンタル商品の貸出可否状態を"貸出中"にする。同時に会員情報の内容も更新する。その後,伝票番号ごとに貸出伝票を出力する。
  7. 担当者が,貸出しを希望するレンタル商品と貸出伝票を会員に渡すことで,レンタル商品の貸出しが完了する。
pm05_2.gif
(3) レンタル商品の返却手順
 レンタル商品の返却では,貸出中の全てのレンタル商品が返却される場合と,貸出中のレンタル商品の一部だけが返却される場合とがある。
  1. 担当者は,会員が返却するレンタル商品を受け取り,レンタル商品に貼付された資産管理番号のバーコードをレンタル業務システムに読み込ませる。
  2. レンタル業務システムは,伝票番号,商品コード,商品名及び返却予定年月日を画面に表示する。返却予定年月日を過ぎている場合は,返却されるレンタル商品ごとに延滞料金を表示し,延滞料金の合計も表示する。
  3. 延滞料金が表示された場合,担当者は,会員から延滞料金を受領する。
  4. 担当者がレンタル商品の返却の確定ボタンを押すと,レンタル業務システムは,貸出明細に関連付けたレンタル商品の貸出可否状態を"貸出可"にする。同時に貸出明細と会員情報の内容を更新する。これによって,レンタル商品の返却が完了する。
(4) 貸出中のレンタル商品のチェック処理
 レンタル業務システムは,閉店後に毎日,貸出中のレンタル商品の延滞チェックを行っており,延滞が発生した場合は,会員情報の貸出中延滞数を更新する。

〔レンタル業務システムのUML図〕
 図3はレンタル業務システムのクラス図,図4はレンタル商品の貸出し手順における③の操作が行われたときのシーケンス図である。
 なお,図3のクラス図には,エンティティクラスだけを記載している。
pm05_3.gif

設問1

図3中の に入れる正しい答えを,解答群の中から選ベ。ここで,b1とb2に入れる答えは,bに関する解答群の中から組合せとして正しいものを選ぶものとする。
a に関する解答群
  • 延滞日数
  • 延滞料金
  • 貸出期間
  • 貸出料金
  • 登録年月日
b に関する解答群
pm05_4.gif
解答選択欄
  • a:
  • b:
  • a=
  • b=

解説

aについて〕
貸出手順では、貸し出すレンタル商品ごとに貸出明細番号が割り当てられ、さらに返却予定年月日ごとにまとめて貸出伝票番号が割り当てられます。つまり、クラス"貸出明細"がレンタル商品ごとに登録される貸出明細に、クラス"貸出"が返却予定年月日ごとに登録される貸出伝票に対応します。
貸出しを行う際には図2に示されるようにレンタル商品ごとに「商品コード」「貸出期間」「商品名」「商品概要」「返却予定日」「貸出料金」「貸出年月日」のデータが生じます。このうちレンタル商品ごとに異なる情報をクラス"貸出明細"に、返却予定年月日ごとに共通する情報をクラス"貸出"に持たせることになります。

図2のデータを貸出伝票単位で区分し、貸出期間が2日のグループを見ると「貸出期間」「返却予定日」「貸出年月日」が貸出伝票ごとに共通する属性ということが分かります。クラス"貸出"には、既に"貸出年月日"と"返却年月日"の属性が記されているため、残るaには貸出期間が入ります。
pm05_6.gif
a=ウ:貸出期間
  • 同じ返却予定日のレンタル商品でも同じ日に返却されるとは限りません。このため属性"延滞日数"は、貸し出されたレンタル商品ごとに登録される"貸出明細"に持たせます。
  • "延滞料金"はレンタル商品ごとの延滞日数および貸出料金によって異なるため"貸出明細"ごとに持たせます。
  • 正しい。
  • "貸出料金"はレンタル商品ごとに異なるため"貸出明細"ごとに持たせます。
  • "登録年月日"は会員ごとに持つ情報なので、クラス"会員"に持たせます。
bについて〕
多重度(Multiplicity)とは「クラスのインスタンス間に何本のリンクが存在し得るか」の情報を表します。クラス図では多重度を相手側の関連線の近くに表記するため、b1には1件のレンタル商品から見た貸出明細の多重度、b2には1件の貸出明細から見たレンタル商品の多重度が入ります。

まずb1について考えます。本文中の図1に示されているように、レンタル商品は資産管理番号で識別される個々の商品です。1件のレンタル商品は、貸出明細に関連付けられている「貸出中」、若しくは、どの貸出明細とも関連づけられていない「未貸出」のどちらかの状態をとります。1つのレンタル商品が2つ以上の貸出明細に関連付けられる状態は、物理的に1つのレンタル商品を2人以上に貸し出していることを表すため現実的に存在しません。
したがって1件のレンタル商品から見た貸出明細の多重度は「0または1」になります。

b1=0..1

続いてb2について考えます。
貸出し手順では、貸し出された商品1つごとに貸出明細が1件登録されることになっています。1件の貸出明細は必ず1つのレンタル商品の情報を持ち「レンタル商品の情報を含まない貸出明細」や「2つ以上のレンタル商品が登録される貸出明細」は存在しません。このため1件の貸出明細から見たレンタル商品の多重度は「1」になります。

b2=1

以上より多重度の正しい組合せは「ウ」です。

設問2

図4中の に入れる正しい答えを,解答群の中から選べ。
c,d に関する解答群
  • 貸出期間
  • 貸出期間,単価
  • 貸出期間,単価,本日日付
  • 貸出期間,本日日付
  • 単価,返却予定年月日
  • 単価,返却予定年月日,本日日付
解答選択欄
  • c:
  • d:
  • c=
  • d=

解説

レンタル業務システムに入力操作が行われると画面には本文中の図2の情報が表示されます。図4のシーケンス図はこれらの情報が取得される過程を表したものです。シーケンス図において、メッセージの後ろの括弧内はメッセージの引数を記述する部分であるため、cdには処理を実行するために必要な情報が入ります。

cについて〕
本文中の貸出手順の④にて「返却予定年月日は貸出期間と本日日付から計算する」とあります。2つの情報は"貸出情報を取得する"メッセージによって担当者から"貸出処理"オブジェクトに伝達されているため、"貸出処理"オブジェクトは受け取った情報をもとに返却予定日を計算します。したがってcには返却予定日を計算するために必要な情報を表すcには「貸出期間,本日日付」が入ります。

c=エ:貸出期間,本日日付

dについて〕
本文中に「貸出料金はレンタル商品の種類ごとに貸出期間によって設定される単価から計算する」とあります。つまり貸出料金を計算するために必要な情報は「貸出期間,単価」です。しかし単純にこれが答えという訳ではありません。
必要な情報のうち、貸出期間は"貸出情報を取得する"メッセージによって担当者から"貸出処理"オブジェクトに伝達されています。しかし商品ごとの単価は"貸出料金"オブジェクトの情報なので、"貸出処理"オブジェクトは単価を知りません。このため"貸出料金を取得する"メッセージの引数は「貸出期間」のみが適切です。

シーケンス図を見ると、メッセージは"貸出処理"オブジェクトから"商品情報"オブジェクトに送られていることがわかります。このメッセージを受け取った"商品情報"オブジェクトは、貸出期間と商品情報をもとに"貸出料金"オブジェクト"に貸出料金の計算を依頼し、返された貸出料金を"貸出処理"オブジェクトに返します。

d=ア:貸出期間
pm05_7.gif

設問3

次の記述中の に入れる適切な答えを,解答群の中から選べ。ここで,e1とe2に入れる答えは,eに関する解答群の中から組合せとして適切なものを選ぶものとする。

 CDクラス,DVDクラス,書籍クラスは商品情報を特化して実現しているので,商品情報クラスをe1している。図4中のαの部分は,貸出処理クラスから商品情報クラスに対する商品概要を取得する要求のメッセージである。商品概要とは,CDならば編曲者と再生時間,DVDならば監督,主演及び再生時間,書籍ならば著者名,ページ数及びISBNから生成する当該商品の商品概要を表現する文字列である。商品概要を取得するためのメッセージを受信した商品情報インスタンスは,クラスに応じて異なる処理が実行される。一方,貸出処理クラスはクラスや処理の違いを意識せず,全てを商品情報として取り扱うことができる。この性質をe2という。
e に関する解答群
pm05_5.gif
解答選択欄
  • e:
  • e=

解説

選択肢のオブジェクト指向がもつ各性質は次の意味を持ちます。
インヘリタンス
ある親クラスの属性・機能を、その子クラスが受け継いている関係のこと。継承ともいう。
カプセル化
オブジェクトの独立性を高めるため、内部を隠ぺい(ブラックボックス化)すること。オブジェクトのデータとそれに対する操作をセットで定義し、外部からは特定の手続きだけの使用を許すことで実現する。情報隠ぺいともいう。
ポリモーフィズム
オブジェクトへの操作呼び出しが、呼び出し側でなく受け手側の特性で決まる特性。同じメッセージを送っても受け手によって行われる操作が異なる様子のこと。多態性・多相性・多様性ともいう。
e1について〕
図3のクラス図を見ると、商品情報クラスと、CD,DVD,書籍の3つのクラスの関係は上位クラスと下位クラスに当たることがわかります。3つの下位クラスは親クラス"商品情報"の特性を引き継いで定義された子クラスなので、e1にはインヘリタンスが入ります。

e1=インヘリタンス

e2について〕
同じメッセージを送っても、受け取るクラスによって返される情報が異なる様子なので、e2にはポリモーフィズムが入ります。

設問では"商品概要を取得する"という同一名称のメッセージに対する振る舞いが3つの下位クラスで個々に違うように、オブジェクト指向では上位クラスから引き継いだ操作を下位クラスごとに再定義できます。この操作の再定義によって、同じメッセージを送ってもクラスによって振る舞いが異なる特性が実現されています。

e2=ポリモーフィズム

したがって正しい組合せは「イ」です。

Pagetop