Integrasi Penanganan Pengecualian
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 82 dari 87.
Tantangan
MudahMari buat Library Management System-mu lebih tangguh dengan mengintegrasikan penanganan exception yang tepat! Sistem perpustakaan sungguhan perlu menangani kondisi error dengan baik: apa yang terjadi saat seseorang mencoba meminjam buku yang tidak ada, atau saat pengguna mencoba meminjam lebih banyak buku daripada batas yang diizinkan? Kamu akan membuat exception khusus yang memberikan masukan yang bermakna untuk situasi ini.
Kamu akan melanjutkan pengembangan kode yang sudah ada di enam file:
Book.java: Pertahankan class Book-mu dengan semua fungsi yang sudah ada: isbn, title, author, isAvailable, borrowedBy, getDetails(), serta getter/setter yang sesuai.User.java: Pertahankan class User-mu dengan id, name, ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount(), dan toString().LibraryException.java: Buat class exception khusus dasar bernamaLibraryExceptionyang memperluasException. Class ini akan menjadi class induk untuk semua exception khusus perpustakaan. Sertakan constructor yang menerima pesan dan meneruskannya ke class induk.BookNotAvailableException.java: Buat exception khusus yang memperluasLibraryException. Exception ini harus dilempar saat seseorang mencoba meminjam buku yang sudah dipinjam. Sertakan constructor yang menerima ISBN buku dan membuat pesan yang bermakna sepertiBook not available: [isbn].Library.java: Perbarui class Library-mu agar melempar exception alih-alih mencetak pesan error. Ubah methodborrowBook(String userId, String isbn)agar:- Melempar
LibraryExceptiondengan pesanUser not found: [userId]jika pengguna tidak ada - Melempar
LibraryExceptiondengan pesanBook not found: [isbn]jika buku tidak ada - Melempar
BookNotAvailableExceptionjika buku sudah dipinjam - Jika berhasil, membuat pengguna meminjam buku dan mengembalikan pesan konfirmasi
[userName] borrowed [bookTitle]
Ubah tanda tangan method menjadi
throws LibraryExceptiondan ubah tipe kembalian menjadiString.Pastikan semua method lain (addBook, registerUser, findBookByIsbn, findUserById, returnBook, removeBook, searchByTitle, searchByAuthor, getAvailableBooks) tetap berfungsi seperti sebelumnya.
- Melempar
Main.java: Tunjukkan penanganan exception-mu! Kamu akan menerima string berisi perintah yang dipisahkan koma. Setiap perintah mengikuti salah satu format berikut:ADD_BOOK:isbn:title:authorREGISTER_USER:id:nameBORROW:userId:isbn
Proses setiap perintah. Untuk ADD_BOOK, cetak
Added: [title]. Untuk REGISTER_USER, cetakRegistered: [name]. Untuk perintah BORROW, gunakan blok try-catch untuk menangani exception. Jika berhasil, cetak pesan konfirmasi. Jika terjadiLibraryException, cetakError: [exception message].Setelah memproses semua perintah, cetak
Operations completed.
Kamu akan menerima satu input: string berisi perintah yang dipisahkan koma.
Contohnya, dengan input ADD_BOOK:ISBN-001:Clean Code:Robert Martin,REGISTER_USER:U001:Alice,BORROW:U001:ISBN-001,BORROW:U001:ISBN-001,BORROW:U002:ISBN-001, output-mu akan menjadi:
Added: Clean Code
Registered: Alice
Alice borrowed Clean Code
Error: Book not available: ISBN-001
Error: User not found: U002
Operations completedPerhatikan bagaimana exception khusus memberikan pesan error yang jelas dan spesifik. Peminjaman pertama berhasil, peminjaman kedua gagal karena buku sudah dipinjam (BookNotAvailableException), dan peminjaman ketiga gagal karena pengguna U002 tidak ada (LibraryException). Pendekatan ini membuat sistem perpustakaanmu memberikan lebih banyak informasi dan lebih mudah di-debug daripada pesan error umum!
Coba sendiri
import java.util.Scanner;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca perintah yang dipisahkan koma
String input = scanner.nextLine();
String[] commands = input.split(",");
// Buat Library dan AdminService
Library library = new Library();
AdminService adminService = new AdminService(library);
// Proses setiap perintah
for (String command : commands) {
String[] parts = command.split(":");
String operation = parts[0];
if (operation.equals("ADD_BOOK")) {
String isbn = parts[1];
String title = parts[2];
String author = parts[3];
if (adminService.addBook(isbn, title, author)) {
System.out.println("Added: " + title);
}
} else if (operation.equals("REMOVE_BOOK")) {
String isbn = parts[1];
if (adminService.removeBook(isbn)) {
System.out.println("Removed: " + isbn);
} else {
System.out.println("Cannot remove: " + isbn);
}
} else if (operation.equals("REGISTER_USER")) {
String id = parts[1];
String name = parts[2];
if (adminService.registerUser(id, name)) {
System.out.println("Registered: " + name);
}
} else if (operation.equals("BORROW")) {
String userId = parts[1];
String isbn = parts[2];
// TODO: Gunakan blok try-catch untuk memanggil library.borrowBook(userId, isbn)
// Jika berhasil, cetak pesan konfirmasi yang dikembalikan
// Jika terjadi LibraryException, cetak "Error: " + e.getMessage()
}
}
// TODO: Cetak "Operations completed"
}
}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