Menu
Coddy logo textTech

Exception Handling Entegrasyonu

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 82 / 87.

challenge icon

Görev

Kolay

Uygun istisna yönetimini entegre ederek Kütüphane Yönetim Sisteminizi daha sağlam hâle getirelim! Gerçek bir kütüphane sistemi hata durumlarını düzgün bir şekilde ele almalıdır: birisi var olmayan bir kitabı ödünç almaya çalıştığında veya bir kullanıcı izin verilenden daha fazla kitap ödünç almaya çalıştığında ne olur? Bu senaryolar için anlamlı geri bildirim sağlayan özel istisnalar oluşturacaksınız.

Altı dosya boyunca mevcut kodunuzu geliştirmeye devam edeceksiniz:

  • Book.java: isbn, title, author, isAvailable, borrowedBy, getDetails() ve uygun getter/setter metotları da dâhil olmak üzere mevcut tüm işlevleriyle Book sınıfınızı koruyun.
  • User.java: id, name, borrowedBooks ArrayList'i, borrowBook(), returnBook(), getBorrowedCount() ve toString() metotlarıyla User sınıfınızı koruyun.
  • LibraryException.java: LibraryException sınıfını genişleten, Exception adlı temel bir özel istisna sınıfı oluşturun. Bu, kütüphaneye özgü tüm istisnaların üst sınıfı olacaktır. Bir mesaj kabul eden ve bu mesajı üst sınıfa aktaran bir kurucu ekleyin.
  • BookNotAvailableException.java: LibraryException sınıfını genişleten özel bir istisna oluşturun. Bu istisna, birisi hâlihazırda ödünç alınmış bir kitabı ödünç almaya çalıştığında fırlatılmalıdır. Kitabın ISBN'sini kabul eden ve Book not available: [isbn] gibi anlamlı bir mesaj oluşturan bir kurucu ekleyin.
  • Library.java: Hata mesajlarını yazdırmak yerine istisnalar fırlatacak şekilde Library sınıfınızı güncelleyin. borrowBook(String userId, String isbn) metodunu şu şekilde değiştirin:
    • Kullanıcı mevcut değilse LibraryException mesajıyla User not found: [userId] fırlatın
    • Kitap mevcut değilse LibraryException mesajıyla Book not found: [isbn] fırlatın
    • Kitap hâlihazırda ödünç alınmışsa BookNotAvailableException fırlatın
    • Başarılı olduğunda kullanıcının kitabı ödünç almasını sağlayın ve [userName] borrowed [bookTitle] onay mesajını döndürün

    Metot imzasını throws LibraryException olarak değiştirin ve dönüş türünü String yapın.

    Diğer tüm metotların (addBook, registerUser, findBookByIsbn, findUserById, returnBook, removeBook, searchByTitle, searchByAuthor, getAvailableBooks) önceki gibi çalışmaya devam etmesini sağlayın.

  • Main.java: İstisna yönetiminizi gösterin! Virgülle ayrılmış bir komut dizesi alacaksınız. Her komut şu biçimlerden birini izler:
    • ADD_BOOK:isbn:title:author
    • REGISTER_USER:id:name
    • BORROW:userId:isbn

    Her komutu işleyin. ADD_BOOK için Added: [title] yazdırın. REGISTER_USER için Registered: [name] yazdırın. BORROW komutları için istisnaları ele almak üzere bir try-catch bloğu kullanın; başarılı olursa onay mesajını, herhangi bir LibraryException durumunda ise Error: [exception message] yazdırın.

    Tüm komutları işledikten sonra Operations completed yazdırın.

Tek bir girdi alacaksınız: virgülle ayrılmış bir komut dizesi.

Örneğin, giriş ADD_BOOK:ISBN-001:Clean Code:Robert Martin,REGISTER_USER:U001:Alice,BORROW:U001:ISBN-001,BORROW:U001:ISBN-001,BORROW:U002:ISBN-001 olduğunda çıktınız şu şekilde olur:

Added: Clean Code
Registered: Alice
Alice borrowed Clean Code
Error: Book not available: ISBN-001
Error: User not found: U002
Operations completed

Özel istisnaların nasıl açık ve belirli hata mesajları sağladığına dikkat edin. İlk ödünç alma başarılı olur, ikincisi kitap hâlihazırda ödünç alınmış olduğu için başarısız olur (BookNotAvailableException) ve üçüncüsü U002 kullanıcısı mevcut olmadığı için başarısız olur (LibraryException). Bu yaklaşım, kütüphane sisteminizi genel hata mesajlarına kıyasla çok daha bilgilendirici ve hata ayıklaması daha kolay hâle getirir!

Kendin dene

import java.util.Scanner;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Virgülle ayrılmış komutları oku
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Library ve AdminService oluştur
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // Her komutu işle
        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: library.borrowBook(userId, isbn) çağrısı için bir try-catch bloğu kullan
                // Başarı durumunda, döndürülen onay mesajını yazdır
                // LibraryException durumunda, "Error: " + e.getMessage() yazdır
            }
        }
        
        // TODO: Print "Operations completed"
    }
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Java derleyicisi