Menu
Coddy logo textTech

Interface Administrativa

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy — lição 86 de 91.

challenge icon

Desafio

Fácil

Vamos estender nosso Sistema de Gerenciamento de Biblioteca adicionando capacidades administrativas. Você criará uma classe Admin que herda de User, mas possui poderes especiais para gerenciar o inventário da biblioteca — adicionando novos livros e removendo os existentes.

Você organizará seu código em cinco arquivos:

  • Book.php — Sua classe Book com propriedades readonly (isbn, title, author), uma propriedade privada $isAvailable iniciando como true, e os métodos: isAvailable(), markAsBorrowed() e markAsReturned().
  • User.php — Inclua o arquivo Book. Sua classe User com propriedades readonly (id, name), um array privado $borrowedBooks, uma constante MAX_BOOKS de 3, e os métodos: getBorrowedBooks(), canBorrow(), addBook(Book $book) e removeBook(string $isbn).
  • Library.php — Inclua o arquivo User. Sua classe Library com a funcionalidade existente, incluindo addBook(), findBook(), borrowBook(), returnBook() e os métodos de busca. Adicione um novo método:
    • removeBook(string $isbn): void — remove um livro da coleção usando unset()
  • Admin.php — Inclua o arquivo Library. Crie uma classe Admin que estende User. Admins herdam todas as capacidades de usuário, mas ganham dois métodos administrativos:
    • addBookToLibrary(Library $library, Book $book): string — adiciona o livro à biblioteca e retorna "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string — tenta remover um livro com estas verificações:
      • Se o livro não existir, retorna "Book not found"
      • Se o livro estiver emprestado no momento, retorna "Cannot remove: book is currently borrowed"
      • Caso contrário, remova-o e retorne "Removed: [title]"
  • main.php — Inclua o arquivo Admin. Você receberá duas entradas: um ISBN e um título de livro.

    Crie uma Library e um Admin com ID 1 e nome "AdminUser". Também crie um User regular com ID 2 e nome "RegularUser".

    Crie um Book com o ISBN fornecido, título e autor "Test Author". Realize estas operações e imprima cada resultado em uma nova linha:

    1. Faça o admin adicionar o livro à biblioteca
    2. Faça o usuário regular pegar o livro emprestado
    3. Faça o admin tentar remover o livro (deve falhar — está emprestado)
    4. Faça o usuário regular devolver o livro
    5. Faça o admin remover o livro (deve ter sucesso agora)
    6. Faça o admin tentar remover o mesmo livro novamente (deve falhar — não encontrado)

Este desafio demonstra como a herança cria uma hierarquia natural — admins são usuários com privilégios extras. As verificações de segurança em removeBookFromLibrary garantem a integridade dos dados, evitando a remoção de livros que ainda estão em circulação.

Experimente você mesmo

<?php
require_once 'Admin.php';

// Ler entrada
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Criar uma Biblioteca (Library)

// TODO: Criar um Administrador (Admin) com ID 1 e nome "AdminUser"

// TODO: Criar um Usuário (User) comum com ID 2 e nome "RegularUser"

// TODO: Criar um Livro (Book) com o ISBN fornecido, título e autor "Test Author"

// TODO: Realizar estas operações e imprimir cada resultado em uma nova linha:
// 1. Fazer o administrador adicionar o livro à biblioteca
// 2. Fazer o usuário comum pegar o livro emprestado
// 3. Fazer o administrador tentar remover o livro (deve falhar - está emprestado)
// 4. Fazer o usuário comum devolver o livro
// 5. Fazer o administrador remover o livro (deve ter sucesso agora)
// 6. Fazer o administrador tentar remover o mesmo livro novamente (deve falhar - não encontrado)

?>

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