Повторение — система учёта студентов
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 43 из 91.
Задание
ЛегкоДавайте создадим систему учёта студентов, которая объединит все изученные вами в этой главе концепции инкапсуляции. Вы создадите хорошо организованную систему, безопасно управляющую данными студентов, используя продвижение конструктора, private-свойства, геттеры и сеттеры с проверкой и сокрытие информации.
Вы организуете код в трёх файлах:
Student.php: создайте классStudent, используя продвижение конструктора для private$name(строка) и private$studentId(строка). Также добавьте private-свойство$gradesтипа array (initialized как empty). У вашего студента должны быть:getName(): возвращает имя студентаgetStudentId(): возвращает идентификатор студентаaddGrade(int $grade): добавляет оценку, только если она находится between 0 и 100 (inclusive)getAverage(): возвращает среднее значение всех оценок как float (возвращает 0.0, если оценок нет)getGradeCount(): возвращает количество записанных оценок
Classroom.php: создайте классClassroom, управляющий коллекцией студентов. Используйте private array для хранения студентов. Подключите файл Student. В вашем классе должны быть:- Конструктор, принимающий private
$roomName(строка) с использованием продвижения конструктора addStudent(Student $student): добавляет студента в классgetStudentCount(): возвращает количество зачисленных студентовgetClassAverage(): calculates среднее значение средних оценок всех студентов (возвращает 0.0, если студентов или оценок нет)getRoomName(): возвращает название класса
- Конструктор, принимающий private
main.php: подключите файл Classroom. Вы получите пять входных значений: название класса, имя студента, идентификатор студента и две оценки. СоздайтеClassroomс названием класса. СоздайтеStudentс именем и идентификатором, добавьте обе оценки (преобразованные в целые числа), а затем добавьте студента в класс. Выведите четыре строки:- Название класса
- Имя студента, за которым следует его средняя оценка, formatted с точностью до 1 десятичного знака:
"[name]: [average]" - Количество оценок этого студента
- Средняя оценка класса, formatted с точностью до 1 десятичного знака
Эта система демонстрирует правильную инкапсуляцию: оценки защищены от прямого изменения, средние значения рассчитываются внутри системы без раскрытия исходных данных, а все данные проходят через контролируемые методы. Классу не нужно знать, как студенты рассчитывают свои средние значения. Он просто запрашивает результат.
Попробуйте сами
<?php
require_once 'Classroom.php';
// Читать входные данные
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));
// TODO: Создать Classroom с именем комнаты
// TODO: Создать Student с именем и ID
// TODO: Добавить обе оценки студенту
// TODO: Добавить студента в classroom
// TODO: Вывести имя комнаты
// TODO: Вывести имя студента, за которым следует его средний балл, отформатированный до 1 десятичного знака: "[name]: [average]"
// TODO: Вывести количество оценок для этого студента
// TODO: Вывести средний балл класса, отформатированный до 1 десятичного знака
?>Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово $thisМетодыСвойстваКонструктор (__construct)Деструктор (__destruct)Повторение — простой калькулятор4Наследование
Основы наследованияКлючевое слово parent::Переопределение методовКлючевое слово finalАбстрактные классыПовторение — иерархия сотрудников7Инкапсуляция
Public, Protected, PrivateМодификаторы доступа подробноГеттеры и сеттерыСокрытие информацииПродвижение конструктора (8.0)Повторение — система учёта студентов2Пространства имён и автозагрузка
Введение в пространства имёнКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerПовторение — структурированный проект5Интерфейсы и контракты
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовИнтерфейс и абстрактный классАннотация типов с интерфейсамиПовторение — калькулятор фигур8Магические методы
Введение в магические методы__toString и __debugInfo__get, __set, __isset, __unset__call и __callStatic__clone и клонирование объектов__serialize и __unserializeПовторение — пользовательская коллекция3Свойства классов
Свойства экземпляра и статические свойстваКонстанты в классахСтатические методы и свойстваПриватные и защищённые свойстваСвойства только для чтения (PHP 8.1)Повторение — менеджер банковского счёта6Полиморфизм
Повторение переопределения методовПолиморфизм через интерфейсыАннотации типов и объединённые типыПозднее статическое связываниеПовторение — обработчик платежей9Трейты
Введение в трейтыИспользование нескольких трейтовРазрешение конфликтов трейтовАбстрактные методы в трейтахТрейты и наследование12Паттерны проектирования, часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн StrategyПотренируйтесь самостоятельно: Онлайн-компилятор PHP