Антипример: незащищённое здоровье
Представьте, что мы создаём класс Hero (герой) со свойством hp (здоровье). По задумке, здоровье должно быть в диапазоне от 0 до 100.
Проблема: здоровье превысило задуманный нами максимум (100). Ничто не мешает установить здоровье в 115, 200 или даже -10. Данные не защищены.
Инкапсуляция — защита данных
Инкапсуляция — это принцип ООП, при котором внутренние данные объекта скрыты от прямого доступа извне и могут изменяться только через специальные методы.
Это позволяет контролировать, как именно изменяются данные, и предотвращать невалидные состояния.
Модификаторы доступа: public и private
В Idyllium доступ к свойствам и методам класса регулируется модификаторами public и private. Синтаксис — как в C++: модификатор, затем двоеточие, и всё, что ниже, относится к этому модификатору до следующего модификатора.
public— доступно отовсюду (из любого места программы).private— доступно только внутри методов самого класса.
Пример с защищённым здоровьем
Теперь здоровье героя защищено. Изменять его можно только через методы heal() и hit(), которые следят за границами диапазона:
Теперь здоровье героя всегда в диапазоне 0–100. Перехилить невозможно!
Попытка доступа к приватному свойству
Если попробовать обратиться к приватному свойству напрямую из main(), компилятор выдаст ошибку:
Это защищает данные от случайного или намеренного повреждения извне.
Правила хорошего тона
- Все свойства класса делайте
private. - Для доступа к значениям свойств создавайте публичные методы-геттеры (
get_...). - Для изменения значений — методы-сеттеры (
set_...) с проверкой корректности. - Публичными (public) можно оставлять только те методы, которые образуют интерфейс класса.
Этот подход называется «скрытие реализации» и является основой надёжного объектно-ориентированного дизайна.
Итог
- Инкапсуляция — сокрытие внутренних данных объекта от внешнего мира.
public— доступно везде.private— доступно только внутри методов класса.- Приватные свойства изменяются только через публичные методы, которые могут проверять корректность новых значений.
- Инкапсуляция защищает данные от неконтролируемых изменений.