Menu
Coddy logo textTech

Interface do Administrador

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy. Lição 81 de 87.

challenge icon

Desafio

Fácil

Vamos expandir seu Sistema de Gerenciamento de Biblioteca com uma Interface de Administrador! Uma biblioteca real precisa de capacidades administrativas — adicionar novos livros à coleção, remover os desatualizados e registrar novos membros. Você criará uma interface que define essas operações administrativas e as implementará em uma classe de administração dedicada.

Você continuará construindo sobre seu código existente em cinco arquivos:

  • Book.java: Mantenha sua classe Book com toda a funcionalidade existente — isbn, title, author, isAvailable, borrowedBy, getDetails() e os getters/setters apropriados.
  • User.java: Mantenha sua classe User inalterada com id, name, o ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() e toString().
  • Library.java: Mantenha sua classe Library com todos os métodos existentes. Adicione um novo método removeBook(String isbn) que encontra e remove um livro da coleção pelo seu ISBN. O método deve retornar true se o livro foi encontrado e removido, e false caso contrário. Um livro só pode ser removido se estiver disponível no momento (não emprestado).
  • LibraryAdmin.java: Crie uma interface chamada LibraryAdmin que define o contrato para operações administrativas. Sua interface deve declarar três métodos:
    • addBook(String isbn, String title, String author) - retorna um booleano indicando sucesso
    • removeBook(String isbn) - retorna um booleano indicando sucesso
    • registerUser(String id, String name) - retorna um booleano indicando sucesso

    Em seguida, crie uma classe chamada AdminService que implementa esta interface. O AdminService deve manter uma referência a uma Library (passada através de seu construtor) e implementar todos os três métodos delegando para a Library enquanto adiciona o feedback apropriado. Ao adicionar um livro, crie um novo Book e adicione-o à biblioteca. Ao registrar um usuário, crie um novo User e registre-o.

  • Main.java: Demonstre seu sistema de administração! Você receberá uma série de comandos de administração como uma única string separada por vírgulas. Cada comando segue um destes formatos:
    • ADD_BOOK:isbn:title:author
    • REMOVE_BOOK:isbn
    • REGISTER_USER:id:name
    • BORROW:userId:isbn

    Crie uma Library e um AdminService. Processe cada comando e imprima o resultado:

    • Para ADD_BOOK: imprima Added: [title] em caso de sucesso
    • Para REMOVE_BOOK: imprima Removed: [isbn] em caso de sucesso, ou Cannot remove: [isbn] se o livro não existir ou estiver emprestado
    • Para REGISTER_USER: imprima Registered: [name]
    • Para BORROW: use a funcionalidade de empréstimo da biblioteca existente

    Após processar todos os comandos, imprima Library status: seguido pelos detalhes de cada livro e status de disponibilidade no formato [details] - [Available/Borrowed].

Você receberá uma entrada: uma string de comandos separada por vírgulas.

Por exemplo, com a entrada REGISTER_USER:U001:Alice,ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Design Patterns:Gang of Four,BORROW:U001:ISBN-001,REMOVE_BOOK:ISBN-001,REMOVE_BOOK:ISBN-002, sua saída seria:

Registered: Alice
Added: Clean Code
Added: Design Patterns
Alice borrowed Clean Code
Cannot remove: ISBN-001
Removed: ISBN-002
Library status:
[ISBN-001] Clean Code by Robert Martin - Borrowed

Observe como a interface de administração fornece um contrato limpo para operações administrativas, enquanto a implementação AdminService lida com a lógica real. O sistema impede corretamente a remoção de um livro emprestado, permitindo a remoção dos disponíveis. Essa separação de interface e implementação é um princípio fundamental de POO que torna seu código mais fácil de manter e testar!

Experimente você mesmo

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

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Ler os comandos separados por vírgula
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Criar Library e AdminService
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // Processar cada comando
        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];
                library.borrowBook(userId, isbn);
            }
        }
        
        // Imprimir o status da biblioteca
        System.out.println("Library status:");
        ArrayList<Book> allBooks = library.getAllBooks();
        for (Book book : allBooks) {
            String status = book.isAvailable() ? "Available" : "Borrowed";
            System.out.println(book.getDetails() + " - " + status);
        }
    }
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Java online