Модификаторы доступа ... Почему? - PullRequest
1 голос
/ 14 сентября 2010

Хорошо, поэтому я просто подумал, почему программисты так сильно напрягаются, когда дело доходит до Модификаторов доступа в ООП.

Давайте возьмем этот код для примера / PHP!

class StackOverflow
{
    private var $web_address;

    public function setWebAddress(){/*...*/}
}

Поскольку web_address является частным, его нельзя изменить $object->web_address = 'w.e.', но тот факт, что эта переменная будет изменяться только в том случае, если ваша программа делает $object->web_address = 'w.e.';

Если бы в моем приложении я хотел, чтобы переменная не изменялась, тогда я бы сделал свое приложение таким, чтобы в моем программировании не было кода для его изменения, поэтому оно никогда не будет изменено?

Итак, мой вопрос: Каковы основные правила и причины использования частных / защищенных / непубличных объектов

Ответы [ 6 ]

3 голосов
/ 14 сентября 2010

Поскольку (в идеале) класс должен состоять из двух частей:

  1. интерфейса, доступного остальному миру, манифест того, как другие могут с ним общаться.Пример в классе дескриптора файла: String read(int bytes).Конечно, это должно быть публично, (одна / основная) цель нашего класса - предоставить эту функциональность.
  2. внутреннее состояние, о котором никто (кроме самого экземпляра) должен (должен) заботиться.Пример в классе дескриптора файла: private String buffer.Это может и должно быть скрыто от остального мира: у них нет бизнеса, это деталь реализации.

Это даже делается на языке без модификаторов доступа, например, Python - за исключением того, что мыне заставляйте людей уважать конфиденциальность (и помните, что они всегда могут использовать отражение в любом случае - инкапсуляция никогда не может быть обеспечена на 100%), но префикс частных членов с _, чтобы указать «вы не должны касаться этого; если вы хотите запутатьсясделай на свой страх и риск ".

2 голосов
/ 14 сентября 2010

Итак, мой вопрос: каковы основные правила и причины использования частных / защищенных / непубличных организаций

В Python нет модификаторов доступа.

Так что причины на самом деле зависят от языка. Возможно, вы захотите немного обновить свой вопрос, чтобы отразить это.

Это довольно распространенный вопрос о Python. Многим программистам из Java или C ++ (или других) фонов нравится глубоко задумываться над этим. Когда они изучают Python, на самом деле нет глубокого мышления. Принцип действия

Мы все здесь взрослые

Непонятно, кому именно - помогают модификаторы доступа. В книге Лакоса «Разработка крупномасштабного программного обеспечения» долго обсуждается «защищенный», так как семантика защищенного делает подклассы и клиентские интерфейсы немного мутными.

http://www.amazon.com/Large-Scale-Software-Design-John-Lakos/dp/0201633620

2 голосов
/ 14 сентября 2010

Поскольку вы можете быть не единственным разработчиком в своем проекте, а другие разработчики могут не знать, что им не следует его менять. Или вы можете забыть и т. Д.

Это позволяет легко определить (даже компилятор может определить это), когда вы делаете что-то, что кто-то сказал, будет плохой идеей.

0 голосов
/ 14 сентября 2010

То, что у класса есть «что-то», не означает, что оно должно раскрывать это что-то. Класс должен реализовывать свой контракт / интерфейс / как угодно, как вы хотите его называть, но при этом он может легко иметь все виды внутренних членов / методов, которые не должны быть (и по всем правам не должны) известны извне этого класса.

Конечно, вы могли бы написать остальную часть своего приложения, чтобы в любом случае иметь дело с ним, но это не совсем хороший дизайн.

0 голосов
/ 14 сентября 2010

Вы удерживаете себя от случайного выполнения $object->web_address = 'w.e.';.Это может показаться ненужным на данный момент, но это не будет ненужным, если

  • через два месяца вы захотите что-то изменить в проекте (и забыли все о том, что web_addressне следует изменять напрямую) или

  • в вашем проекте много тысяч строк кода, и вы просто не можете вспомнить, какие поля вам «разрешено» устанавливать напрямую, а какие требуют метода установки.

0 голосов
/ 14 сентября 2010

Модификаторы доступа - это инструмент для оборонительного программирования стратегии. Вы сознательно защищаете свой код от собственных глупых ошибок (когда через некоторое время вы что-то забыли, что-то не поняли правильно или просто не выпили достаточно кофе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...