基本情報技術者 2016年 秋期 午後 問05
レンタル業務システムの設計に関する次の記述を読んで、設問1~3に答えよ。
E社は、レンタル業務システムを利用して、CD、DVD、書籍などの貸出し用の各種資産(以下、レンタル商品という)をレンタルするサービスを行っている。レンタル業務システムによるレンタル業務の概要は、次のとおりである。
〔レンタル業務の概要〕
(1) 会員登録の手順
① 担当者は、サービスの利用希望者から入会申込書を受け取り、氏名、住所、生年月日及び電話番号を、会員情報としてレンタル業務システムに登録する。
② レンタル業務システムは、利用希望者に会員IDを割り当てて、会員IDが印字された会員カードを発行する。会員情報の属性である登録年月日と最終来店年月日には本日日付を、累計支払額と貸出中延滞数に初期値として0を登録する。ここで、累計支払額は会員登録時からの支払額の累計(延滞料金を含む)であり、貸出中延滞数は現時点で返却予定年月日を過ぎているレンタル商品の件数である。
③ 担当者は、レンタル業務システムから発行された会員カードを利用希望者に渡して、会員登録が完了する。
(2) レンタル商品の貸出し手順
E社は、全てのレンタル商品のそれぞれに、一意となる識別子として資産管理番号を割り当てている。また、同じ種類のレンタル商品の情報(以下、商品情報という)ごとにも一意となる識別子として商品コードを割り当てている。図1は商品名が“オブジェクト指向設計”である3冊の書籍のレンタル商品に対して、資産管理番号を三つ、商品コードを二つ、それぞれ割り当てた例である。

① 会員は、会員カードと貸出しを希望するレンタル商品を担当者に渡す。E社では、会員が1回の貸出し手順で借り出せるレンタル商品は最大10件までとしている。
② 担当者は、会員が提示した会員カードの会員IDをレンタル業務システムに入力して会員情報を画面に表示する。
③ 担当者は、会員が貸出しを希望するレンタル商品に貼付された資産管理番号のバーコードをレンタル業務システムに読み込ませ、希望する貸出期間を会員から聞いて、レンタル業務システムに入力する。ここで、貸出期間は1日、2日、1週間のいずれかである。この作業を入力操作と呼ぶ。
④ レンタル業務システムは、入力操作が行われる都度、レンタル商品の商品コード、貸出期間、商品名、商品概要、返却予定年月日、貸出料金及び貸出料金合計を画面に表示する。貸出料金はレンタル商品の種類ごとに貸出期間によって設定されている単価から、返却予定年月日は貸出期間と本日日付から自動計算する。
⑤ 担当者は、会員が貸出しを希望するレンタル商品の数だけ入力操作を繰り返す。4件の入力操作を行った後の画面の表示例を、図2に示す。
⑥ 担当者が、会員から貸出料金を受領した後、図2に示す確定ボタンを押すと、レンタル業務システムは、貸し出すレンタル商品ごとに貸出明細番号を割り当てて貸出明細の情報として登録する。さらに、返却予定年月日ごとにまとめて、伝票番号を割り当てて貸出の情報として登録する。図2の例では、貸出は3件、貸出明細は4件を登録する。加えて、貸出明細とレンタル商品を関連付けて、レンタル商品の貸出可否状態を“貸出中”にする。同時に会員情報の内容も更新する。その後、伝票番号ごとに貸出伝票を出力する。
⑦ 担当者が、貸出しを希望するレンタル商品と貸出伝票を会員に渡すことで、レンタル商品の貸出しが完了する。

