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