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

Construyamos una plataforma de aprendizaje electrónico que reúna todos los conceptos de OOP que has dominado a lo largo de este curso. Crearás un sistema que gestione usuarios, cursos e inscripciones mediante 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 User. Los estudiantes deben usar un mixin ProgressTracking (definido en este archivo) que proporcione un entero privado _completedLessons (que comienza 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 User. Los instructores tienen una lista privada _coursesCreated (una 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 haga un seguimiento de la inscripción de un estudiante en un curso. Debe tener un studentId (String), un courseName (String) y un booleano privado _isCompleted (cuyo valor predeterminado sea false) con un getter. Incluye un método markComplete() que establezca la finalización en true. Sobrescribe toString() para que devuelva studentId enrolled in "courseName" - Status: Completed o Status: In Progress según el estado de finalización.
  • main.dart: Reúne todos los elementos. Crea un instructor (I001, Dr. Smith) y haz que cree dos cursos: Dart Fundamentals y Advanced OOP. Imprime el instructor y su cantidad de cursos como Courses created: X. Crea un estudiante (S001, Alice), imprímelo y, después, haz que complete 3 lecciones e imprime su informe de progreso. Crea una inscripción de 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: Create an enrollment for Alice (S001) in "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

Practica por tu cuenta: Compilador de Dart online