Pengujian dan Integrasi
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 83 dari 87.
Tantangan
MudahSelamat karena telah membangun Sistem Manajemen Perpustakaan! Saatnya menyatukan semuanya dan memastikan semua komponen berfungsi dengan benar sebagai sebuah sistem terpadu. Kamu akan membuat skenario pengujian menyeluruh yang menguji semua fitur yang telah kamu bangun selama proyek ini.
Kamu akan menggunakan ketujuh file dari sistem yang telah selesai kamu buat:
Book.java: class Book milikmu dengan isbn, title, author, isAvailable, borrowedBy, dan semua method terkait, termasukgetDetails().User.java: class User milikmu dengan id, name, list borrowedBooks, serta method untuk meminjam dan mengembalikan buku.LibraryException.java: class exception kustom dasar milikmu.BookNotAvailableException.java: exception milikmu untuk buku yang tidak tersedia.LibraryAdmin.java: interface admin dan implementasi AdminService milikmu.Library.java: class Library lengkap milikmu dengan semua method: menambahkan dan menghapus buku, mendaftarkan pengguna, meminjam dan mengembalikan buku, mencari, serta menangani exception.Main.java: tes integrasi milikmu yang akan menunjukkan seluruh sistem bekerja bersama.
Di class Main, kamu akan memproses serangkaian perintah yang menguji setiap fitur utama sistem perpustakaanmu. Perintah diberikan sebagai satu string yang dipisahkan koma dengan format berikut:
ADD_BOOK:isbn:title:author- Tambahkan buku melalui AdminServiceREGISTER_USER:id:name- Daftarkan pengguna melalui AdminServiceBORROW:userId:isbn- Pinjam buku (dengan penanganan exception)RETURN:userId:isbn- Kembalikan bukuSEARCH_TITLE:keyword- Cari buku berdasarkan judulSEARCH_AUTHOR:keyword- Cari buku berdasarkan penulisREMOVE_BOOK:isbn- Hapus buku melalui AdminService
Proses setiap perintah dan cetak output yang sesuai:
- ADD_BOOK:
Added: [title] - REGISTER_USER:
Registered: [name] - BORROW: Cetak pesan sukses atau
Error: [exception message] - RETURN:
[userName] returned [bookTitle] - SEARCH_TITLE: Cetak
Search '[keyword]':diikuti detail setiap buku yang cocok, atauNo results - SEARCH_AUTHOR: Formatnya sama dengan pencarian judul
- REMOVE_BOOK:
Removed: [isbn]atauCannot remove: [isbn]
Setelah semua perintah diproses, cetak ringkasan akhir:
--- Final Status ---Books: [count]Users: [count]- Untuk setiap pengguna, cetak
[name]: [borrowedCount] book(s)
Kamu akan menerima satu input: string perintah yang dipisahkan koma.
Misalnya, dengan input ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Effective Java:Joshua Bloch,REGISTER_USER:U001:Alice,REGISTER_USER:U002:Bob,BORROW:U001:ISBN-001,BORROW:U002:ISBN-001,SEARCH_TITLE:java,RETURN:U001:ISBN-001,REMOVE_BOOK:ISBN-001, outputmu akan berupa:
Added: Clean Code
Added: Effective Java
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
Error: Book not available: ISBN-001
Search 'java':
[ISBN-002] Effective Java by Joshua Bloch
Alice returned Clean Code
Removed: ISBN-001
--- Final Status ---
Books: 1
Users: 2
Alice: 0 book(s)
Bob: 0 book(s)Tantangan terakhir ini memvalidasi bahwa semua komponen, class, interface, exception, dan logika perpustakaanmu bekerja bersama dengan lancar. Kamu telah membangun Sistem Manajemen Perpustakaan yang lengkap dan tangguh!
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];
try {
String result = library.borrowBook(userId, isbn);
System.out.println(result);
} catch (LibraryException e) {
System.out.println("Error: " + e.getMessage());
}
}
// TODO: Tambahkan penanganan untuk perintah RETURN
// TODO: Tambahkan penanganan untuk perintah SEARCH_TITLE
// TODO: Tambahkan penanganan untuk perintah SEARCH_AUTHOR
}
// TODO: Tampilkan status akhir
// --- Final Status ---
// Buku: [count]
// Pengguna: [count]
// Untuk setiap pengguna: [name]: [borrowedCount] buku
System.out.println("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