Pruebas e integración
Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 87 de 91.
Desafío
Fácil¡Felicidades por construir un sistema completo de gestión de bibliotecas! Ahora es el momento de reunir todos tus componentes y verificar que todo funcione sin problemas. Crearás una prueba de integración integral que ejercite el flujo de trabajo completo de tu biblioteca.
Organizarás tu código en cinco archivos:
Book.php: Tu claseBookcon propiedades de solo lectura (isbn,title,author), una propiedad privada$isAvailabley los métodos:isAvailable(),markAsBorrowed()ymarkAsReturned().User.php: Incluye el archivo Book. Tu claseUsercon propiedades de solo lectura (id,name), un arreglo privado$borrowedBooks, una constanteMAX_BOOKScon valor3y todos los métodos del usuario.Library.php: Incluye el archivo User. Tu claseLibrarycon gestión de libros, funcionalidad de préstamo y devolución, métodos de búsqueda y el métodoremoveBook().Admin.php: Incluye el archivo Library. Tu claseAdmin, que extiendeUser, con los métodosaddBookToLibrary()yremoveBookFromLibrary().main.php: Incluye el archivo Admin. Aquí ejecutarás tu prueba de integración. Recibirás dos entradas: el nombre de un usuario y una palabra clave del autor que se buscará.Configura tu sistema de biblioteca:
- Crea una
Library - Crea un
Admincon ID1y nombre"LibraryAdmin" - Crea un
Usercon ID2y el nombre de usuario proporcionado
Haz que el administrador agregue estos tres libros:
- ISBN:
"978-0", título:"PHP Fundamentals", autor:"Sarah Johnson" - ISBN:
"978-1", título:"OOP Patterns", autor:"Mike Chen" - ISBN:
"978-2", título:"Web Security", autor:"Sarah Johnson"
Después, ejecuta esta secuencia de prueba de integración e imprime cada resultado en una línea nueva:
- Haz que el usuario tome prestado
"978-0" - Haz que el usuario tome prestado
"978-1" - Busca por autor usando la segunda entrada e imprime el recuento:
"Books by author: [count]" - Obtén los libros disponibles e imprime:
"Available: [count]" - Haz que el usuario devuelva
"978-0" - Obtén nuevamente los libros disponibles e imprime:
"Available after return: [count]" - Haz que el administrador elimine
"978-0" - Haz que el administrador intente eliminar
"978-0"nuevamente
- Crea una
Este desafío final valida que todo tu sistema funcione en conjunto: los administradores gestionan el inventario, los usuarios toman libros prestados dentro de los límites, las búsquedas devuelven resultados precisos y la disponibilidad se actualiza correctamente durante todo el flujo de trabajo.
Pruébalo tú mismo
<?php
require_once 'Admin.php';
// Leer entradas
$userName = trim(fgets(STDIN));
$searchAuthor = trim(fgets(STDIN));
// TODO: Crear una Library
// TODO: Crear un Admin con ID 1 y nombre "LibraryAdmin"
// TODO: Crear un User con ID 2 y el nombre de usuario proporcionado
// TODO: Hacer que el admin agregue tres libros:
// - ISBN: "978-0", Title: "PHP Fundamentals", Author: "Sarah Johnson"
// - ISBN: "978-1", Title: "OOP Patterns", Author: "Mike Chen"
// - ISBN: "978-2", Title: "Web Security", Author: "Sarah Johnson"
// TODO: Secuencia de prueba de integración:
// 1. Hacer que el usuario tome prestado "978-0"
// 2. Hacer que el usuario tome prestado "978-1"
// 3. Search by author using $searchAuthor and print: "Books by author: [count]"
// 4. Obtener los libros disponibles e imprimir: "Available: [count]"
// 5. Hacer que el usuario devuelva "978-0"
// 6. Get available books again and print: "Available after return: [count]"
// 7. Haz que el admin elimine "978-0"
// 8. Haz que el admin intente eliminar "978-0" de nuevo
?>Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases frente a objetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Repaso: calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasRepaso - Jerarquía de empleados7Encapsulación
Público, protegido, privadoModificadores de acceso en profundidadGetters y settersOcultación de la informaciónPromoción del constructor (8.0)Repaso: sistema de registros de estudiantes10Conceptos avanzados de OOP
Composición vs. herenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibras (PHP 8.1)Análisis profundo de la clonación de objetosGeneradores e iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Namespaces y carga automática
Introducción a los NamespacesLa palabra clave useEstándar de carga automática PSR-4Autoloader de ComposerRepaso: proyecto organizado5Interfaces y contratos
Introducción a las interfacesImplementación de interfacesImplementación de múltiples interfacesInterfaces vs. clase abstractaTipado con interfacesRepaso - Calculadora de formas8Métodos mágicos
Introducción a los métodos mágicos__toString y __debugInfo__get, __set, __isset, __unset__call y __callStatic__clone y clonación de objetos__serialize y __unserializeRepaso: colección personalizada11Sistema de tipos y manejo de errores
Declaraciones de tiposTipos anulablesTipos unión e intersecciónClases de excepcionesJerarquía de excepciones personalizadaTry, Catch, FinallyRepaso: validador de formularios14Proyecto: Gestión de Bibliotecas
Descripción general del proyectoClases de libros y usuarios3Propiedades de clase
Propiedades de instancia vs. estáticasConstantes en clasesMétodos y propiedades estáticosPropiedades privadas y protegidasPropiedades de solo lectura (PHP 8.1)Repaso: gestor de cuentas bancarias6Polimorfismo
Repaso de la sobrescritura de métodosPolimorfismo mediante interfacesAnotaciones de tipo y tipos uniónEnlace estático tardíoRepaso: procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos entre TraitsMétodos abstractos en TraitsTraits frente a la herencia12Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de PHP online