Страницы

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

понедельник, 1 октября 2018 г.

В чем преимущества использования закрытых (private) методов в классе?

В чем преимущества использования закрытых (private) методов в классе, кроме скрытых вычислений?


Ответ

При написании достаточно большого куска кода (неважно, класса, функции или чего-нибудь ещё) важным приёмом является декомпозиция. Вы делите функциональность на логические части, и в главной функции складываете из них, как из кирпичиков, общую логику.
При этом сами кирпичики могут быть не приспособлены для доступа снаружи. Например, открытый метод может проверять входные параметры, а вспомогательным методам-кирпичикам это уже не нужно, т. к. они вызываются лишь изнутри. Если бы эти методы были открытыми, в них нужно было бы реализовывать проверку параметров, и при их имплементации нельзя было бы рассчитывать на то, что они будут вызваны в контролируемый вами момент.
Кроме того, внутренние методы имеют право портить состояние класса, если вы знаете, что вызывающий их код потом эту проблему исправит. Если сделать эти методы открытыми, пользователи этого класса смогут испортить внутреннее состояние класса без исправления.
Затем, внутренние методы могут не иметь ничего общего с тем, что должен предоставлять класс, с его внешним интерфейсом. Например, если класс представляет машину, то открытый метод в нём, переводящий дюймы в сантиметры, смотрелся бы нелепо. А вот внутри такой перевод вполне может понадобиться.
Ну и в конце-концов, публичный метод — это обещание для пользователей. Каждое изменение (удаление, изменение сигнатуры, а иногда и добавление) открытого метода — breaking change для клиентов, они должны пересмотреть код, который использует ваш класс. Таким образом, вы не должны просто так, без особой на то необходимости менять открытые методы класса. А вот изменения в закрытых методах обычно происходят при рефакторинге в массовом порядке: методы упрощаются, объединяются, раскладываются на несколько, переносятся вверх-вниз по иерархии, меняется их семантика, и всё это никак не отражается на пользователях вашего класса.

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

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