В ООП частные темы являются частными для кого? - PullRequest
5 голосов
/ 15 октября 2011

В ООП зачем нужно ставить что-то Private, например.Я знаю, что любой закрытый член не может быть доступен, но с теми же объектами класса.Но зачем мне это делать, пока я единственный программист моего проекта.Тот же вопрос распространяется на Protected, защищенный от кого!

Ответы [ 8 ]

11 голосов
/ 15 октября 2011

private и protected не предназначены для того, чтобы другие кодеры не могли получить доступ к внутренним объектам класса, но (также) для того, чтобы самостоятельно не могла создать программу без четко определенных интерфейсов.

Если каждый класс в вашем проекте может изменять любой другой класс, вы не только склонны вносить ошибки из-за огромного пространства состояний, но и не позволяете себе:

  • Изменение реализации (при неизменном интерфейсе) любого класса.
  • Когда-либо знакомить с проектом кого-то, кто не знаком со всеми внутренностями всех классов. Если у вас нет идеальной памяти и вы можете читать каждую строку кода, которую вы когда-либо писали, включая будущее вас.
  • Макетирование объектов для юнит-тестирования
  • Взаимодействие с другими версиями вашей программы / библиотеки. Предположим, что вы меняете внутренние компоненты одного класса, и вам удается отследить каждую ссылку на это внутреннее свойство в вашем проекте. Даже в этом случае вам может понадобиться снова подключиться к старой версии вашей программы. Это становится особенно трудным, если вместо методов получения / установки используются используемые свойства.
7 голосов
/ 15 октября 2011

Модификаторы доступа достигают двух разных вещей:

  1. Они ограничивают объем кода, который может вызывать побочные эффекты, упрощая установку инвариантов.

  2. Они защищают клиентов класса от изменений во внутреннем представлении.

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

5 голосов
/ 15 октября 2011

язык пытается заставить вас написать «хороший» код. «хороший» означает, что код структурирован, чистый и не подвержен ошибкам. поэтому вы должны объявлять типы, закрытые члены и так далее. если вы не хотите этого, вы можете использовать язык, который меньше в этом аспекте, например, python. но это означает, что ваша программа может (может!) быть более небезопасной или, если она становится очень большой, легко понять неправильно. это так же, как с комментариями. ты не должен их писать. особенно когда ты единственный программист. но это хороший стиль, и вы будете очень благодарны за это, если снова прочитаете свою программу через полгода.

5 голосов
/ 15 октября 2011

Защищено от вашего будущего "я", которое иначе могло бы случайно забыть, какие части объекта являются деталями, которые должны быть отделены от остальной части системы, и какие части представляют собой надежный интерфейс, на который могут положиться остальные система.

4 голосов
/ 15 октября 2011

Вы отмечаете членов класса private, к которым нельзя обращаться извне класса. Например, вы используете это, чтобы скрыть детали реализации, чтобы вы могли изменить реализацию, не затрагивая другой код , используя ваш класс. Сокрытие деталей реализации является одним из ключевых аспектов ООП (инкапсуляция). Если вы создаете класс Car, а затем пишете много кода, который использует класс Car, и вы внезапно понимаете, что ваша реализация работает очень плохо, и вам нужно ее реорганизовать, если вся реализация Car подробности являются частными для класса Car, вы знаете , что ни один из кодов, использующих Car, не обращается к этим вещам, и вы можете изменить их по своему желанию. Если вы не пометите их private, вы могли бы использовать некоторые из них в этом другом коде, который затем сломался бы.

Аналогичным образом, protected (в любом случае на Java) предназначен для той же цели, но позволяет классам , полученным из вашего класса , получить доступ к этим членам. Это довольно слабая защита, потому что, конечно, это означает, что вы не можете изменить детали реализации базового класса, не затрагивая производные классы.

3 голосов
/ 15 октября 2011

Подумайте об этом так: уровень защиты определяет, что вы можете изменить позже, не заботясь ни о каком другом фрагменте кода, кроме этого класса (private), не заботясь ни о каком другом фрагменте кода, кроме этого класса и каждого класса, унаследованного от этого класс (защищенный) и без заботы о любом другом фрагменте кода, кроме каждого фрагмента кода, использующего этот класс (общедоступный).

1 голос
/ 15 октября 2011

private или protected происходят из концепции инкапсуляции. и это происходит от концепции сокрытия данных. Я считаю, что это введение ясно и полезно, по крайней мере, для меня:

Инкапсуляция - это процесс объединения данных и функций в единое целое называется класс. Используя метод инкапсуляции, Программист не может получить прямой доступ к данным. Данные доступны только через функции, существующие внутри класса. Инкапсуляция данных привело к важной концепции сокрытия данных. Сокрытие данных является детали реализации класса, которые скрыты от пользователя. Концепция ограниченного доступа заставила программистов писать специализированные функции или методы для выполнения операций над скрытыми членами класса. Внимание должно быть уделено, чтобы убедиться, что класс разработан правильно. ( Шриприя Раджагопалан )

Примечание: ответы хороши, и этот ответ завершает их

0 голосов
/ 18 октября 2011

Если вы определите член (переменную или метод) класса как закрытый, вы не сможете использовать его извне, используя другой класс, используя оператор точки. Защищенный помогает защитить переменную-член или метод от наследования.

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