Riepilogo - Registri degli studenti
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 35 di 110.
Sfida
FacileCostruiamo un sistema di registri degli studenti che riunisca tutti i concetti di incapsulamento che hai imparato in questo capitolo. Creerai una classe Student che protegge correttamente i dati accademici sensibili, fornendo al contempo un accesso controllato tramite getter, setter e proprietà calcolate.
Organizzerai il codice in due file:
student.dart: Definisci una classeStudentche gestisce i registri accademici con un incapsulamento appropriato:- Un
final String id- l'ID dello studente non dovrebbe mai cambiare dopo la creazione - Un
String namepubblico - i nomi possono essere aggiornati - Un
List<int> _gradesprivato - l'elenco dei voti grezzi dovrebbe essere protetto - Un costruttore che accetta l'ID, il nome e un elenco iniziale di voti
- Un getter
gradeCountche restituisce il numero di voti registrati - Un getter calcolato
averageche calcola e restituisce la media di tutti i voti comedouble(restituisci0.0se non ci sono voti) - Un getter calcolato
letterGradeche restituisce una lettera in base alla media:'A'per 90+,'B'per 80-89,'C'per 70-79,'D'per 60-69 e'F'per meno di 60 - Un metodo
addGrade(int grade)che accetta solo voti compresi tra 0 e 100 (inclusi). Se il voto è valido, aggiungilo e stampaGrade [grade] added for [name]. Se non è valido, stampaInvalid grade: [grade] - Un metodo
getHighestGrade()che restituisce il voto più alto, oppure0se non ci sono voti - Un metodo
displayRecord()che mostra il riepilogo accademico dello studente
- Un
main.dart: Importa la classe dello studente e mostra l'incapsulamento in azione:- Crea uno studente con ID
'STU001', nome'Emma'e voti iniziali[85, 92, 78] - Chiama
displayRecord() - Aggiungi un voto pari a
95 - Prova ad aggiungere un voto non valido pari a
150 - Aggiungi un voto pari a
88 - Chiama
displayRecord() - Stampa
Highest grade: [highest]
- Crea uno studente con ID
Il metodo displayRecord() dovrebbe stampare in questo formato:
===== Student Record =====
ID: [id]
Name: [name]
Grades Recorded: [gradeCount]
Average: [average]
Letter Grade: [letterGrade]Output previsto:
===== Student Record =====
ID: STU001
Name: Emma
Grades Recorded: 3
Average: 85.0
Letter Grade: B
Grade 95 added for Emma
Invalid grade: 150
Grade 88 added for Emma
===== Student Record =====
ID: STU001
Name: Emma
Grades Recorded: 5
Average: 87.6
Letter Grade: B
Highest grade: 95Provalo tu
import 'student.dart';
void main() {
// TODO: Crea uno studente con id 'STU001', nome 'Emma' e voti iniziali [85, 92, 78]
// TODO: Chiama displayRecord()
// TODO: Aggiungi un voto di 95
// TODO: Prova ad aggiungere un voto non valido di 150
// TODO: Aggiungi un voto di 88
// TODO: Chiama displayRecord()
// TODO: Stampa "Highest grade: [highest]"
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniLibrerie e importazioniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave thisMetodiVariabili di istanzaFondamenti dei costruttoriRiepilogo - Calcolatrice semplice4Sicurezza dei valori null
Introduzione alla sicurezza dei valori nullNullable e non nullableGli operatori ? e !La keyword late e la sicurezza dei valori nullOperatori null-awareSicurezza dei valori null nelle classiRiepilogo - Sistema di profili utente7Classi astratte e interfacce
Classi astratteMetodi astrattiInterfacce in DartInterfacce impliciteImplementare vs estendereInterfacce multipleRiepilogo - Calcolatore di forme10Collezioni e generici
Panoramica di List, Set e MapCollezioni sicure rispetto ai tipiClassi genericheMetodi genericiVincoli sui genericiIterable e IteratorRiepilogo - Archiviazione generica13Concetti avanzati di OOP
Composizione vs ereditarietàMetodi di estensioneClassi chiamabiliClassi sealed (Dart 3)Record (Dart 3)Pattern e matching (3.0)Enum con metodi16Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente2I costruttori in Dart
Costruttore predefinitoCostruttori con nomeListe di inizializzazioneCostruttori costantiCostruttori factoryCostruttori di reindirizzamentoRiepilogo - Crea forme5Incapsulamento
Membri pubblici e privatiConvenzione del prefisso _Visibilità a livello di libreriaApprofondimento su getter e setterNascondimento delle informazioniRiepilogo - Registri degli studenti8Mixin
Introduzione ai MixinCreare MixinUsare più MixinParola chiave on nei MixinMixin vs ereditarietàMixin vs interfacciaRiepilogo - Sistema animale11Metodi speciali
Sovrascrittura di toString()Sovrascrittura di hashCode e ==Interfaccia ComparableMetodo call()Sovrascrittura di noSuchMethodRiepilogo - Collezione personalizzata14Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneSingletonFactoryObserverStrategy3Proprietà delle classi
Membri di istanza e staticiCampi final e constVariabili lateMetodi e campi staticiGetter e setterRiepilogo - Gestore di conti bancari6Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiL’annotazione @overrideLa parola chiave final per le classiCostruttori ed ereditarietàRiepilogo - Gerarchia dei dipendenti9Polimorfismo
Fondamenti di polimorfismoPolimorfismo tramite interfacceControllo del tipo a runtimeGli operatori is e asParola chiave covariantRiepilogo - Elaboratore di pagamenti12OOP asincrona
Future e async/awaitNozioni di base sugli streamController degli streamCostruttori asincroniAsync nei metodi di classeRiepilogo - Recupero dei dati15Pattern di progettazione Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern RepositoryEsercitati da solo: Compilatore Dart online