Plataforma de E-Learning
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 107 de 110.
Desafío
FácilVamos a construir una Plataforma de E-Learning que reúna todos los conceptos de OOP que has dominado a lo largo de este curso. Crearás un sistema que gestiona usuarios, cursos e inscripciones utilizando clases abstractas, herencia, mixins y encapsulación.
Tu plataforma estará organizada en cinco archivos:
user.dart: Crea una clase abstractaUsercon campos privados para_id(String) y_name(String), con getters públicos. Incluye un método abstractoString getRole()que las subclases deben implementar. SobrescribetoString()para que devuelva[role] name (id)donde role proviene degetRole().student.dart: Crea una claseStudentque extienda deUser. Los estudiantes deben usar un mixinProgressTracking(definido en este archivo) que proporcione un entero privado_completedLessons(comenzando en 0) con un getter, y los métodoscompleteLesson()para incrementarlo ygetProgressReport()que devuelvaCompleted X lessons. La claseStudentdebe implementargetRole()para devolverStudent.instructor.dart: Crea una claseInstructorque extienda deUser. Los instructores tienen una lista privada_coursesCreated(lista de Strings que representan títulos de cursos). Incluye un métodocreateCourse(String title)que añada el título a la lista y devuelva el título. ImplementagetRole()para devolverInstructor. Añade un gettercourseCountque devuelva el número de cursos creados.enrollment.dart: Crea una claseEnrollmentque rastree la inscripción de un estudiante en un curso. Debe tener unstudentId(String),courseName(String), y un booleano privado_isCompleted(por defecto false) con un getter. Incluye un métodomarkComplete()que establezca la completitud a true. SobrescribetoString()para devolverstudentId enrolled in "courseName" - Status: CompletedoStatus: In Progressbasado en el estado de completitud.main.dart: Reúne todo. Crea un instructor (I001,Dr. Smith) y haz que cree dos cursos:Dart FundamentalsyAdvanced OOP. Imprime el instructor y su recuento de cursos comoCourses created: X. Crea un estudiante (S001,Alice), imprímelo, luego haz que complete 3 lecciones e imprime su informe de progreso. Crea una inscripción para Alice enDart Fundamentals, imprímela, márcala como completada e imprímela de nuevo.
Salida esperada:
[Instructor] Dr. Smith (I001)
Courses created: 2
[Student] Alice (S001)
Completed 3 lessons
S001 enrolled in "Dart Fundamentals" - Status: In Progress
S001 enrolled in "Dart Fundamentals" - Status: CompletedPruébalo tú mismo
import 'user.dart';
import 'student.dart';
import 'instructor.dart';
import 'enrollment.dart';
void main() {
// TODO: Crear un instructor con id "I001" y nombre "Dr. Smith"
// TODO: Hacer que el instructor cree dos cursos: "Dart Fundamentals" y "Advanced OOP"
// TODO: Imprimir el instructor (usa toString())
// TODO: Imprimir "Courses created: X" donde X es el courseCount
// TODO: Crear un estudiante con id "S001" y nombre "Alice"
// TODO: Imprimir el estudiante
// TODO: Hacer que el estudiante complete 3 lecciones (llamar a completeLesson() 3 veces)
// TODO: Imprimir el informe de progreso del estudiante
// TODO: Crear una inscripción para Alice (S001) en "Dart Fundamentals"
// TODO: Imprimir la inscripción
// TODO: Marcar la inscripción como completada
// TODO: Imprimir la inscripción de nuevo
}
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érico2Constructores 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 Strategy17Desafíos finales
Plataforma de E-LearningSistema bancarioSistema de personajes de juegoServicio de alquiler de vehículos3Propiedades 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