class Buku dan Pengguna
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 78 dari 87.
Tantangan
MudahMari lanjutkan membangun Library Management System dengan mengembangkan class Book dan User dari pelajaran sebelumnya. Sekarang kamu akan menambahkan kemampuan bagi pengguna untuk meminjam buku, sehingga tercipta hubungan nyata antara kedua entitas ini.
Kamu akan menyusun kodemu dalam tiga file:
Book.java: Tingkatkan class Book-mu dari tantangan sebelumnya. Pertahankan semua fungsionalitas yang sudah ada (isbn, title, author, isAvailable beserta getter/setter, dangetDetails()). Sekarang tambahkan field privateborrowedBybertipeStringyang menyimpan ID pengguna yang meminjam buku (ataunulljika buku tidak dipinjam). Tambahkan getter untukborrowedBydan setter yang juga memperbaruiisAvailablesebagaimana mestinya. Saat buku dipinjam (borrowedBy diatur ke nilai non-null), buku menjadi tidak tersedia. Saat buku dikembalikan (diatur ke null), buku tersedia kembali.User.java: Kembangkan class User-mu agar dapat melacak buku yang dipinjam. Pertahankan id, name, constructor, getter, dantoString()yang sudah ada. Tambahkan field privateArrayList<Book>bernamaborrowedBooks(inisialisasikan di constructor). Buat methodborrowBook(Book book)yang menambahkan buku ke list pengguna dan mengaturborrowedBypada buku ke ID pengguna ini. Buat methodreturnBook(Book book)yang menghapus buku dari list dan mengaturborrowedByke null. Tambahkan methodgetBorrowedCount()yang mengembalikan jumlah buku yang sedang dimiliki pengguna.Main.java: Tunjukkan cara kerja sistem peminjaman. Kamu akan menerima lima input: ISBN, title, dan author sebuah buku, lalu ID dan nama pengguna.Buat Book dan User menggunakan input ini. Cetak detail dan status ketersediaan buku. Lalu, minta pengguna meminjam buku tersebut. Cetak kembali ketersediaan buku, diikuti informasi tentang siapa yang meminjamnya dengan format
Borrowed by: [userId]. Cetak jumlah buku yang dimiliki pengguna dengan format[name] has [count] book(s). Terakhir, minta pengguna mengembalikan buku dan cetak status ketersediaannya sekali lagi.
Kamu akan menerima lima input secara berurutan: ISBN (String), title (String), author (String), ID pengguna (String), dan nama pengguna (String).
Contohnya, dengan input 978-0-13-468599-1, Effective Java, Joshua Bloch, U001, dan Alice, output-mu akan menjadi:
[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: trueTantangan ini dibangun langsung dari pekerjaanmu sebelumnya, dengan menambahkan hubungan penting antara buku dan pengguna yang membuat sistem perpustakaan berfungsi. Kamu akan menggunakan composition (User "memiliki" Books) dan melihat bagaimana perubahan pada satu object dapat memengaruhi object lain melalui method yang dirancang dengan baik!
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca informasi buku
String isbn = scanner.nextLine();
String title = scanner.nextLine();
String author = scanner.nextLine();
// Baca informasi pengguna
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// Buat object Book dengan isbn, title, dan author
Book book = new Book(isbn, title, author);
// Buat object User dengan userId dan userName
User user = new User(userId, userName);
// Cetak detail buku menggunakan getDetails()
System.out.println(book.getDetails());
// Cetak apakah buku tersedia (format: "Available: true" atau "Available: false")
System.out.println("Available: " + book.isAvailable());
// Minta pengguna meminjam buku
user.borrowBook(book);
// Cetak lagi status ketersediaan buku
System.out.println("Available: " + book.isAvailable());
// Cetak siapa yang meminjam buku
System.out.println("Borrowed by: " + book.getBorrowedBy());
// Cetak jumlah buku yang dimiliki pengguna
System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
// Minta pengguna mengembalikan buku
user.returnBook(book);
// Cetak status ketersediaan sekali lagi
System.out.println("Available: " + book.isAvailable());
}
}Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi13Proyek: Manajemen Perpustakaan
Gambaran Umum Proyek dan Desain UMLclass Buku dan PenggunaSistem PeminjamanFitur PencarianAntarmuka AdminIntegrasi Penanganan PengecualianPengujian dan Integrasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online