問題

問11 次のJavaプログラムの説明及びプログラムを読んで、設問1、2に答えよ。

〔プログラムの説明〕
 携帯電話の利用状況に対して、最も安価な料金プラン(割引サービスを含む)を提示するプログラムである。1 か月の料金は、基本料金、通話料金及びパケット料金からなる。パケット料金にはオプションの割引サービスがある。
 表1に料金プラン、表2にパケット料金の割引サービス、表3にテスト用の利用状況を示す。
 なお、パケット料金を計算するとき、パケット数は 100 パケット単位に切り上げる。

(1)クラス CellPhonePlan は、料金プランを表す。メソッド calculateCharge は、引数で渡された利用状況に対する料金を返す。

(2)クラス CallingPlan は、通話料金を計算するクラスである。メソッド calculateCharge は、引数で渡された通話時間(分単位に切上げ)に対する料金を返す。

(3)インタフェース PacketPlan は、パケット料金を計算するためのインタフェースである。メソッド calculateCharge は、引数で渡されたパケット数に対する料金を返す。

(4)クラス Measured は、従量制のパケット料金(割引サービスなしの場合)を表す。

(5)クラス Tiered は、パケット料金の割引サービス S1 を表す。

(6)クラス CellPhonePlanner は、利用状況に対して、最も安価な料金プラン(割引サービスを含む)を提示する。メソッド getRecommendedPlan は、与えられた利用状況に対して、最も安価な料金プラン(割引サービスを含む)を返す。メソッド main は、テスト用のメインプログラムである。