Страницы

Поиск по вопросам

суббота, 13 октября 2018 г.

Плохо ли использовать публичные переменные класса?

Изучаю С++. Важна скорость. Стоит ли писать методы для одного лишь изменения\получения переменой встроенного типа? Пользовательского типа? Компилятор сообразит? Или пихнуть в паблик и обращаться напрямую?
Во всех "уроках" и книгах для совсем новичков все делают через методы, но непонятно, для наглядности или что бы колено цело было?


Ответ

Это сделано для соблюдения принципа инкапсуляции в ООП, т.е. скрытия деталей реализации класса от потребителя класса.
В большинстве случаев, данные класса имеют прямое отношение к конкретным деталям реализации и требуют контроля со стороны разработчика по установке этих данных для соблюдения инвариантов класса. Т.е. значения должны быть установлены таким образом, что бы класс мог корректно работать.
Представь ситуацию, в которой твое поле требует установки не просто любого значения, а конкретных валидных значений (т.е. соблюдения каких-то предусловий). В таких ситуациях отдавать установку значений на откуп пользователя твоего класса было бы опрометчиво:
class Rectangle { private: int _width; int _height;
public: void setWidth(int width) { if (width > 0) _width = width;
... } };
В данном примере, установка ширины прямоугольника и проверка предусловий (ширина не может быть нулевой или отрицательной) и, как следствие, соблюдения инварианта класса (не может быть прямоугольника с отрицательной или нулевой шириной) прямая обязанность класса Rectangle, так как пользователь может ничего не знать о внутреннем устройстве вашего класса и устанавливать любые значения, в том числе некорректные.

Комментариев нет:

Отправить комментарий