前回記事、オブジェクト指向とは何なのかを簡単に説明してみるの練習題材です。
ここでは2つのオブジェクトを作成していきます。
成績オブジェクト:教科と点数などを保持
生徒オブジェクト:氏名と成績を保持
そして、生徒オブジェクトが成績オブジェクトを持つという構造を作っていきます。
目的
・オブジェクト指向プログラミングの練習する。
・オブジェクトを持つオブジェクトを作成できるようになる。
仕様
成績クラス
・クラス名:Grade
・以下のフィールドを持つ。
教科名(String)
点数(int)
合格点(int)
・コンストラクターの引数は、教科名、点数、合格点とする。
・以下のメソッドを持つ。
教科名の取得(引数:なし、戻り値:教科名[String])
点数の取得(引数:なし、戻り値;点数[int])
合格点の取得(引数:なし、戻り値:合格点[int])
合格の有無(引数:なし、戻り値:点数 >= 合格点の比較結果[boolean])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
/** * 成績クラス * */ public class Grade { // フィールド private String subject; private int score; private int passingScore; // コンストラクター Grade(String subject, int score, int passingScore){ this.subject = subject; this.score = score; this.passingScore = passingScore; } // メソッド public String subject() { return subject; } public int score() { return score; } public int passingScore() { return passingScore; } public boolean isPass() { return score >= passingScore; } } |
生徒クラス
・クラス名:Student
・以下のフィールドを持つ。
氏名(String)
成績表(成績オブジェクトをリストで保持する(List<Grade> ))
・コンストラクターの引数は、氏名とする。
・以下のメソッドを持つ。
成績の追加(引数:成績クラス、戻り値:なし)
氏名の取得(引数:なし、戻り値:氏名[String])
補習のリスト取得(引数:なし、戻り値:なし[void])
不合格の教科名を表示する
すべて合格であれば、補習が無い旨を表示する。
成績の総合計の取得(引数:なし、戻り値:総合計[int])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import java.util.ArrayList; import java.util.List; /** * 生徒クラス * */ public class Student { // フィールド private String name; private List<Grade> gradeBook = new ArrayList<>(); // コンストラクター Student(String name){ this.name = name; } // メソッド public void addGrade(Grade grade) { gradeBook.add(grade); } public String name() { return name; } public void listSupplementaryLesson() { int count = 0; for(Grade grade: gradeBook) { if(!grade.isPass()) { System.out.println(grade.subject()); count++; } } if(count==0) System.out.println("補習はありません。"); } public int totalScore() { int total = 0; for(Grade grade: gradeBook) { total += grade.score(); } return total; } } |
Mainクラス
・クラス名:Main
・生徒オブジェクトを2つ作成する。
・成績をいくつか追加する。
一人は不合格があるようにする。
もう一人はすべて合格であるようにする。
・補習を表示する。
・総合計点を氏名と共に表示する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
/** * Mainクラス * */ public class Main { public static void main(String...strings) { // 生徒オブジェクトを作成する。 Student taro = new Student("山田 太郎"); Student hanako = new Student("木下 花子"); // 成績をいくつか追加する。 int PASSING_SCORE = 60; // 一人は不合格があるようにする。 taro.addGrade(new Grade("数学", 80, PASSING_SCORE)); taro.addGrade(new Grade("国語", 60, PASSING_SCORE)); taro.addGrade(new Grade("英語", 59, PASSING_SCORE)); taro.addGrade(new Grade("社会", 100, PASSING_SCORE)); taro.addGrade(new Grade("理科", 40, PASSING_SCORE)); // もう一人はすべて合格であるようにする。 hanako.addGrade(new Grade("数学", 100, PASSING_SCORE)); hanako.addGrade(new Grade("国語", 100, PASSING_SCORE)); hanako.addGrade(new Grade("英語", 100, PASSING_SCORE)); hanako.addGrade(new Grade("社会", 100, PASSING_SCORE)); hanako.addGrade(new Grade("理科", 100, PASSING_SCORE)); // 補習を表示する。 System.out.println("---補習---"); System.out.println(taro.name()); taro.listSupplementaryLesson(); System.out.println(); System.out.println(hanako.name()); hanako.listSupplementaryLesson(); System.out.println(); // 総合計点を氏名と共に表示する。 System.out.println("---合計点---"); System.out.println(String.format("%sさんの合計点は、%d点です。", taro.name(), taro.totalScore())); System.out.println(String.format("%sさんの合計点は、%d点です。", hanako.name(), hanako.totalScore())); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 出力結果 ---補習--- 山田 太郎 英語 理科 木下 花子 補習はありません。 ---合計点--- 山田 太郎さんの合計点は、339点です。 木下 花子さんの合計点は、500点です。 |
まとめ
・オブジェクトのフィールドに他のオブジェクトを保持することができる。