# Question14 - 共通の振る舞いの定義(インタフェース・抽象クラス相当) 本資料の練習問題は、複数のプログラミング言語(Java / C# / PHP / Python)で共通して利用できるよう記述されています。静的型付け・動的型付けの違いや文字列の連結ルールなど、言語固有の文法仕様に基づき、問題文の表現をご使用の言語の仕様に適宜読み替えて進めてください。 ## この問題のねらい - 「共通の振る舞いの定義」(実装内容を持たず、必ず用意しなければならない振る舞いの一覧だけを定めたもの。多くの言語で抽象クラス・インタフェースと呼ばれる仕組みに相当する)に従って、具体的な内容を実装できること - 同じ定義に従う実装であれば、中身が違っても同じ扱い方(呼び出し方)ができることを理解すること ## 「共通の振る舞いの定義」について この問題でいう「共通の振る舞いの定義」とは、それ自体はインスタンスを生成できず、必ず実装しなければならない振る舞いの名前・受け取る値・返す値の約束だけを定めたものです。この定義に含まれる各振る舞いは、中身を持たない「抽象メソッド」に相当します。 実際にインスタンスを生成して使うのは、その定義に従って中身を実装した具体的なクラス(例:後述の「本」の定義に従う「プログラミング基礎入門」の実装)です。具体的なクラス側では、定義された振る舞いのそれぞれについて、中身を実装(オーバーライド)する必要があります。使用する言語に用意されている、抽象クラスやインタフェースなど、この仕組みに相当する機能を使って表現してください。 以下の設問はそれぞれ独立したプログラムとして実装してください。 --- ## 設問1 「本」についての共通の振る舞いの定義を作成してください。この定義は、次の2つの振る舞いを必ず実装することを求めるものとします。 - 本のタイトルを返す - 本の章立ての一覧(章タイトルの並び)を返す 上記の定義に従い、「プログラミング基礎入門」を表す実装を作成してください。 - 本のタイトル:`プログラミング基礎入門` - 章立ての一覧(この順序で5件):`式と変数` / `制御構文` / `メソッド` / `オブジェクト指向` / `継承` 次の処理を行うプログラムを作成してください。 1. 上記の本のインスタンスを生成する 2. インスタンスから本のタイトルを取得し、出力する 3. インスタンスから章立ての一覧を取得し、出力する ### 期待される結果 - 手順2の出力:`プログラミング基礎入門` - 手順3の出力:一覧に含まれる5件の章タイトル `式と変数`・`制御構文`・`メソッド`・`オブジェクト指向`・`継承` が、この順序ですべて分かるように出力されていること(1行にまとめて出力しても、1件ずつ複数行に分けて出力してもよい) --- ## 設問2 「車」についての共通の振る舞いの定義を作成してください。この定義は、次の2つの振る舞いを必ず実装することを求めるものとします。 - ガソリンを補充する(補充量を表す数値を受け取る) - 走る(速度を表す数値を受け取る) 上記の定義に従い、「スポーツカー」を表す実装を作成してください。 - ガソリンを補充する:受け取った数値を x として、`ハイオクをxリットル補充した` と出力する - 走る:受け取った数値を x として、`スポーツカーは時速xキロで走った` と出力する。ただし、受け取った数値が `300` を超える場合は、その出力の代わりに `速度オーバーです` と出力する 次の処理を行うプログラムを作成してください。 1. 上記のスポーツカーのインスタンスを生成する 2. ガソリンを補充する振る舞いに `100` を渡して実行する 3. 走る振る舞いに `100` を渡して実行する 4. 走る振る舞いに `301` を渡して実行する ### 期待される結果 - 手順2の出力:`ハイオクを100リットル補充した` - 手順3の出力:`スポーツカーは時速100キロで走った` - 手順4の出力:`速度オーバーです`