0
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

classの分割について(Java)

Last updated at Posted at 2020-02-23

#classの分割の必要性
以下のような冗長なコードを記述していると可読性が悪化します。
実行部分とロジック部分を同じファイルに記述しているためです。
この記事では実行部分をMainクラス、ロジック部分をpersonクラスに分割する手順について以下の順で記述しております。

  1. Personクラスの定義
  2. Personクラスにロジック部分のメソッドを移動
  3. Personクラスのメソッドを呼び出すように変更
Main.java
public class Main {
  public static void main(String[] args) {
    printData(fullName("Kate", "Jones"), 27, 1.6, 50.0);
    printData(fullName("John", "Christopher", "Smith"), 65, 1.75, 80.0);
  }
  
  public static void printData(String name, int age, double height, double weight) {
    System.out.println("私の名前は" + name + "です");
    System.out.println("年齢は" + age + "歳です");
    System.out.println("身長は" + height + "mです");
    System.out.println("体重は" + weight + "kgです");

    double bmi = bmi(height, weight);
    System.out.println("BMIは" + bmi + "です");

    if (isHealthy(bmi)) {
      System.out.println("標準値です");
    } else {
      System.out.println("標準値の範囲外です");
    }
  }

  public static String fullName(String firstName, String lastName) {
    return firstName + " " + lastName;
  }

  public static String fullName(String firstName, String middleName, String lastName) {
    return firstName + " " + middleName + " " + lastName;
  }
  
  public static double bmi(double height, double weight) {
    return weight / height / height;
  }

  public static boolean isHealthy(double bmi) {
    return bmi >= 18.5 && bmi < 25.0;
  }
}

#Personクラスの定義
上記のMain.javaは以下の構成で記述しています。

  • 実行部分
  • mainメソッド
  • ロジック部分
  • printDataメソッド
  • fullNameメソッド
  • bmiメソッド
  • isHealthyメソッド

まず、Person.javaを作成しPersonクラスを定義します

Person.java
 class Person {
}

#Personクラスにロジック部分のメソッドを移動
次に、mainクラスのロジック部分をPersonクラスに移動させます。

  • ロジック部分
  • printDataメソッド
  • fullNameメソッド
  • bmiメソッド
  • isHealthyメソッド
Person.java
 class Person {
   public static void printData(String name, int age, double height, double weight) {
    System.out.println("私の名前は" + name + "です");
    System.out.println("年齢は" + age + "歳です");
    System.out.println("身長は" + height + "mです");
    System.out.println("体重は" + weight + "kgです");

    double bmi = bmi(height, weight);
    System.out.println("BMIは" + bmi + "です");

    if (isHealthy(bmi)) {
      System.out.println("標準値です");
    } else {
      System.out.println("標準値の範囲外です");
    }
  }

  public static String fullName(String firstName, String lastName) {
    return firstName + " " + lastName;
  }

  public static String fullName(String firstName, String middleName, String lastName) {
    return firstName + " " + middleName + " " + lastName;
  }
  
  public static double bmi(double height, double weight) {
    return weight / height / height;
  }

  public static boolean isHealthy(double bmi) {
    return bmi >= 18.5 && bmi < 25.0;
  }
}
Main.java
public class Main {
  public static void main(String[] args) {
    printData(fullName("Kate", "Jones"), 27, 1.6, 50.0);
    printData(fullName("John", "Christopher", "Smith"), 65, 1.75, 80.0);
  }
}

#Personクラスのメソッドを呼び出すように変更
分割できましたが、このままMainクラスを実行するとエラーになります。
最後に、MainクラスにPersonクラスのメソッドを呼び出すための記述を以下のように追加します。

Main.java
public class Main {
  public static void main(String[] args) {
    Person.printData(Person.fullName("Kate", "Jones"), 27, 1.6, 50.0);
    Person.printData(Person.fullName("John", "Christopher", "Smith"), 65, 1.75, 80.0);
  }
}

これで問題なく実行できます。

0
6
1

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
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?