(3) レンタル商品の返却手順
レンタル商品の返却では、貸出中の全てのレンタル商品が返却される場合と、貸出中のレンタル商品の一部だけが返却される場合とがある。
① 担当者は、会員が返却するレンタル商品を受け取り、レンタル商品に貼付された資産管理番号のバーコードをレンタル業務システムに読み込ませる。
② レンタル業務システムは、伝票番号、商品コード、商品名及び返却予定年月日を画面に表示する。返却予定年月日を過ぎている場合は、返却されるレンタル商品ごとに延滞料金を表示し、延滞料金の合計も表示する。
③ 延滞料金が表示された場合、担当者は、会員から延滞料金を受領する。
④ 担当者がレンタル商品の返却の確定ボタンを押すと、レンタル業務システムは、貸出明細に関連付けたレンタル商品の貸出可否状態を“貸出可”にする。同時に貸出明細と会員情報の内容を更新する。これによって、レンタル商品の返却が完了する。
(4) 貸出中のレンタル商品のチェック処理
レンタル業務システムは、閉店後に毎日、貸出中のレンタル商品の延滞チェックを行っており、延滞が発生した場合は、会員情報の貸出中延滞数を更新する。
〔レンタル業務システムのUML図〕
図3はレンタル業務システムのクラス図、図4はレンタル商品の貸出し手順における③の操作が行われたときのシーケンス図である。
なお、図3のクラス図には、エンティティクラスだけを記載している。
設問1:
問題文を見る 図3中のに入れる正しい答えを、解答群の中から選べ。ここで、b1とb2に入れる答えは、bに関する解答群の中から組合せとして正しいものを選ぶものとする。
aに関する解答群
ア:延滞日数
イ:延滞料金
ウ:貸出期間
エ:貸出料金
オ:登録年月日
bに関する解答群


