Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Vamos 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 abstracta User con campos privados para _id (String) y _name (String), con getters públicos. Incluye un método abstracto String getRole() que las subclases deben implementar. Sobrescribe toString() para que devuelva [role] name (id) donde role proviene de getRole().
  • student.dart: Crea una clase Student que extienda de User. Los estudiantes deben usar un mixin ProgressTracking (definido en este archivo) que proporcione un entero privado _completedLessons (comenzando en 0) con un getter, y los métodos completeLesson() para incrementarlo y getProgressReport() que devuelva Completed X lessons. La clase Student debe implementar getRole() para devolver Student.
  • instructor.dart: Crea una clase Instructor que extienda de User. Los instructores tienen una lista privada _coursesCreated (lista de Strings que representan títulos de cursos). Incluye un método createCourse(String title) que añada el título a la lista y devuelva el título. Implementa getRole() para devolver Instructor. Añade un getter courseCount que devuelva el número de cursos creados.
  • enrollment.dart: Crea una clase Enrollment que rastree la inscripción de un estudiante en un curso. Debe tener un studentId (String), courseName (String), y un booleano privado _isCompleted (por defecto false) con un getter. Incluye un método markComplete() que establezca la completitud a true. Sobrescribe toString() para devolver studentId enrolled in "courseName" - Status: Completed o Status: In Progress basado en el estado de completitud.
  • main.dart: Reúne todo. Crea un instructor (I001, Dr. Smith) y haz que cree dos cursos: Dart Fundamentals y Advanced OOP. Imprime el instructor y su recuento de cursos como Courses 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 en Dart 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: Completed

Prué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