|
|
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororFor All, у вас устаревшие знания, всё течет, всё меняется, как по мне достаточно public и internal, причем public указывать явно не надо, просто объявил поле, метод - оно public, объявил internal, предупредил пользователя ваших классов.Можно ссылочку на источник новых и свежих знаний? Или, может, internal - это ваше личное изобретение? Fororкогда достигаешь определенного опыта, начинает хотеться изменить код этого черного ящика, т.к. тебя что-то может не устраивать.Когда достигаешь определенного опыта, чёрный ящик можно написать самому, такой какой нужен, чтобы устраивал а не пытаться мотоциклом шурупы откручивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2014, 19:30 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Давайте пойдем от обратного. Вспомним из практики. Где и когда в стандартных java-библиотеках, открытых библиотеках типа apache commons .... e.t.c. и прочего опенсорца вам вдруг (!) внезапно понадобилось значение приватной переменной базового класса? Я таких ситуаций не помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2014, 19:32 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
For All, аха ) всё понятно, миллионы леммингов не могут ошибаться ) internal не моё личное изобретение, просто всё больше сталкиваюсь с проектами, где классы делают не приватными, а кладут в пакеты internal, и это правильное движение, я лишь подумал, что это можно развить на классы, но конечно, это радикальное решение, в java такого не появится уж точно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2014, 19:35 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
mayton, ой, да запросто, есть такая либа jansi, так я её расширил своим классом xansi, но там вроде не пришлось использовать рефлекшн, но я точно не помню, вроде всё равно были трудности из-за этого private. А стандартные apache-commons либы, это в основном набор статичных методов и полей, там то, особо менять ничего и не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2014, 19:40 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Если уж на то пошло, то в стандартных библиотеках такой пример есть - theUnsafe в sun.misc.Unsafe. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2014, 19:40 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
mayton, авторНо если переменная экземпляра класса является участником АЛГОРИТМА то я как создатель этого алгоритма ЖЕЛАЮ чтобы она была СКРЫТОЙ частью алгоритма и не светилась как поле вызывая соблазн потрогать себя грязными руками и уж тем более накрутить на ней логику которую я в производном классе всё равно переопределю. Вот такой я злодей. Ха, да пожалуйста, тогда зачем вы вообще сырцы открываете? Тут то речь про open-source. Делайте бинарник и вообще забот не будет ) А тот, кто захочет потрогать - всё равно потрогает, в крайнем случае copy-past'ом или дизассемблером ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2014, 19:49 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Forormayton, ой, да запросто, есть такая либа jansi, так я её расширил своим классом xansi, но там вроде не пришлось использовать рефлекшн, но я точно не помню, вроде всё равно были трудности из-за этого private. Ану ану. Что за трудности в этом Джанси? Расскажи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2014, 19:58 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Мне тоже кажется, что при создании класса невозможно учесть все способы его дальнейшего использования. И + к этому, private снижает гибкость при наследовании. И вообще, вот типа инкапсуляция, но при наследовании все-равно нужно изучать детально внутренности базового(вых) классов, так что по-моему наследование и инкапсуляция противоречат немного). Я за то, чтобы убрать private и protected, а сделать inner как и выше предлагали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2014, 23:11 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Не надо считать разработчика класса тупее себя. Тем более, что для java изменение приватных полей и методов вообще никак не влияет на (обратную) совместимость. На семантику - может влиять, но это тема уже совсем другого разговора. И вообще, как уже справедливо отметили - пакеты и отсутствие квалификатора доступа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2014, 23:49 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororНе устарел ли private? Откуда вам знать, что может понадобиться пользователю ваших классов? Может достаточно public и protected? После того, как вы залезете грязными руками во внутренние переменные класса, совершенно не факт, что не появится каких-либо побочных эффектов. Менее очевидный, но не менее неприятный вопрос - сложности перехода на следующую версию библиотеки. Если внешний интерфейс в приличном обществе обычно вроде как расширяют, обеспечивая обратную совместимость, то про внутренности классов такой гарантии никто не дает, и ваша private переменая может там превратиться во что угодно. Соответственно, если реализация не будет сокрыта, то изменить что-то в библиотеке, по принципу "подложил новую версию вместо старой и все работает" будет просто невозможно, потому как никогда не будет ясно, на что завязано внешнее приложение. По сути ваши завязки на внутренности классов и есть их форк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 00:01 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
В данном топике если опустить красивые слова и обороты мы обсуждаем лень ТС-а и нежелание писать слово private а также непонимание того к чему приводит выставление голого зада в форточку. Всё пошёл спать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 00:38 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororНе устарел ли private? Откуда вам знать, что может понадобиться пользователю ваших классов? Может достаточно public и protected? Нет. Любой public увеличивает "связность". Соответственно сложность использования такого класса (со всеми public атрибутами и методами) растет экспоненциально (комбинаторный взрыв). Вообще любой класс должен стремиться к тому что у него будет один метод "сделать_хорошо". :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 07:05 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororИли заметить private на сущность internal - можешь пользоваться, но будь внимателен. Как по мне private разрушает одну из концепций ООП - наследование. Отказ от управления областью видимости, оставив только public (а protected - как вам уже говорили всего лишь небольшая модификация public) есть полный отказ от первого принципа ООП - инкапсуляции. Сокрытие реализации даёт огромное преимущество - возможность заменить реализацию в любой момент и гарантировать, что код, использующий предоставлемый этим чёрным ящиком открытый интерфейс, не сломается. Кроме того, это же гарантирует, что "пользователь" не сможет _случайно_ сломать реализацию, ковыряясь в "кишках" этого чёрного ящика. Но это вам тоже говорили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 08:28 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
на кодревью в стаковерфлоу целая дискуссия была по поводу private. И это тонкий момент. Многие считают что Private используется в 2х вариантах для инкапсуляции и скрытия информации и это две разные вещи, которые к тому же можно смешивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 10:47 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororНе устарел ли private? Откуда вам знать, что может понадобиться пользователю ваших классов? Может достаточно public и protected? У каждого класса есть контракт- для всех (public), для наследников (protected) и для избранных (package). Всё остальное- private. Но это не отменяет кривости уровни видимости java, наследованной от C++ (где приходится поддерживать бинарную совместимость с Си). В смысле стройности языка тут вне конкуренции eiffel, где: 1. Переменная, как бы не объявлял её, на запись всегда "private". 2. Указывается класс(ы), которым доступно свойство (переменная/метод)- если это базовый (ANY, аналог Object)- то это как бы public, если это сам класс- аналог protected, если ничего (NONE) - то private, а если конкретный набор классов- то они (и их потомки) увидят. А уровень видимости "пакет" это дыра- для своих классов-то её закрыли, а остальные- пусть мучаются :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 10:49 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Локшин Марк, авторПо сути ваши завязки на внутренности классов и есть их форк. Согласен, тогда может зайти с другой стороны, пусть будет private, но ввести дополнительно к extends - fork? авторpublic class Foo fork Bar { // получаю полный доступ к Bar } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 11:00 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororЛокшин Марк, авторПо сути ваши завязки на внутренности классов и есть их форк. Согласен, тогда может зайти с другой стороны, пусть будет private, но ввести дополнительно к extends - fork? авторpublic class Foo fork Bar { // получаю полный доступ к Bar } Похоже вы решаете не ту проблему. Для "fork" давно есть решение - делать ч/з interface. Если интерфейса нет, то можно "скрыть за фасадом". Можно, если вам надо, вообще попробовать ч/з AOP :-) Путей уже много. Вы хотите добавить еще один "если нельзя, но очень хочется" :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 12:00 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
На самом деле это вопрос правильного UseCase вашего софта. Если вы хотите не иметь гангрену в заднем проходе - то используйте private. И ваш клиент будет максимально правильно использовать ваше ПО. А господин Foror будет иметь огромный почтовый ящик с ненужными вопросами на тему "зачем нужен этот филд" и как его использовать, но видно он мозохист и ему нравится отвечать на глупые вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 12:10 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, вроде ту проблему решаю, мне нужен полнейший доступ к внутренностям стороннего класса - делать fork в файловой системе - гиморно, т.к. из-за одного класса делать форк целой либы, или JDK... Наследовать интерфейсы не решает проблемы на практике, в теории оно конечно всё красиво - этакий сферический конь в вакууме, на практике совсем всё по другому. Юзать AOP опять же не то, я также могу юзать и рефлекшн. Для такого случая как раз не хватает конструкции в ЯП типа fork, который бы полностью дал доступ к кишкам всего класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 15:40 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
mayton, пожалуйста не засоряйте тему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 15:41 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Forormad_nazgul, вроде ту проблему решаю, мне нужен полнейший доступ к внутренностям стороннего класса - делать fork в файловой системе - гиморно, т.к. из-за одного класса делать форк целой либы, или JDK... Наследовать интерфейсы не решает проблемы на практике, в теории оно конечно всё красиво - этакий сферический конь в вакууме, на практике совсем всё по другому. Юзать AOP опять же не то, я также могу юзать и рефлекшн. Для такого случая как раз не хватает конструкции в ЯП типа fork, который бы полностью дал доступ к кишкам всего класса. Если вам нужен "полнейший доступ к внутренностям стороннего класса", то вам нужен просто сам сторонний класс, т.е. его исходники. Если вы используете сторонние классы, без исходников, то вам не нужен "полнейший доступ к внутренностям стороннего класса". Для вас есть "интерфейс" в виде публичных методов, с которыми вы можете работать. Вот с ними и работайте. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 15:51 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Forormayton, пожалуйста не засоряйте тему Конешно дружище. Как скажешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 15:54 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Forormad_nazgul, вроде ту проблему решаю, мне нужен полнейший доступ к внутренностям стороннего класса Если нужен доступ к private полям/методам, то либо автор ошибся, либо ты. Скажи спасибо, что хоть reflection есть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 16:09 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
На мой взгляд, тема дебильная. В своих классах, каждый сам себе хозяин, хочешь - используй, хочешь - не используй. Проблемы нет В чужих либах, если либа хорошо спроектирована и расширяем - то проблемы вряд ли будут; если ее делали идиоты - то хоть private, хоть public... где наложить коровьих лепешек для будущих разработчиков... все равно найдут. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 16:12 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
В Питоне сделали все поля публичными. Потом стали придумывать соглашения: Python v2.7.8 documentation“Private” instance variables that cannot be accessed except from inside an object don’t exist in Python. However, there is a convention that is followed by most Python code: a name prefixed with an underscore (e.g. _spam) should be treated as a non-public part of the API (whether it is a function, a method or a data member). It should be considered an implementation detail and subject to change without notice. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2014, 16:15 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38732332&tid=2126630]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
93ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 535ms |

| 0 / 0 |