模範解答
a:ウ、b:ウ
解説
解答の導き方
図3は、UML(Unified Modeling Language:システムの構造や動きを図で表す記法)のクラス図です。クラス図の多重度は、あるクラスの1件に対して、関連する相手が何件あるかを示します。
aについて
aは、「貸出」クラスの項目です。本文では「貸出期間は1日、2日、1週間のいずれか」とあり、返却予定年月日は貸出期間と本日日付から計算すると説明されています。
さらに、貸出情報は「返却予定年月日ごとにまとめて」登録します。貸出年月日が同じで、返却予定年月日も同じなら、貸出期間も同じになります。そのため、「貸出」クラスの項目に入るのは貸出期間です。
一方、貸出料金や延滞料金は、商品ごとに異なる金額です。図3では、これらは商品ごとの情報を持つ「貸出明細」クラスの項目です。したがって、aは解答群のウです。
bについて
本文には「貸し出すレンタル商品ごとに貸出明細番号を割り当てて貸出明細の情報として登録する」とあります。つまり、貸出明細1件は、貸し出すレンタル商品1件に対応します。図3で「レンタル商品」側に付く多重度は必ず1なので、b2は1です。
次に、レンタル商品1件に対して、貸出明細は0件または1件です。貸出可のときは貸出中の貸出明細との対応がなく、貸出中のときは貸出明細1件と対応します。1つの商品が同時に複数の貸出明細に対応することはありません。したがって、「貸出明細」側に付く多重度は0..1となり、b1は0..1です。
この組合せに当たるのは、解答群のウです。
誤りやすいポイント
- 多重度は、その表示の近くにあるクラスの件数を表します。「貸出明細」側の多重度は、レンタル商品1件に関連する貸出明細の件数です。
- 貸出明細1件に商品が複数含まれると考えないようにします。本文では商品ごとに貸出明細番号を割り当てています。
- 貸出料金は、貸出期間だけでは決まりません。図2では、同じ返却予定年月日の商品でも貸出料金が異なるため、商品ごとの「貸出明細」に置かれます。
- 0..1は「0件または1件」、1は「必ず1件」です。0..1を「1件以上」と読み違えないようにしましょう。
FAQ
Q: なぜレンタル商品1件に対する貸出明細は0件の場合があるのですか?
A: 商品が貸出可のときは、貸出中の貸出明細との対応がないためです。貸出中になれば、対応する貸出明細が1件あります。
A: 商品が貸出可のときは、貸出中の貸出明細との対応がないためです。貸出中になれば、対応する貸出明細が1件あります。
Q: 貸出料金も「貸出」クラスに置くのではないのですか?
A: 「貸出」は返却予定年月日ごとにまとめられます。同じ貸出の中でも商品によって料金が異なるため、商品ごとの情報である「貸出明細」に置きます。
A: 「貸出」は返却予定年月日ごとにまとめられます。同じ貸出の中でも商品によって料金が異なるため、商品ごとの情報である「貸出明細」に置きます。
Q: 返却予定年月日が分かれば、貸出期間は不要ではありませんか?
A: 日付から貸出期間を計算することはできますが、設問では図3のクラスの項目を選びます。貸出期間は貸出の情報として扱われているため、aに入ります。
A: 日付から貸出期間を計算することはできますが、設問では図3のクラスの項目を選びます。貸出期間は貸出の情報として扱われているため、aに入ります。
関連キーワード: UML、クラス図、多重度、関連、集約、汎化
設問2:
問題文を見る 図4中のに入れる正しい答えを、解答群の中から選べ。
c, dに関する解答群
ア:貸出期間
イ:貸出期間、単価
ウ:貸出期間、単価、本日日付
エ:貸出期間、本日日付
オ:単価、返却予定年月日
カ:単価、返却予定年月日、本日日付
模範解答
c:エ、d:ア
解説
解答の導き方
この設問では、図4の処理に渡す情報として、cとdに何を入れるかを考えます。処理に渡す値を「引数」といいます。まず、それぞれの処理が何を求めているかを確認しましょう。
-
cは、返却予定年月日を計算するための情報です。
図4では、貸出処理が自分自身に「返却予定年月日を計算する」という処理を行っています。本文には、返却予定年月日は「貸出期間と本日日付から自動計算する」とあります。
つまり、計算に必要なのは貸出期間と本日日付です。貸出料金を求める処理ではないため、単価は必要ありません。したがって、cには「貸出期間、本日日付」を渡します。解答群ではエです。 -
dは、貸出料金を取得するための情報です。
図4では、商品情報から貸出料金を取得するために、貸出料金の情報を持つクラスに問い合わせています。図3では、貸出料金に「貸出期間」「単価」「1日分の延滞料金」があり、商品情報と貸出料金が関連付けられています。
ここで必要なのは、貸出期間に合った貸出料金を選ぶための情報です。貸出期間を渡せば、該当する貸出料金の情報から単価を取得できます。単価は取得する結果であり、問い合わせの条件として渡すものではありません。したがって、dには「貸出期間」を渡します。解答群ではアです。
誤りやすいポイント
-
返却予定年月日の計算に単価を含める
返却予定年月日は、本文のとおり貸出期間と本日日付を使って求めます。料金は日付の計算に関係しません。 -
貸出料金を取得するときに単価を渡す
単価は貸出料金として取得する情報です。取得するための条件は貸出期間です。 -
本日日付を貸出料金の取得にも使う
本日日付は返却予定年月日の計算に使います。図4の貸出料金の取得では、貸出期間を条件として料金情報を求めます。
FAQ
Q: cの「本日日付」は、なぜ必要なのですか?
A: 返却予定年月日は、いつから貸し出すかを基準に決めるためです。貸出期間だけでは、具体的な返却予定年月日を計算できません。
A: 返却予定年月日は、いつから貸し出すかを基準に決めるためです。貸出期間だけでは、具体的な返却予定年月日を計算できません。
Q: dに「貸出期間」と「単価」の両方を渡すのではないのですか?
A: 貸出期間を使って、該当する単価を含む貸出料金の情報を取得します。単価は取得する側の情報なので、渡す条件には含めません。
A: 貸出期間を使って、該当する単価を含む貸出料金の情報を取得します。単価は取得する側の情報なので、渡す条件には含めません。
Q: 図4の「自己メッセージ」とは何ですか?
A: オブジェクトが、自分自身の処理を呼び出すことを表す記号です。図4では、貸出処理が返却予定年月日を計算する処理を呼び出しています。
A: オブジェクトが、自分自身の処理を呼び出すことを表す記号です。図4では、貸出処理が返却予定年月日を計算する処理を呼び出しています。
関連キーワード: UMLシーケンス図、クラス図、メッセージ、引数、オブジェクト間の関連
設問3:
問題文を見る 次の記述中のに入れる適切な答えを、解答群の中から選べ。ここで、e1とe2に入れる答えは、eに関する解答群の中から組合せとして適切なものを選ぶものとする。
CDクラス、DVDクラス、書籍クラスは商品情報を特化して実現しているので、商品情報クラスをe1している。図4中のαの部分は、貸出処理クラスから商品情報クラスに対する商品概要を取得する要求のメッセージである。商品概要とは、CDならば編曲者と再生時間、DVDならば監督、主演及び再生時間、書籍ならば著者名、ページ数及びISBNから生成する当該商品の商品概要を表現する文字列である。商品概要を取得するためのメッセージを受信した商品情報インスタンスは、クラスに応じて異なる処理が実行される。一方、貸出処理クラスはクラスや処理の違いを意識せず、全てを商品情報として取り扱うことができる。この性質をe2という。
eに関する解答群


