Menu
Coddy logo textTech

Interfaz de administración

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 permisos 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 arreglo privado $borrowedBooks, una constante MAX_BOOKS con valor 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, incluidos addBook(), findBook(), borrowBook(), returnBook() y los métodos de búsqueda. Añade un método nuevo:
    • 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 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, lo elimina y devuelve "Removed: [title]"
  • main.php: Incluye el archivo Admin. Recibirás dos entradas: un ISBN y el título de un libro.

    Crea una Library y un Admin con el ID 1 y el nombre "AdminUser". Crea también un User normal con el ID 2 y el nombre "RegularUser".

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

    1. Haz que el administrador añada el libro a la biblioteca
    2. Haz que el usuario normal pida prestado el libro
    3. Haz que el administrador intente eliminar el libro (debe fallar: está prestado)
    4. Haz que el usuario normal devuelva el libro
    5. Haz que el administrador elimine el libro (ahora debe tener éxito)
    6. Haz que el administrador intente eliminar el mismo libro otra vez (debe fallar porque 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 impedir la eliminación de libros que todavía 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 Library

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

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

// TODO: Crear un Book con el ISBN, título y autor "Test Author" proporcionados

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

?>

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de PHP online