В ООП частные элементы являются частными для кого?

#java #c #oop

#java #c #ооп

Вопрос:

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

Ответ №1:

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

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

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

Ответ №2:

Модификаторы доступа выполняют две разные задачи:

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

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

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

Ответ №3:

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

Ответ №4:

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

Ответ №5:

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

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

Ответ №6:

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

Ответ №7:

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

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

Примечание: Ответы хороши, и этот ответ должен их дополнить

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

1. На самом деле не отвечает на вопрос о частном / защищенном.

2. Я увидел заметку в первый раз. Вы не ответили на вопрос о. private

Ответ №8:

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