Riepilogo - Registri degli studenti
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 35 di 70.
Sfida
FacileCostruiamo un sistema di registri degli studenti che riunisce tutte le tecniche di incapsulamento che hai imparato in questo capitolo. Creerai un sistema sicuro in cui i dati degli studenti sono adeguatamente protetti, i voti vengono convalidati e alcune informazioni rimangono immutabili dopo la creazione.
Organizzerai il codice in due file:
Student.cs: crea una classeStudentnello spazio dei nomiRecordsche dimostri un corretto incapsulamento. La classe dello studente deve avere:- Un campo
readonlyName(stringa) accessibile pubblicamente, ma che può essere impostato solo durante la costruzione - Un campo
readonlyprivato per l'ID dello studente (stringa): non deve mai essere accessibile direttamente dall'esterno - Un elenco privato per memorizzare i voti (numeri interi)
- Una proprietà pubblica di sola lettura
Averageche calcola e restituisce la media di tutti i voti, oppure0se non sono presenti voti - Un metodo pubblico
AddGrade(int grade)che accetta solo voti compresi tra 0 e 100 (inclusi): i voti non validi devono essere ignorati senza segnalazioni - Un metodo pubblico
GetGradeCount()che restituisce il numero di voti validi registrati - Un metodo pubblico
GetStudentInfo()che restituisce una stringa nel formato"{Name} (ID: {last 4 characters of student ID})": nota che esponi solo una versione mascherata dell'ID!
- Un campo
Program.cs: nel file principale, crea uno studente e aggiungi diversi voti per mostrare come funziona l'incapsulamento. Mostrerai che i voti validi vengono accettati, quelli non validi vengono rifiutati e la media viene calcolata correttamente.
Riceverai cinque input:
- Nome dello studente
- ID dello studente (almeno 4 caratteri)
- Primo voto da aggiungere (numero intero)
- Secondo voto da aggiungere (numero intero, potrebbe non essere valido, come -5 o 150)
- Terzo voto da aggiungere (numero intero)
Stampa l'output in questo formato:
{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}Ad esempio, se gli input sono Emma Wilson, STU12345, 85, 150 e 90, l'output dovrebbe essere:
Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5Nota che il voto non valido 150 è stato ignorato senza segnalazioni, quindi sono stati registrati solo due voti. L'ID dello studente è protetto: il codice esterno non può mai vedere l'ID completo, ma solo la versione mascherata tramite GetStudentInfo(). Il nome è leggibile ma immutabile. Questo è l'incapsulamento che lavora insieme per creare una classe robusta e ben protetta!
Provalo tu
using System;
using Records;
class Program
{
public static void Main(string[] args)
{
// Leggi i dati di input
string name = Console.ReadLine();
string studentId = Console.ReadLine();
int grade1 = Convert.ToInt32(Console.ReadLine());
int grade2 = Convert.ToInt32(Console.ReadLine());
int grade3 = Convert.ToInt32(Console.ReadLine());
// TODO: Crea un oggetto Student con name e studentId
// TODO: Aggiungi tutti e tre i voti usando il metodo AddGrade
// TODO: Stampa l'output nel formato richiesto:
// {risultato di GetStudentInfo()}
// Grades recorded: {GetGradeCount()}
// Media: {Average}
}
}
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 Strategy2Proprietà 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