ObjectSquare

[オブジェクト指向と情報処理試験 -2001年 春-]


ココが変だよ? 情報処理試験 -午後-


午前2001年 午前問題はこちらから



ソフトウェア開発技術者 午後1 問2

オブジェクト指向設計に関する次の記述を読んで、設問1〜3に答えよ。

図1の貸し出しカードを使って、本とCDの貸出しと返却の管理を行っている図書館がある。この図書館における貸出管理のシステムをオブジェクト指向で開発することになった。まず、扱っている本とCDに着目し、図2に示す“本”クラスと“CD”クラスを定義した。図2は、各クラスがタイトルなどの属性と、それらを参照する操作を持っていることを示す。図3にクラスの定義方法と、クラス間の関係の定義方法を示す。

図1.貸出カード  図2.”本”クラスと”CD”クラスの定義

図3.クラスの定義方法と関係の定義方法



設問1

"本"クラスと"CD"クラス共通のスーパクラスとして"貸出物"クラスを設けることにした。クラス間の構造を表現した図4を完成させよ。スーパクラスで定義した方がよいと考えられるものはすべてスーパクラスで定義し、サブクラスでは定義しないものとする。属性名及び操作名は、図2にあるものを使用すること。

図4.クラス構造(1)


(解答)
Uploaded Image

(コメント)

nope 属性の値の取得用の操作まで、いちいち明示的に示すべきなのだろうか?という部分は気になりますが、まあいいでしょう。



設問2

貸出履歴を管理するために、図1の貸出カードの項目である貸出日、返却日及び利用者を持つ"貸出履歴"クラスを設けることにした。"貸出物"クラスに対する貸出しや返却の処理はすべて、“貸出物”クラスから“貸出履歴”クラスに委譲されるものとする。図5の“貸し出し物”クラスと“貸出履歴”クラスの属性名及び操作名欄に適切な属性名と操作名を記述し、これらのクラスの定義を完成せよ。属性名及び操作名は要求されているものだけを書くこと。また、"本"クラスと"CD"クラスには何も書かないこと。

図5.クラス構造(2)


(解答)
Uploaded Image

(コメント)

MM 貸出物クラスに「貸出処理をする」と「返却処理をする」というメソッドは必要だと思いますか?
私が見た解答集には、貸出物クラスに、これらのメソッドは無かったのですが、私は必要だと思うのですが。いかがでしょうか?
nope てゆーか、そもそもモデルが変だと思うんだよね。

「貸出物」が「貸出履歴」を参照し、さらに「貸出」を集約しているとかならまだわかるんだけど。
図の中の「貸出履歴」は「貸出」と「貸出履歴」があいまいに交じり合ったようなクラスだよね。どっちを表したいのかよくわからん。

「貸出処理をする」と「返却処理をする」の操作が必要か、ということですが、「委譲する」と書いてあるのでやはり必要でしょう。該当する二つの操作が「貸出物」で定義されていない場合は、「貸出物」に対して「貸出履歴をくれ」などと言って、その次に「貸出処理したい」などと言わねばならなくなるので。



設問3

オブジェクト指向プログラミングに関する次の記述中の[a][g]に入れる適切な字句を答えよ。

オブジェクト指向プログラミングでは、[a]の概念を用いて[b]を介してデータを扱う。これによって、オブジェクト内部の[c]構造に変更があっても、呼出し側のプログラムを変更する必要がなく、保守性の向上が期待できる。

図4のクラス構造の場合、スーパクラスで定義した操作をサブクラスで再定義することもできる。これを[d]という。操作の再定義によって、同じ名前でも違った実装をもつことになる。実装が異なっても、それを呼び出すプログラムが違いを意識しなくてよいことを、[e]という。

プログラムによって生成されるオブジェクトの実体は、[f]領域に確保される。使用されなくなったオブジェクトの管理をプログラムで行うのは困難なので、[g]によって領域内の不必要なオブジェクトの整理を行い、領域の再利用を図る言語処理系がある。


(解答)

[a] カプセル
[b] メソッド
[c] データ
[d] オーバライド
[e] ポリモルフィズム
[f] ヒープ
[g] ガーベジコレクション

(コメント)

nope [a] カプセル化
[b] メッセージ
[c] データ
[d] オーバライド
[e] ポリモルフィズム
[f] メモリ
[g] ガーベジコレクション

[b]ですけど「メッセージ(送信)を介して」でしょう。メッセージを受け取ったオブジェクトが起動するものが「メソッド」です。

[e]は厳密にはポリモルフィズムの説明になっていないと思います。出題者の意図としてはそう書かせたいのはわかるんですけどね。

ポリモルフィズムは「多態性」などと書かれます。
同一のメッセージに対して、受け取ったオブジェクトがいろいろな異なる振る舞いをするので、「多態」なのです。

問題文の「実装が異なっても、それを呼び出すプログラムが違いを意識しなくてよいこと」は「ポリモルフィズムによって得られる恩恵、効果」の説明ではあっても、「ポリモルフィズム」の説明ではないですよね。

あと[f]ですが、ここはあえてメモリ。
「プログラムによって生成されるオブジェクトの実体」だけではヒープと限定してしまうのはちょっと憚られます。別にauto変数でも「プログラムによってstack上に作られる」ということは出来るしね。でも厳密に考えすぎるとかえって損をするのかも。
「プログラムによって"動的に"生成されるオブジェクトの実体...」とあれば迷いが無く、スパーンと解答できるんですけどね。
さわやか 私は、

[a] カプセル化
[b] メッセージ
[c] データ
[d] オーバーライド
[e] ポリモルフィズム
[f] メモリ
[g] ガーベジコレクション

と解答しました。
[f]はヒープと答えさせるのは引っ掛けか!?と裏を読んで答えたんですが、よくよく考えると出題者もそこまで考えてなかったのかもしれません。



© 2001 OGIS-RI Co., Ltd.
Prev
Prev.