LoginSignup
0
0

More than 1 year has passed since last update.

[オブジェクト指向]某コーヒーショップの注文をイメージしてプログラムを書いてみた。

Last updated at Posted at 2022-01-10

アウトプット用!!
第7回目は
has-aの関係を意識してプログラムを行なっていく!
(has-a)とはあるクラスが別のクラスをフィールドとして利用している関係のことです。
例えば、Hero型のクラスとSword型のクラスがあるとしてHeroクラスのメンバ変数にSwordクラスのデータが使えるようになるイメージです。よって勇者は剣を持っている(has-a)の関係が成り立つ。

今回作成したプログラムは(has-a)を意識して作成しました。
SetMenuクラスはMenuクラスを持っている(has-a)の関係が成り立つので、SetMenuクラスでMenuクラスのデータが使えるようになる。

早速コードをみていきましょう。

Main.java
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();

        }

Menu.java
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 + "円");
    }
}
SetMenu.java
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 + "円");
    }

}
NomalMenu.java
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クラスのデータが使えるようになった。

処理結果

コンソール.java
モーニングセット:20%引き
---
コーヒー:350
サンドイッチ:300
---
セット価格:520

*モーニングセットの場合20パーセント引きに、バリューセットの場合は30%引きに。通常の場合は割引なし。

以上です。

 お疲れさまでした。
 これからも楽しみながらプログラムがんばりたいと思います。
 今回のコードはもっと簡潔に書けると思うので、もしよかったらご教授お願いいたします。

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0