Podsumowanie — system ewidencji studentów
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 43 z 91.
Wyzwanie
ŁatwyStwórzmy system ewidencji uczniów, który łączy wszystkie poznane przez Ciebie w tym rozdziale koncepcje enkapsulacji. Stworzysz dobrze zorganizowany system, który bezpiecznie zarządza danymi uczniów, wykorzystując promocję konstruktora, prywatne właściwości, metody pobierające i ustawiające z walidacją oraz ukrywanie informacji.
Podzielisz swój kod na trzy pliki:
Student.php: Utwórz klasęStudent, używając promocji konstruktora dla prywatnych pól$name(string) i$studentId(string). Dodaj także prywatną właściwość tablicową$grades(zainicjalizowaną jako pusta). Klasa ucznia powinna mieć:getName(): zwraca imię i nazwisko uczniagetStudentId(): zwraca identyfikator uczniaaddGrade(int $grade): dodaje ocenę tylko wtedy, gdy mieści się ona w przedziale od 0 do 100 (włącznie)getAverage(): zwraca średnią wszystkich ocen jako liczbę typu float (zwraca 0.0, jeśli nie ma żadnych ocen)getGradeCount(): zwraca liczbę zapisanych ocen
Classroom.php: Utwórz klasęClassroom, która zarządza kolekcją uczniów. Użyj prywatnej tablicy do przechowywania uczniów. Dołącz plik Student. Twoja klasa powinna mieć:- Konstruktor przyjmujący prywatne
$roomName(string) z użyciem promocji konstruktora addStudent(Student $student): dodaje ucznia do klasygetStudentCount(): zwraca liczbę zapisanych uczniówgetClassAverage(): oblicza średnią ze średnich wszystkich uczniów (zwraca 0.0, jeśli nie ma uczniów lub ocen)getRoomName(): zwraca nazwę klasy
- Konstruktor przyjmujący prywatne
main.php: Dołącz plik Classroom. Otrzymasz pięć danych wejściowych: nazwę klasy, imię i nazwisko ucznia, identyfikator ucznia oraz dwie oceny. Utwórz obiektClassroomz nazwą klasy. Utwórz obiektStudentz imieniem i nazwiskiem oraz identyfikatorem, dodaj obie oceny (przekonwertowane na liczby całkowite), a następnie dodaj ucznia do klasy. Wypisz cztery wiersze:- Nazwę klasy
- Imię i nazwisko ucznia, a następnie jego średnią sformatowaną do 1 miejsca po przecinku:
"[name]: [average]" - Liczbę ocen tego ucznia
- Średnią klasy sformatowaną do 1 miejsca po przecinku
Ten system pokazuje prawidłowe zastosowanie enkapsulacji: oceny są chronione przed bezpośrednią modyfikacją, średnie są obliczane wewnętrznie bez ujawniania surowych danych, a wszystkie dane przepływają przez kontrolowane metody. Klasa nie musi wiedzieć, jak uczniowie obliczają swoje średnie. Po prostu prosi o wynik.
Spróbuj swoich sił
<?php
require_once 'Classroom.php';
// Wczytaj dane wejściowe
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));
// TODO: Utwórz obiekt Classroom z nazwą klasy
// TODO: Utwórz obiekt Student z imieniem i ID
// TODO: Dodaj obie oceny uczniowi
// TODO: Dodaj ucznia do klasy
// TODO: Wypisz nazwę klasy
// TODO: Wypisz imię ucznia, a po nim jego średnią sformatowaną do 1 miejsca po przecinku: "[name]: [average]"
// TODO: Wypisz liczbę ocen tego ucznia
// TODO: Wypisz średnią klasy sformatowaną do 1 miejsca po przecinku
?>Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online