Модификаторы доступа... Почему?
Итак, я просто подумал, почему программисты так сильно напрягаются, когда дело доходит до модификаторов доступа в ООП.
Давайте возьмем этот код для примера / PHP!
class Stackru
{
private var $web_address;
public function setWebAddress(){/*...*/}
}
Поскольку web_address является закрытым, он не может быть изменен $object->web_address = 'w.e.'
, но тот факт, что эта переменная только когда-либо изменится, - это если ваша программа $object->web_address = 'w.e.';
Если бы в моем приложении я хотел, чтобы переменная не изменялась, то я бы сделал свое приложение таким, чтобы в моем программировании не было кода для его изменения, поэтому оно никогда не будет изменено?
Итак, мой вопрос: каковы основные правила и причины использования частных / защищенных / непубличных организаций
6 ответов
Потому что (в идеале) класс должен состоять из двух частей:
- интерфейс, доступный остальному миру, манифест того, как другие могут с ним общаться. Пример в классе дескриптора файла:
String read(int bytes)
, Конечно, это должно быть публично, (одна / основная) цель нашего класса - предоставить эту функциональность. - внутреннее состояние, о котором никто (кроме самого экземпляра) должен (должен) заботиться. Пример в классе дескриптора файла:
private String buffer
, Это может и должно быть скрыто от остального мира: у них нет дела с этим, это деталь реализации.
Это даже делается на языке без модификаторов доступа, например, Python - за исключением того, что мы не принуждаем людей уважать конфиденциальность (и помните, что они всегда могут использовать отражение в любом случае - инкапсуляция никогда не может быть обеспечена на 100%), но префикс частных членов с _
чтобы указать "вы не должны касаться этого; если вы хотите возиться с этим, делайте на свой страх и риск".
Потому что вы можете быть не единственным разработчиком в вашем проекте, а другие разработчики могут не знать, что им не следует его менять. Или вы можете забыть и т. Д.
Это позволяет легко определить (даже компилятор может определить это), когда вы делаете что-то, что кто-то сказал, было бы плохой идеей.
Итак, мой вопрос: каковы основные правила и причины использования частных / защищенных / непубличных организаций
В Python нет модификаторов доступа.
Так что причины на самом деле зависят от языка. Вы можете обновить свой вопрос немного, чтобы отразить это.
Это довольно распространенный вопрос о Python. Многим программистам из Java или C++ (или других) фонов нравится глубоко задумываться над этим. Когда они изучают Python, на самом деле нет глубокого мышления. Принцип действия
Мы все здесь взрослые
Непонятно, кто именно - модификаторы доступа помогают. В книге Лакоса "Разработка крупномасштабного программного обеспечения" долго обсуждается "защищенный", так как семантика защищенного делает подклассы и клиентские интерфейсы немного мутными.
http://www.amazon.com/Large-Scale-Software-Design-John-Lakos/dp/0201633620
Модификаторы доступа - это инструмент для стратегии защитного программирования. Вы сознательно защищаете свой код от собственных глупых ошибок (когда через некоторое время вы что-то забыли, что-то не поняли правильно или просто не выпили достаточно кофе).
То, что у класса есть "что-то", не означает, что он должен что-то выставлять. Класс должен реализовывать свой контракт / интерфейс / как угодно, как вы хотите его называть, но при этом он может легко иметь все виды внутренних членов / методов, которые не нужно (и по всем правам не должны быть) известны извне этого класса.
Конечно, вы могли бы написать остальную часть своего приложения, чтобы в любом случае справиться с ним, но это не совсем хороший дизайн.
Вы удерживаете себя от случайного выполнения $object->web_address = 'w.e.';
, Это может показаться ненужным на данный момент, но это не будет ненужным, если
через два месяца вы хотите что-то изменить в проекте (и забыли все о том, что
web_address
не должны быть изменены напрямую) илиВ вашем проекте много тысяч строк кода, и вы просто не можете вспомнить, какие поля вам "разрешено" устанавливать напрямую, а какие требуют метода установки.