BookクラスとUserクラス
CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 78/87。
チャレンジ
簡単前のレッスンで作成した Book クラスと User クラスを拡張して、Library Management System の構築を続けましょう。今回は、ユーザーが本を借りられる機能を追加し、この2つのエンティティの間に実際のつながりを作ります。
コードは3つのファイルに分けて整理します。
Book.java:前のチャレンジで作成した Book クラスを拡張します。既存のすべての機能(isbn、title、author、getter/setter を備えた isAvailable、そしてgetDetails())を維持してください。今回は、型がStringのborrowedByという private フィールドを追加します。このフィールドには、その本を借りたユーザーの ID(借りられていない場合はnull)を保存します。borrowedByの getter と、isAvailableも適切に更新する setter を追加してください。本が借りられたとき(borrowedBy に null 以外の値が設定されたとき)は利用できない状態になり、返却されたとき(null に設定されたとき)は再び利用可能になります。User.java:借りた本を追跡できるように User クラスを拡張します。既存の id、name、コンストラクター、getter、そしてtoString()を維持してください。borrowedBooksという名前の privateArrayList<Book>フィールドを追加し、コンストラクターで初期化します。指定された本をユーザーのリストに追加し、その本のborrowedByにこのユーザーの ID を設定するborrowBook(Book book)メソッドを作成してください。リストから本を削除し、borrowedByを null に設定するreturnBook(Book book)メソッドを作成してください。ユーザーが現在所持している本の冊数を返すgetBorrowedCount()メソッドも追加します。Main.java:貸し出しシステムが動作する様子を示します。5つの入力を受け取ります。本の ISBN、title、author、続いてユーザー ID と name です。これらの入力を使って Book と User を作成します。本の詳細と利用可能状況を出力します。次に、ユーザーに本を借りさせます。本の利用可能状況をもう一度出力し、その後、誰が借りたかを
Borrowed by: [userId]の形式で出力します。ユーザーが所持している本の冊数を[name] has [count] book(s)の形式で出力します。最後に、ユーザーに本を返却させ、利用可能状況をもう一度出力します。
入力は次の順序で5つ受け取ります:ISBN (String)、title (String)、author (String)、user ID (String)、user name (String)。
たとえば、入力が 978-0-13-468599-1、Effective Java、Joshua Bloch、U001、Alice の場合、出力は次のようになります。
[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: trueこのチャレンジは前回の取り組みを直接発展させたもので、本とユーザーの間に重要な関係を追加し、Library Management System を機能させます。コンポジション(User "has" Books)を使用し、適切に設計されたメソッドを通じて、あるオブジェクトへの変更が別のオブジェクトにどのような影響を与えるかを確認します。
自分で試してみよう
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 書籍情報を読み取る
String isbn = scanner.nextLine();
String title = scanner.nextLine();
String author = scanner.nextLine();
// ユーザー情報を読み取る
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// isbn、title、author で Book オブジェクトを作成する
Book book = new Book(isbn, title, author);
// userId と userName で User オブジェクトを作成する
User user = new User(userId, userName);
// getDetails() を使って本の詳細を出力する
System.out.println(book.getDetails());
// Print whether the book is available (format: "Available: true" or "Available: false")
System.out.println("Available: " + book.isAvailable());
// ユーザーに本を借りさせる
user.borrowBook(book);
// 本の利用可否を再度出力する
System.out.println("Available: " + book.isAvailable());
// 誰が借りたかを出力する
System.out.println("Borrowed by: " + book.getBorrowedBy());
// ユーザーが何冊の本を持っているかを出力する
System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
// ユーザーに本を返却させる
user.returnBook(book);
// 利用可否をもう一度出力する
System.out.println("Available: " + book.isAvailable());
}
}オブジェクト指向プログラミングのすべてのレッスン
4継承
継承の基本 (extends)super キーワードメソッドのオーバーライド (@Override)コンストラクタチェーンObject クラス単一継承と多段階継承なぜ多重継承ができないのかまとめ:従業員の階層構造自分で練習してみよう: Javaオンラインコンパイラ