Piattaforma di e-learning
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 68 di 70.
Sfida
FacileCostruiamo una piattaforma di e-learning che gestisce corsi, studenti e iscrizioni! Questa sfida riunisce tutto ciò che hai imparato sulla programmazione orientata agli oggetti (OOP): classi, ereditarietà, interfacce, incapsulamento e servizi che collaborano in un’architettura pulita.
Organizzerai il codice in cinque file:
Lesson.cs: crea una classeLessonnello spazio dei nomiELearning.Models. Ogni lezione ha le proprietà di sola letturaTitle(string) eDurationMinutes(int), impostate tramite il costruttore.Course.cs: crea una classeCoursenello spazio dei nomiELearning.Models. Un corso ha le proprietà di sola letturaId(string),Title(string) eInstructor(string), oltre a una listaLessons. Includi un metodoAddLesson(Lesson lesson)e una proprietà di sola letturaTotalDurationche calcola la somma della durata di tutte le lezioni.Student.cs: crea una classeStudentnello spazio dei nomiELearning.Models, con le proprietà di sola letturaId(int) eName(string). Gli studenti tengono traccia dei propri progressi tramite un dizionario privato che associa gli ID dei corsi al numero di lezioni completate. Includi i metodiCompleteLesson(string courseId)per incrementare i progressi eGetProgress(string courseId)per restituire il conteggio delle lezioni completate (o 0 se non è iscritto).EnrollmentService.cs: crea una classeEnrollmentServicenello spazio dei nomiELearning.Services. Questo servizio gestisce i corsi e le iscrizioni utilizzando raccolte private. Implementa:AddCourse(Course course)- aggiunge un corso alla piattaformaEnroll(Student student, string courseId)- restituiscetruese l'iscrizione riesce,falsese il corso non esiste o lo studente è già iscrittoGetEnrolledCourses(Student student)- restituisce una lista degli ID dei corsi a cui lo studente è iscrittoGetCourse(string courseId)- restituisce il corso oppurenullse non viene trovato
Program.cs: metti tutto insieme creando corsi con lezioni, iscrivendo studenti, tenendo traccia dei progressi e visualizzando i risultati in base all'input.
Riceverai i seguenti input:
- Numero di corsi da creare
- Per ogni corso: ID, titolo, docente, numero di lezioni, poi per ogni lezione: titolo e durata (in minuti)
- ID e nome dello studente
- Numero di operazioni da eseguire
- Per ogni operazione: l'azione (
enroll,complete,progressoinfo) seguita dall'ID del corso
Formati di output:
enroll: stampaEnrolled in: {CourseTitle}oppureEnrollment failed: {courseId}complete: stampaCompleted lesson in {CourseTitle}(incrementa i progressi di 1)progress: stampa{CourseTitle}: {completed}/{total} lessonsinfo: stampa{CourseTitle} by {Instructor} - {TotalDuration} minutes
Per esempio, se gli input sono:
2
CS101
Intro to Programming
Dr. Smith
3
Variables
30
Loops
45
Functions
60
CS102
Data Structures
Dr. Jones
2
Arrays
40
Lists
50
1
Alice
6
enroll
CS101
info
CS101
complete
CS101
complete
CS101
progress
CS101
enroll
CS999L'output dovrebbe essere:
Enrolled in: Intro to Programming
Intro to Programming by Dr. Smith - 135 minutes
Completed lesson in Intro to Programming
Completed lesson in Intro to Programming
Intro to Programming: 2/3 lessons
Enrollment failed: CS999Nota come il servizio gestisce la relazione tra studenti e corsi, mentre ogni classe si occupa delle proprie responsabilità. Lo studente tiene traccia dei propri progressi, i corsi calcolano la propria durata totale e il servizio di iscrizione coordina ogni cosa: una chiara separazione delle responsabilità!
Provalo tu
using System;
using System.Collections.Generic;
using ELearning.Models;
using ELearning.Services;
class Program
{
public static void Main(string[] args)
{
// Leggi il numero di corsi
int numCourses = Convert.ToInt32(Console.ReadLine());
// TODO: Crea un'istanza di EnrollmentService
// TODO: Leggi e crea ogni corso con le relative lezioni
// Per ogni corso: leggi ID, titolo, docente e numero di lezioni
// Per ogni lezione: leggi titolo e durata
// Aggiungi le lezioni al corso, poi aggiungi il corso al servizio
// Leggi le informazioni dello studente
int studentId = Convert.ToInt32(Console.ReadLine());
string studentName = Console.ReadLine();
// TODO: Crea un'istanza di Student
// Leggi il numero di operazioni
int numOperations = Convert.ToInt32(Console.ReadLine());
// TODO: Elabora ogni operazione
// Per ogni operazione: leggi l'azione e courseId
// Gestisci: enroll, complete, progress, info
// Visualizza il messaggio appropriato in base all'azione
}
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniNamespace e direttiveIntroduzione a classi e oggettiLa parola chiave "this"Metodi e parametriCampi e proprietàCostruttoriInizializzatori di oggettiRiepilogo - Calcolatrice semplice4Ereditarietà
Sintassi di base dell'ereditarietà (:)La parola chiave 'base'Parole chiave virtual e overrideClassi sealedLa classe base 'object'Riepilogo - Gerarchia dei dipendenti7Funzionalità avanzate
Sovraccarico degli operatoriIndicizzatori (this[])Override di ToString()Metodi di estensioneRiepilogo - Lista personalizzata10Pattern di progettazione Parte 1
Introduzione ai pattern di progettazioneSingleton thread-safePattern FactoryPattern Observer (eventi)Pattern Strategy13Sfide finali
Piattaforma di e-learningComponente del personaggio di giocoServizio di noleggio veicoli2Proprietà e membri statici
Proprietà implementate automaticamenteProprietà di sola lettura e di sola scritturaCampi e metodi staticiClassi staticheMembri con corpo di espressione5Polimorfismo e interfacce
Polimorfismo a compile time e runtimeInterfaccia o classe astrattaInterfacce multipleInterfacce espliciteUpcasting e downcastingRipasso: calcolatore di forme8Concetti avanzati di programmazione a oggetti
Composizione invece dell'ereditarietàTipi generici (classi e metodi)Delegati ed eventiAttributi e reflectionIDisposable e istruzione usingNozioni di base sull'iniezione delle dipendenze11Pattern di progettazione, parte 2
Pattern del ComandoPattern dell’AdattatorePattern del DecoratorePattern Template MethodPattern dello StatoPattern Composito3Architettura delle classi
Dati di istanza vs staticiParole chiave 'readonly' e 'const'Campi di supportoRiepilogo - Gestore di conti bancari6Incapsulamento
Modificatori di accessoProprietà per l'incapsulamentoImplementazione dell'occultamento dei datiModelli di immutabilitàRiepilogo - Registri degli studentiEsercitati da solo: Compilatore C# online