Commits

Takayuki KONDO committed 537aa21

add README sjis-dos

  • Participants

Comments (0)

Files changed (1)

File curry/README

+2012-06-24 Java&OO道場 問題
+
+タイトル:継承とインタフェースの理解度テスト
+
+内容:Java(オブジェクト指向)の基本的な
+   「継承」と「インタフェース」及びそれを利用した
+   デザインパターンについての理解度を確認するためのテスト。
+
+問題
+
+(背景)
+ あなたは今からカレーを作ろうとしています。
+ 1.まずは材料を買ってきましょう。
+   材料は牛肉、玉ねぎ、人参、それと香辛料です
+
+ 2.次にその材料で料理をしましょう。
+   料理は、下拵えして、煮込んで、盛り付けして完成です。
+
+【材料購入】
+その1 1.下記の仕様に従って7つのクラスを作成しなさい。
+
+   ・1つ目のクラスのクラス名は「Meat」とする。
+    特にフィールド(プロパティ)、メソッドは持たせない。
+    ただし、抽象クラスとして定義する。
+   
+   ・2つ目のクラスのクラス名は「Beef」とする。
+    BeefはMeatクラスを継承した、「牛肉」を表現するクラスとする。
+   
+   ・3つ目のクラスのクラス名は「Vegetables」とする。
+    特にフィールド(プロパティ)、メソッドは持たせない。
+    ただし、抽象クラスとして定義する。
+   
+   ・4つ目のクラスのクラス名は「Carrot」とする。
+    CarrotはVegetablesクラスを継承した、「人参」を表現するクラスとする。
+
+   ・5つ目のクラスのクラス名は「Onion」とする。
+    OnionはVegetablesクラスを継承した、「玉ねぎ」を表現するクラスとする。
+   
+   ・6つ目のクラスは「Spice」とする。
+    特にフィールド(プロパティ)、メソッドは持たせない。
+   
+   ・7つ目のクラスは「ShoppingMain」とする。
+    以降の作業でプログラム実行を行うためのmainメソッドを持つ。
+    mainメソッドの中で、「Beef」「Carrot」「Onion」「Spice」の
+    インスタンスを生成する。
+    ⇒ コンパイルが通る事を確認する為だけの作業なので、
+      インスタンス生成の他は特に何もしなくても良い
+   
+その1 2.下記の仕様に従ってクラス・インタフェースを追加し、
+      関連するクラスの修正をしなさい。
+
+   ・1つ目のインタフェースのインタフェース名は「Item」とする。
+    値段を取得するためのメソッド「int getPrice」を持つ。
+    また、「Meat」「Vegetables」「Spice」の各クラスは
+    このインタフェースを実装する。
+
+   ・1つ目のクラスのクラス名は「CalcItems」とする。
+    このクラスは「Item」の配列を引数に持ち、値段の合計を
+    返す【クラス】メソッド「sumItemsPrice()」を持つ。
+
+   ・その1 1.で作成した「ShoppingMain」クラスに
+    以下の修正を加える。
+    ・Carrotのインスタンスを1つ、Onionのインスタンスを2つ、
+     Beefのインスタンスを2つ、Spiceのインスタンスを1つ作成する。
+    ・それぞれの値段は「Carrot=100円」、「Onion=150円」
+     「Beef=300円」「Spice=50円」とする。
+    ・作ったインスタンスを「Item」を型に持つArrayListに格納する。
+    ・CalcItemsクラスの「sumItemsPrice()」メソッドを利用し、
+     合計金額を求める。
+
+(応用編)
+その1 3.下記の仕様に従ってクラスの追加・修正をしなさい。
+   ・CalcItems クラスをシングルトン化する。
+
+その1 4.下記の仕様に従ってクラスの追加・修正をしなさい。
+   ・Vegetables クラスに「getPrice()」の実装を行い、
+    デフォルト値として50円を返すようにする。
+
+   ・「Pig」クラスを新たに作成し、Beefクラスと入れ替える。
+     また、その際金額は「200円」とする。
+
+
+【調理実施】
+その2 1.下記の仕様に従って1つのインタフェース、2つのクラスを作成しなさい。
+
+   ・1つ目のインタフェースのインタフェース名は「Foods」とする。
+     ・食材を下拵えするための抽象メソッド「void prepare()」を持つ。
+      (このメソッドは、例としてコンソールに「(食材を)切りました」
+       という表示をさせる事を期待している)
+     ・食材の名称(String)を取得するための抽象メソッド「getName()」を持つ
+   
+   ・1つ目のクラスのクラス名は「CurryCooking」とする。
+    カレーを作るための料理用メソッド「cook()」、
+	下拵え用メソッド「prepare()」と
+    煮込み用メソッド「boil()」、盛り付け用メソッド「dishingUp()」メソッド
+	を持つ。
+    各メソッドの仕様は以下の通り。
+
+    ・「cook()」・・・このメソッドは下記のメソッドを呼び出し、調理する事
+	を期待している。
+
+    ・「prepare()」・・・「ArrayList<Foods>」を引数に取り、
+      メソッド内でListに格納されたFoodsインスタンスの「prepare()」
+	    メソッドを呼び出し、各食材の下拵えをする。
+      (このメソッドは、例としてコンソールに「人参を切りました」
+       という表示をさせる事を期待している)
+
+    ・「boil()」・・・同じく「ArrayList<Foods>」を引数に取り、
+      メソッド内でListに格納されたFoodsインスタンスの「getName()」
+	    メソッドを呼び出し、各食材の調理をする。
+      (このメソッドは、例としてコンソールに
+       「「人参」「牛肉」「玉ねぎ」「スパイス」を入れて煮込みました」
+       という表示をさせる事を期待している)
+
+    ・「dishingUp()」・・・このメソッドは出来上がった料理を盛り付けを行う。
+      (このメソッドは、例としてコンソールに
+       「出来上がったカレーを皿に盛り付けました」
+       という表示をさせる事を期待している)
+
+   ・2つ目のクラスのクラス名は「CookingMain」とする。
+    以降の作業でプログラム実行を行うためのmainメソッドを持つ。
+    mainメソッドの中で、「Beef」「Carrot」「Onion」「Spice」の
+    上記1 2.で実施したものと同様にインスタンスを生成する。
+    ただし、格納場所は「Foods」を型に持つArrayListとする。
+   
+   (※)上記を実施するために、各クラスに「Foods」の実装を行う事。
+      実装するクラスは具象クラス、抽象クラス、いずれでも良い。
+   
+その2 2.カレーの代わりに肉じゃがを作るための「NikuJagaCooking」クラスを
+      作成しなさい。
+      (CurryCooking をコピーして、dishingUp() メソッドを
+			   少し書き換えたらOK。
+       また、合わせてCookingMainクラスにも修正を加える事)
+
+その2 3.抽象クラス「Cooking」を作成して、「CurryCooking」「NikuJagaCooking」
+	をリファクタリングする。
+      (TemplateMethod化にチャレンジ)
+
+それでもまだ余裕があったら、、、
+ ・ShoppingMainのクラスからの引数(食材)の引継ぎ。
+ ・スタティックイニシャライザの利用。
+等にチャレンジしてみよう。