Riepilogo - Sistema di gestione dei registri degli studenti
Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 43 di 91.
Sfida
FacileCostruiamo un sistema di gestione dei dati degli studenti che riunisca tutti i concetti di incapsulamento che hai imparato in questo capitolo. Creerai un sistema ben organizzato che gestisce in modo sicuro i dati degli studenti, usando la promozione dei parametri del costruttore, proprietà private, getter e setter con convalida e occultamento delle informazioni.
Organizzerai il codice in tre file:
Student.php: crea una classeStudentusando la promozione dei parametri del costruttore per un$nameprivato (stringa) e un$studentIdprivato (stringa). Includi anche una proprietà array privata$grades(inizializzata come vuota). La classe Student deve avere:getName(): restituisce il nome dello studentegetStudentId(): restituisce l'ID dello studenteaddGrade(int $grade): aggiunge un voto solo se è compreso tra 0 e 100 (inclusi)getAverage(): restituisce la media di tutti i voti come float (restituisce 0.0 se non ci sono voti)getGradeCount(): restituisce il numero di voti registrati
Classroom.php: crea una classeClassroomche gestisce una raccolta di studenti. Usa un array privato per memorizzare gli studenti. Includi il file Student. La classe Classroom deve avere:- Un costruttore che accetta un
$roomNameprivato (stringa) usando la promozione dei parametri del costruttore addStudent(Student $student): aggiunge uno studente alla classegetStudentCount(): restituisce il numero di studenti iscrittigetClassAverage(): calcola la media delle medie di tutti gli studenti (restituisce 0.0 se non ci sono studenti o voti)getRoomName(): restituisce il nome della classe
- Un costruttore che accetta un
main.php: includi il file Classroom. Riceverai cinque input: il nome di una classe, il nome di uno studente, l'ID dello studente e due voti. Crea unaClassroomcon il nome della classe. Crea unoStudentcon il nome e l'ID, aggiungi entrambi i voti (convertiti in interi), quindi aggiungi lo studente alla classe. Stampa quattro righe:- Il nome della classe
- Il nome dello studente seguito dalla sua media formattata con 1 cifra decimale:
"[name]: [average]" - Il numero di voti di quello studente
- La media della classe formattata con 1 cifra decimale
Questo sistema dimostra un incapsulamento corretto: i voti sono protetti dalla modifica diretta, le medie vengono calcolate internamente senza esporre i dati grezzi e tutti i dati passano attraverso metodi controllati. La classe non deve sapere come gli studenti calcolano le proprie medie. Si limita a chiedere il risultato.
Provalo tu
<?php
require_once 'Classroom.php';
// Leggi i dati di input
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));
// TODO: Crea una Classroom con il nome dell'aula
// TODO: Crea uno Student con il nome e l'ID
// TODO: Aggiungi entrambi i voti allo studente
// TODO: Aggiungi lo studente alla classe
// TODO: Stampa il nome dell'aula
// TODO: Stampa il nome dello studente seguito dalla sua media formattata con 1 cifra decimale: "[name]: [average]"
// TODO: Stampa il numero di voti di quello studente
// TODO: Stampa la media della classe formattata con 1 cifra decimale
?>Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave $thisMetodiProprietàCostruttore (__construct)Distruttore (__destruct)Riepilogo - Calcolatrice semplice4Ereditarietà
Ereditarietà di baseLa parola chiave parent::Sovrascrittura dei metodiLa parola chiave finalClassi astratteRiepilogo - Gerarchia dei dipendenti7Incapsulamento
Pubblico, Protetto, PrivatoApprofondimento sui modificatori di accessoGetter e SetterOccultamento delle informazioniPromozione dei parametri del costruttore (8.0)Riepilogo - Sistema di gestione dei registri degli studenti10Concetti avanzati di programmazione a oggetti
Composizione vs ereditarietàDependency InjectionClassi anonimeEnumerazioni (PHP 8.1)Fibers (PHP 8.1)Approfondimento sulla clonazione degli oggettiGeneratori e iteratori13Modelli di progettazione, parte 2
Modello CommandModello AdapterModello DecoratorModello Template MethodModello StateModello CompositeModello Repository2Namespace e autoloading
Introduzione ai namespaceLa keyword useStandard di autoloading PSR-4Autoloader di ComposerRiepilogo - Progetto organizzato5Interfacce e contratti
Introduzione alle interfacceImplementare le interfacceImplementare più interfacceInterfaccia vs classe astrattaType hinting con le interfacceRiepilogo - Calcolatore di forme8Metodi magici
Introduzione ai metodi magici__toString e __debugInfo__get, __set, __isset, __unset__call e __callStatic__clone e clonazione degli oggetti__serialize e __unserializeRiepilogo - Collezione personalizzata11Sistema dei tipi e gestione degli errori
Dichiarazioni di tipoTipi nullableTipi unione e intersezioneClassi di eccezioneGerarchia di eccezioni personalizzataTry, Catch, FinallyRiepilogo - Validatore di moduli14Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Proprietà delle classi
Proprietà di istanza e staticheCostanti nelle classiMetodi e proprietà staticiProprietà private e protectedProprietà readonly (PHP 8.1)Riepilogo - Gestore di conti bancari6Polimorfismo
Ridefinizione dei metodi, ripresaPolimorfismo tramite interfacceSuggerimenti sui tipi e tipi UnionBinding statico tardivoRiepilogo - Processore di pagamenti9Tratti
Introduzione ai trattiUtilizzare più trattiRisoluzione dei conflitti tra trattiMetodi astratti nei trattiTratti vs ereditarietà12Design pattern - Parte 1
Introduzione ai design patternPattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore PHP online