Interfaz de administrador
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 105 de 110.
Desafío
FácilEn la lección anterior, agregaste la funcionalidad de búsqueda a tu clase Library. Ahora vamos a crear una interfaz de administrador que permita a los usuarios privilegiados gestionar el inventario de la biblioteca: agregar libros nuevos y eliminar los existentes.
Introducirás una nueva clase Admin y mejorarás tu Library con capacidades administrativas:
book.dart: Mantén tu claseBookexistente sin cambios.user.dart: Mantén tu claseUserexistente sin cambios.admin.dart: Crea una nueva claseAdminque represente a los administradores de la biblioteca. Un administrador tiene unid(String) y unname(String). SobrescribetoString()para que devuelvaAdmin [id]: name.library.dart: Agrega funcionalidad administrativa a tu claseLibrary:- Agrega una lista para almacenar los administradores registrados
registerAdmin(Admin admin)- agrega un administrador a la bibliotecaaddBookAsAdmin(String adminId, Book book)- si el administrador existe, agrega el libro e imprimeadminId added "title". Si el administrador no existe, imprimeUnauthorized.removeBook(String adminId, String isbn)- si el administrador existe y el libro existe, elimina el libro de la biblioteca e imprimeadminId removed "title". Si el administrador no existe, imprimeUnauthorized. Si el libro no existe, imprimeBook not found.getBookCount()- devuelve el número total de libros en la biblioteca
main.dart: Demuestra la interfaz de administrador. Crea unaLibraryy registra un administrador (A001,Sarah Admin). Usa el administrador para agregar tres libros:978-0-13-468599-1,The Pragmatic Programmer,David Thomas978-0-596-51774-8,JavaScript: The Good Parts,Douglas Crockford978-0-13-235088-4,Clean Code,Robert Martin
Total books: X. Luego intenta agregar un libro con un id de administrador no registradoA999. Elimina el segundo libro usando el administrador registrado. Imprime el recuento final de libros.
Salida esperada:
A001 added "The Pragmatic Programmer"
A001 added "JavaScript: The Good Parts"
A001 added "Clean Code"
Total books: 3
Unauthorized
A001 removed "JavaScript: The Good Parts"
Total books: 2Pruébalo tú mismo
import 'book.dart';
import 'user.dart';
import 'library.dart';
import 'admin.dart';
void main() {
// TODO: Crear una Biblioteca
// TODO: Crear y registrar un administrador (A001, Sarah Admin)
// TODO: Usar el administrador para añadir tres libros:
// - 978-0-13-468599-1, The Pragmatic Programmer, David Thomas
// - 978-0-596-51774-8, JavaScript: The Good Parts, Douglas Crockford
// - 978-0-13-235088-4, Clean Code, Robert Martin
// TODO: Imprimir el recuento de libros como "Total books: X"
// TODO: Intentar añadir un libro con un id de administrador no registrado A999
// TODO: Eliminar el segundo libro (978-0-596-51774-8) usando el administrador registrado
// TODO: Imprimir el recuento final de libros
}
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 Repository