Опишите правило до устройства класса
В вымышленной модели есть два места и число уже занятых мест. Оно не должно быть отрицательным или превышать вместимость. Такое условие должно сохраняться после каждого допустимого действия. Пока не нужны настоящие платежи, посетители или календарь: нас интересует только правило состояния. Запишите его обычными словами. Если правило не сформулировано, выбор имён классов и свойств не сделает программу понятной. Сначала определяют допустимые состояния, затем способы перехода между ними.
Скройте произвольное изменение
Инкапсуляция позволяет управлять доступом к внутреннему состоянию объекта через предусмотренные операции. Вместо свободного присваивания числа занятых мест можно предоставить действие резервирования одного места с проверкой доступности. Чтение текущего количества при этом может оставаться открытым. В C# для организации доступа используются модификаторы доступа, свойства и методы. Само наличие закрытого поля не гарантирует правильности: публичный метод тоже должен сохранять правило. Ограничение доступа помогает сделать место проверки явным.
Проверьте границы на последовательности
Начальное число занятых мест равно нулю. Два успешных резервирования дают сначала одно, затем два занятых места. Третья попытка должна сообщить об отсутствии места, сохранив значение два. В упрощённой модели предусмотрено освобождение одного занятого места; если занятых мест уже ноль, уменьшение недопустимо. В реальной системе дополнительно потребовались бы идентификаторы бронирований и правила отмены. Учебный счётчик не подтверждает, кто именно имеет право освободить конкретное место.
Не усложняйте модель раньше задачи
Наследование и полиморфизм полезны, когда разные типы действительно требуют общего контракта и различающегося поведения. Для одного ограниченного счётчика сложная иерархия может быть лишней. Начните с ответственности объекта и понятных операций. Также различайте корректность одного объекта в последовательном примере и надёжность общей системы: одновременные запросы, хранение данных и доступ пользователей требуют дополнительных решений. Закрытое поле само по себе не обеспечивает безопасность сервиса или защиту от конфликтов параллельной работы.
Попробуйте на практике
На бумаге опишите поведение учебного объекта с вместимостью два. Код и реальное бронирование для задания не требуются.
- Запишите допустимый диапазон числа занятых мест и начальное значение ноль.
- Пройдите три последовательные попытки занять по одному месту. После каждой отметьте результат и состояние.
- Затем освободите по одному месту три раза в рамках условного сценария. Не допускайте отрицательного значения.
- Определите, какие данные можно читать снаружи и какие изменения должны проходить только через проверяемые операции.
Как проверить результат. После трёх попыток резервирования состояние равно двум, третья попытка отклонена. После последовательных освобождений состояние достигает нуля и больше не уменьшается. Все переходы сохраняют заданное правило.
Частые вопросы
Инкапсуляция означает, что данные нельзя прочитать?
Нет. Можно разрешить чтение и ограничить изменение. Главное, чтобы публичные возможности объекта соответствовали его ответственности и не позволяли обходить необходимые проверки.
Класс с большим количеством свойств уже является хорошей объектной моделью?
Не обязательно. Важно, какие правила он поддерживает и как используются его операции. Набор открыто изменяемых данных может оставлять всю ответственность внешнему коду и затруднять понимание поведения.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.