Я слышал, как люди говорили, что наличие protected
членов как бы ломает точку инкапсуляции и не является лучшей практикой, нужно разрабатывать программу так, чтобы у производных классов не было доступа к private
базовому классу. члены.
Пример ситуации
Теперь представьте себе следующий сценарий, простая 8-битная игра, у нас есть куча различных объектов, таких как обычные коробки выступают в качестве препятствий, шипы , монеты , движущиеся платформы et c. Список может go on.
Все они имеют x и y координаты , прямоугольник, который определяет размер объекта, поле столкновения и a текстура . Также они могут совместно использовать такие функции, как установка положения , рендеринг , загрузка текстуры , проверка на столкновение et c.
Но некоторым из них также необходимо изменить базовые элементы, например, ящики можно перемещать, поэтому им может понадобиться функция перемещения, некоторые объекты могут перемещаться сами по себе или, возможно, некоторые блоки меняют текстуру в игре.
Следовательно, базовый класс, такой как object
, действительно может пригодиться, но для этого потребуется либо тонна getter - setters , либо наличие private
членов, равных protected
. В любом случае, компрометация компрометирует.
Учитывая анекдотический контекст, что было бы лучше:
1. Иметь общий базовый класс с общими функциями и члены, объявленные защищенными. Уметь использовать общие функции, передавать ссылку на базовый класс функциям, не являющимся членами, которым требуется только доступ к общим свойствам. Но компромиссная инкапсуляция.
2. Создайте отдельный класс для каждого, объявите переменные-члены как закрытые и не нарушите инкапсуляцию.
3 . Лучший способ, о котором я не мог и подумать.
Я не думаю, что инкапсуляция является жизненно важной и, вероятно, путь к go для этого анекдота будет просто иметь защищенных членов, но моя цель в этом вопросе - написать хорошо отработанный стандартный код, вместо того, чтобы решить эту конкретную c проблему.
Заранее спасибо.