アウトプット用!!
第7回目は
has-aの関係を意識してプログラムを行なっていく!
(has-a)とはあるクラスが別のクラスをフィールドとして利用している関係のことです。
例えば、Hero型のクラスとSword型のクラスがあるとしてHeroクラスのメンバ変数にSwordクラスのデータが使えるようになるイメージです。よって勇者は剣を持っている(has-a)の関係が成り立つ。
今回作成したプログラムは(has-a)を意識して作成しました。
SetMenuクラスはMenuクラスを持っている(has-a)の関係が成り立つので、SetMenuクラスでMenuクラスのデータが使えるようになる。
早速コードをみていきましょう。
package ensyu;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
//現在日時を取得
Date dateObj = new Date();
SimpleDateFormat format = new SimpleDateFormat( "HH" );
String display = format.format( dateObj );
int num = Integer.parseInt(display);
//9時から10時はモーニングセットを注文
if(9 <= num && num <= 10) {
Menu drink = new Menu("コーヒー", 350);
Menu bread = new Menu("サンドイッチ",300);
SetMenu MorningSet = new SetMenu("モーニングセット",drink,bread, 0.8);
MorningSet.display();
//11時から13時まではバリューセットを注文
} else if(10 <= num && num <= 13 ) {
Menu drink = new Menu("アメリカン", 300);
Menu bread = new Menu("チョコクロ", 190);
SetMenu ValueSet = new SetMenu("バリューセット",drink,bread);
ValueSet.display();
//14時以降は通常メニューで注文
} else {
Menu drink = new Menu("コーヒー", 350);
Menu bread = new Menu("ザクザクドック", 390);
NomalMenu Nomal = new NomalMenu("通常メニュー",drink,bread, 0.7);
Nomal.display();
}
package ensyu;
public class Menu {
String name;
int price;
Menu(String name, int price) {
this.name = name;
this.price = price;
}
public void display() {
System.out.println(name + ":" + price + "円");
}
}
package ensyu;
public class SetMenu {
String name;
Menu drink;
Menu bread;
double tax;
SetMenu(String name, Menu drink, Menu bread, double rate) {
this.name = name;
this.drink = drink;
this.bread = bread;
this.tax = rate;
}
public void display() {
System.out.println(name + ":" + (int)(100 - (100 * rate))"%引き");
System.out.println("---");
//Menu has-a SetMenu(メニューはセットメニュを持っている)
drink.display();
bread.display();
System.out.println("---");
int price = (int)((drink.price + bread.price)*rate);
System.out.println("セット価格:"+ price + "円");
}
}
package ensyu;
public class NomalMenu {
String name;
Menu drink;
Menu bread;
NomalMenu(String name, Menu drink, Menu bread) {
this.name = name;
this.drink = drink;
this.bread = bread;
}
public void display() {
System.out.println(name);
System.out.println("---");
drink.display();
bread.display();
System.out.println("---");
int price = drink.price + bread.price;
System.out.println("合計金額は" + price + "円です");
}
}
#解説
##main.java
###①現在の時刻を取得
javaAPIで
###②現在時刻を取得できたらif文で条件分岐を行う。
9時から10時まではモーニングセットを注文。
11時から13時まではバリューセットを注文。
14時以降は通常メニューを注文。
###③インスタンスを作成する
MenuインスタンスとSetMenuインスタンスとNomalインスタンスを生成する。
インスタンス生成時に()の引数が、コンストラクタが自動実行される際にパラメータとして渡される。
例えば、Menu drink = new Menu("コーヒ", 350);の場合
Menuクラスのコンストラクタに引数の値が渡されるイメージ。
##SetMenu.java
main.javaでSetMenuインスタンスを生成する。生成時に引数にMenuインスタンスをセットして
SetMenuクラスのコンストラクタに引数の値が渡されるイメージ。
SetMenu has-a Menuが成り立つのでSetMenuクラスでMenuクラスのデータが使えるようになった。
##処理結果
モーニングセット:20%引き
---
コーヒー:350円
サンドイッチ:300円
---
セット価格:520円
##*モーニングセットの場合20パーセント引きに、バリューセットの場合は30%引きに。通常の場合は割引なし。
###以上です。
お疲れさまでした。
これからも楽しみながらプログラムがんばりたいと思います。
今回のコードはもっと簡潔に書けると思うので、もしよかったらご教授お願いいたします。