Clases de Libros y Usuarios
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy. Lección 102 de 110.
Desafío
FácilEn la lección anterior, creaste una clase Book con propiedades básicas y un método toString(). Ahora es momento de ampliar tu sistema de biblioteca agregando una clase User para representar a los miembros de la biblioteca que pueden pedir libros prestados.
Necesitarás crear un archivo nuevo y actualizar tus archivos existentes:
book.dart: Mejora tu claseBookexistente agregando una propiedadisAvailable(booleano) cuyo valor predeterminado seatrue. Esto permitirá realizar un seguimiento de si un libro puede pedirse prestado.user.dart: Crea una nueva claseUserpara representar a los miembros de la biblioteca. Cada usuario debe tener unid(String), unname(String) y una listaborrowedBooksque contenga objetosBook. Incluye un constructor que inicialice el id y el nombre, con una lista vacía para los libros prestados. SobrescribetoString()para que devuelva el formatoUser [id]: name (X books borrowed), donde X es la cantidad de libros prestados.main.dart: Importa tus archivos de libros y usuarios. Crea un libro con ISBN978-0-13-468599-1, títuloThe Pragmatic Programmery autorDavid Thomas. Crea un usuario con idU001y nombreAlice Johnson. Imprime el libro y después imprime si está disponible usando el formatoAvailable: trueoAvailable: false. Imprime el usuario. Después agrega el libro a la lista de libros prestados del usuario, estableceisAvailabledel libro enfalsee imprime el usuario nuevamente para mostrar la cantidad actualizada de libros.
Esto establece la relación entre libros y usuarios sobre la que trabajarás al implementar el sistema completo de préstamos en la próxima lección.
Salida esperada:
[978-0-13-468599-1] The Pragmatic Programmer by David Thomas
Available: true
User U001: Alice Johnson (0 books borrowed)
User U001: Alice Johnson (1 books borrowed)Pruébalo tú mismo
import 'book.dart';
// TODO: Importar user.dart
void main() {
// TODO: Crear un libro con ISBN '978-0-13-468599-1', título 'The Pragmatic Programmer', y autor 'David Thomas'
// TODO: Crear un usuario con id 'U001' y nombre 'Alice Johnson'
// TODO: Imprimir el libro
// TODO: Imprimir si el libro está disponible usando el formato: Available: true/false
// TODO: Imprimir el usuario
// TODO: Añadir el libro a la lista borrowedBooks del usuario
// TODO: Establecer el isAvailable del libro a false
// TODO: Imprimir el usuario de nuevo para mostrar el recuento de libros actualizado
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de POO
Archivos externosLibrerías e importacionesIntroducción a la POOClases vs. ObjetosLa palabra clave thisMétodosVariables de instanciaConceptos básicos de constructoresResumen - Calculadora sencilla4Seguridad de nulos
Introducción a la seguridad de nulosNulables vs No nulablesLos operadores ? y !Palabra clave Late y Null SafetyOperadores Null-awareNull Safety en clasesResumen - Sistema de perfil de usuario7Clases abstractas e interfaces
Clases abstractasMétodos abstractosInterfaces en DartInterfaces implícitasImplementar vs. ExtenderInterfaces múltiplesRepaso - Calculadora de figuras10Colecciones y Genéricos
Visión general de List, Set y MapColecciones con seguridad de tiposClases genéricasMétodos genéricosRestricciones genéricasIterable e IteratorResumen - Almacenamiento genérico13Conceptos avanzados de POO
Composición vs. HerenciaMétodos de extensiónClases invocablesClases selladas (Dart 3)Records (Dart 3)Patrones y coincidencia (3.0)Enums con métodos16Proyecto: Gestión de biblioteca
Descripción general del proyectoClases de Libros y Usuarios2Constructores en Dart
Constructor por defectoConstructores nombradosListas de inicializaciónConstructores constantesConstructores de fábricaConstructores de redireccionamientoResumen - Constructor de formas5Encapsulamiento
Miembros públicos vs. privadosLa convención del prefijo _Privacidad a nivel de libreríaProfundidad en Getters y SettersOcultamiento de informaciónResumen - Registros de estudiantes8Mixins
Introducción a los MixinsCreación de MixinsUso de múltiples MixinsPalabra clave on en MixinsMixin vs HerenciaMixin vs InterfazResumen - Sistema Animal11Métodos especiales
Sobrescritura de toString()Sobrescritura de hashCode y ==Interfaz ComparableMétodo call()Sobrescritura de noSuchMethodResumen - Colección personalizada14Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy3Propiedades de clase
Miembros de instancia vs. estáticosCampos Final y ConstVariables LateMétodos y campos estáticosGetters y SettersResumen - Gestor de cuentas bancarias6Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosLa anotación @overrideLa palabra clave final en clasesConstructores y herenciaResumen - Jerarquía de empleados9Polimorfismo
Fundamentos del polimorfismoPolimorfismo mediante interfacesComprobación de tipos en tiempo de ejecuciónLos operadores is y asPalabra clave covariantResumen - Procesador de pagos12POO Asíncrona
Futures y async/awaitFundamentos de StreamsStream ControllersConstructores asíncronosAsincronía en métodos de claseRepaso - Data Fetcher15Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón RepositoryPractica por tu cuenta: Compilador de Dart online