模範解答
e:イ
解説
解答の導き方
この設問は、商品情報クラスと、その下位にあるCDクラス、DVDクラス、書籍クラスの関係と、商品概要を取得するときの振る舞いから、二つの用語を選ぶ問題です。
-
e1は、クラスどうしの関係から考えます。
問題文には、CDクラス、DVDクラス、書籍クラスが「商品情報を特化して実現している」とあります。図3でも、CD、DVD、書籍が商品情報の下位クラスとして示されています。
上位クラスの性質を下位クラスが引き継ぐことを、インヘリタンス(継承)といいます。したがって、e1には「インヘリタンス」が入ります。 -
e2は、商品概要を取得するときの振る舞いから考えます。
商品情報の種類によって、商品概要に使う項目は異なります。CDなら編曲者と再生時間、DVDなら監督、主演及び再生時間、書籍なら著者名、ページ数及びISBNを使います。
それでも、貸出処理クラスは商品情報の種類ごとの違いを意識せず、商品概要を取得する要求を出せます。同じ要求を受けても、実際の商品情報の種類に応じて異なる処理が行われる性質を、ポリモーフィズム(多態性)といいます。したがって、e2には「ポリモーフィズム」が入ります。
この組合せに当てはまるのは、e1が「インヘリタンス」、e2が「ポリモーフィズム」である「イ」です。
誤りやすいポイント
-
インヘリタンスとポリモーフィズムを混同しないようにします。
インヘリタンスは、クラスどうしの「上位・下位」の関係です。ポリモーフィズムは、同じ要求に対して、実際のクラスに応じて異なる処理を行える性質です。 -
e2をカプセル化としないようにします。
カプセル化は、データや処理の内部を外から直接扱わせず、決められた方法で利用させる考え方です。この設問では、商品情報の種類に応じて処理が変わることがポイントなので、ポリモーフィズムが適切です。 -
商品概要の項目の違いだけで判断しないようにします。
大切なのは、CD、DVD、書籍で項目が異なることだけではありません。貸出処理クラスが種類ごとの違いを意識せず、同じ要求で扱えることがポリモーフィズムの根拠です。
FAQ
Q: 商品情報クラスは、CDクラス、DVDクラス、書籍クラスのどれに当たりますか?
A: 商品情報クラスは上位クラスです。CDクラス、DVDクラス、書籍クラスは、それぞれ商品情報をより具体的にした下位クラスです。
A: 商品情報クラスは上位クラスです。CDクラス、DVDクラス、書籍クラスは、それぞれ商品情報をより具体的にした下位クラスです。
Q: 同じ要求なのに、異なる処理になるのはなぜですか?
A: 要求を受け取る商品情報インスタンスの種類が異なるからです。CDならCDに必要な項目、書籍なら書籍に必要な項目を使って商品概要を作ります。
A: 要求を受け取る商品情報インスタンスの種類が異なるからです。CDならCDに必要な項目、書籍なら書籍に必要な項目を使って商品概要を作ります。
Q: カプセル化も、処理の違いを外から見せない考え方ではありませんか?
A: 内部の詳細を外から隠す点では関係しますが、この設問が問うのは、同じ要求への処理がクラスに応じて変わる性質です。その性質を表す用語はポリモーフィズムです。
A: 内部の詳細を外から隠す点では関係しますが、この設問が問うのは、同じ要求への処理がクラスに応じて変わる性質です。その性質を表す用語はポリモーフィズムです。
関連キーワード: インヘリタンス、ポリモーフィズム、カプセル化、クラス、汎化関係





