Menu
Coddy logo textTech

Interfaz de administrador

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy — lección 86 de 91.

challenge icon

Desafío

Fácil

Ampliemos nuestro Sistema de Gestión de Bibliotecas añadiendo capacidades administrativas. Crearás una clase Admin que hereda de User pero que tiene poderes especiales para gestionar el inventario de la biblioteca: añadir libros nuevos y eliminar los existentes.

Organizarás tu código en cinco archivos:

  • Book.php — Tu clase Book con propiedades de solo lectura (isbn, title, author), una propiedad privada $isAvailable que comienza como true, y los métodos: isAvailable(), markAsBorrowed() y markAsReturned().
  • User.php — Incluye el archivo Book. Tu clase User con propiedades de solo lectura (id, name), un array privado $borrowedBooks, una constante MAX_BOOKS de 3, y los métodos: getBorrowedBooks(), canBorrow(), addBook(Book $book) y removeBook(string $isbn).
  • Library.php — Incluye el archivo User. Tu clase Library con la funcionalidad existente que incluye addBook(), findBook(), borrowBook(), returnBook() y los métodos de búsqueda. Añade un nuevo método:
    • removeBook(string $isbn): void — elimina un libro de la colección usando unset()
  • Admin.php — Incluye el archivo Library. Crea una clase Admin que extienda de User. Los administradores heredan todas las capacidades de los usuarios pero obtienen dos métodos administrativos:
    • addBookToLibrary(Library $library, Book $book): string — añade el libro a la biblioteca y devuelve "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string — intenta eliminar un libro con estas comprobaciones:
      • Si el libro no existe, devuelve "Book not found"
      • Si el libro está prestado actualmente, devuelve "Cannot remove: book is currently borrowed"
      • De lo contrario, elimínalo y devuelve "Removed: [title]"
  • main.php — Incluye el archivo Admin. Recibirás dos entradas: un ISBN y un título de libro.

    Crea una Library y un Admin con ID 1 y nombre "AdminUser". También crea un User regular con ID 2 y nombre "RegularUser".

    Crea un Book con el ISBN, título y autor "Test Author" proporcionados. Realiza estas operaciones e imprime cada resultado en una nueva línea:

    1. Haz que el administrador añada el libro a la biblioteca
    2. Haz que el usuario regular pida prestado el libro
    3. Haz que el administrador intente eliminar el libro (debería fallar, está prestado)
    4. Haz que el usuario regular devuelva el libro
    5. Haz que el administrador elimine el libro (debería tener éxito ahora)
    6. Haz que el administrador intente eliminar el mismo libro de nuevo (debería fallar, no se encuentra)

Este desafío demuestra cómo la herencia crea una jerarquía natural: los administradores son usuarios con privilegios adicionales. Las comprobaciones de seguridad en removeBookFromLibrary garantizan la integridad de los datos al evitar la eliminación de libros que aún están en circulación.

Pruébalo tú mismo

<?php
require_once 'Admin.php';

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

// TODO: Crear una Biblioteca (Library)

// TODO: Crear un Administrador (Admin) con ID 1 y nombre "AdminUser"

// TODO: Crear un Usuario (User) regular con ID 2 y nombre "RegularUser"

// TODO: Crear un Libro (Book) con el ISBN proporcionado, título y autor "Test Author"

// TODO: Realizar estas operaciones e imprimir cada resultado en una nueva línea:
// 1. Hacer que el administrador agregue el libro a la biblioteca
// 2. Hacer que el usuario regular pida prestado el libro
// 3. Hacer que el administrador intente eliminar el libro (debe fallar - está prestado)
// 4. Hacer que el usuario regular devuelva el libro
// 5. Hacer que el administrador elimine el libro (debe tener éxito ahora)
// 6. Hacer que el administrador intente eliminar el mismo libro de nuevo (debe fallar - no encontrado)

?>

Todas las lecciones de Programación Orientada a Objetos