はじめに
java初心者が備忘録的に書いています
参考文献:https://amzn.asia/d/5EFHrx4
良いクラス
良いクラスとはインスタンス変数とインスタンス変数を用いるメソッドが同じクラスに記述しているクラスのことをいう。
ではなぜ同じクラスにあったほうが良いのか。
データだけが記述されたデータクラスを例に考えてみる。
データだけが記述されたクラスではそのデータを使用した処理が様々なクラスで実装されることが予想される。そのためメンテナンスや追加機能を記述する際に様々なクラスファイルを見ないといけない。また、とある処理を行っているメソッドがどこにあるのかわからないので同じ動作をするコードが点在する可能性がある。
そのためインスタンス変数とインスタンス変数を用いるメソッドが同じクラスに記述しているクラスが良いクラスであるといえるのである。
今回はできるだけ良いクラスというお題で以下のクラスを作成してみた。
実装内容とは
- 名前と年齢を入力
- 何年後の年齢を知りたいか入力
- 表示
という流れである。(実装内容としてはくそしょうもない)
引数の値引き渡しミス防止でインスタンス変数を渡すように意識した。
Addage
package sample;
public class AddAge {
final int add;
public AddAge(int age) {
this.add = age;
}
public int returnAddage() {
return add;
}
}
AfterAge
package sample;
public class AfterAge {
final private int age;
final private String name;
final private AddAge addAge;
public int getAge() {
return age;
}
public String getName() {
return name;
}
public AddAge getAddAge() {
return addAge;
}
public AfterAge(final int age, final String name, final AddAge addAge) {
if(age < 0) {
throw new IllegalArgumentExeption("年齢が負の数字です");
}
if(name == null) {
throw new IllegalArgumentExeption("お名前を入力してください");
}
this.age = age;
this.name = name;
this.addAge = addAge;
}
public AfterAge addAge(final AfterAge year) {
int newAge = year.age + addAge.returnAddage();
return new AfterAge(newAge, this.name, addAge);
}
}
Main
package sample;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int age;
int after;
String name;
Scanner scanner = new Scanner(System.in);
System.out.println("お名前を入力");
name = scanner.next();
System.out.println("何歳ですか");
age = scanner.nextInt();
System.out.println("何年後の年齢が知りたいですか");
after = scanner.nextInt();
scanner.close();
AddAge addAge = new AddAge(after);
AfterAge afterAge = new AfterAge(age, name, addAge);
AfterAge ans = afterAge.addAge(afterAge);
System.out.println(afterAge.getName() + "さんの" + afterAge.getName() + "年後の年齢は" + ans.getAge() + "歳です");
}
}
処理内容はゴミみたいなものだがこんな感じで保守や維持、バグに強いクラス作成を意識したい。