インタフェースに関する問題です。
1.インタフェースの作成
次のアウトプットとソースコードに整合するようにインタフェース、IPhone,IBrouser,ICamera,IMusicPlayerを作りなさい。
SmartPhoneクラスは各々のインタフェースの抽象メソッドをオーバーライドしているものとします。
<アウトプット>
音楽を再生する Webを見る 電話を受ける 電話をかける 写真を撮影する 写真を表示する |
<ソースコード>
2.オリジナルクラスの作成
IPhoneをimplementsしたMyPhoneクラス、
IBrouserをimplementsしたMyBrouserクラス、
ICameraをimplementsしたMyCameraクラス、
IMusicPlayerをimplementsしたMyMusicPlayerクラスをそれぞれ作りなさい
3.Comparableインタフェースの実装
以下のクラスを作成しなさい。
スーパークラス abstract Figure
役割:図形を表現する抽象クラス。 java.lang.Comparableインタフェースを実装する。
フィールド
フィールド名 | アクセス修飾子 | 型 | 役割 |
area | protected | double | 図形の面積を保持する(面積は少数第2位四捨五入1位表示) |
メソッド
メソッド名 | アクセス修飾子 | 戻り値の型 | 役割 |
compareTo(Object o) | public | int | Comparableインタフェースの同名メソッドの実装(オーバーライド) |
サブクラス1 Rectangle extends Figure
役割:図形の一種である四角形を表現する。
フィールド
フィールド名 | アクセス修飾子 | 型 | 役割 |
x | private | double | 四角形の横幅を保持する |
y | private | double | 四角形の縦幅を保持する |
コンストラクタ
役割:全てのフィールドを適切に初期化する
メソッド
メソッド名 | アクセス修飾子 | 戻り値の型 | 役割 |
toString() | public | String | Rectangle{area=xx.x}という文字列表現を返す。(オーバーライド) |
サブクラス2 Circle extends Figure
役割:図形の一種である円を表現する。
フィールド
フィールド名 | アクセス修飾子 | 型 | 役割 |
r | private | double | 円の半径を保持する |
コンストラクタ
役割:全てのフィールドを適切に初期化する
メソッド
メソッド名 | アクセス修飾子 | 戻り値の型 | 役割 |
toString() | public | String | Circle{area=xx.x}という文字列表現を返す。(オーバーライド) |
<テストクラスの例>
<結果の例>
Circle{area=78.5}のほうがRectangle{area=70.0}より大きいです。 |
4.移譲を使って依存性を無くす
MyOs version2を搭載したMyPad、MyMac、MyPhoneがある。(以下、各機器と略す)
各機器のクラスは以下の通りである。
以下は、上記クラスのテストクラスである。
このとき、OSをバージョンアップして以下のMyOsV3にしたい。
しかし、今のままでは、OSと各機器が密結合してしまっており、OSを替えるにはそれぞれの機器のコードを修正する必要がある。
そこで、以下のクラス図を参考に、依存性を無くしてほしい。
つまり、OSのバージョンが3,4,5と上がったとしても各機器のクラスを変更する必要がないようにしてほしいのである。

<Q04のソースコード>
<結果>
MyOs version2を起動します。 MyOs version3を起動します。 |
5.オリジナルインタフェースの作成
あなたの理想の機能を抽象メソッドとして持つインタフェース達を作成しなさい。
インタフェース名は自由とします。
あなたの理想のインタフェース達をimplementsした理想のクラスを作成しなさい。