powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Видимость private, почему разработчику знают, что нужно пользователю?
25 сообщений из 124, страница 4 из 5
Видимость private, почему разработчику знают, что нужно пользователю?
    #38735656
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FororТак что, как видите очень простой пример, когда разработчик не смог предусмотреть, то что будет нужно пользователю. При этом, если придерживаться вашей логики, то я должен ждать несколько месяцев, пока нужный доступ откроют официально. Либо пользоваться рефлекшн. Но рефлекшн в более сложных случаях - громоздок. Поэтому нужно альтернативное решение, например такое как fork внутри кода, с использованием фич из АОП.

Зачем рефлекшен?!
Вы можете просто сделать форк (реальный)
И реализовать собственный класс. При условии, что исходники имеются.
Можно, конечно, если "очень надо" сделать костыль ч/з рефлекшен.
Но это костыль. И относиться к нему надо как к кастылю.
Правильнее было бы
1) Связаться с разработчиками и предложить свое решение (патч)
2) Взять исходники (если они в свободном доступе) и сделать форк

Если же нужна "полная свобода", то используйте C/C++, например.
Там можно делать все и немного еще. :-)
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38735752
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FororА недавно, спустя несколько месяцев, я увидел новый класс ScriptUtils (если не ошибся с названием), где появились методы wrap и unwrap, чтобы работать со ScriptObject напрямую. И заметьте мне такой метод был нужен несколько месяцев назад и очевидно не мне одному тоже.

Все ошибаются. И не сделать метод доступа к private-полю там, где он надо- это ошибка проектирования класса. Бывает. Бывает и хуже. Много хуже.

Но предлагать отменить private из-за того, что не все умеют им пользоваться- это перебор.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38735971
For All
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fororмне проще будет реализовать fork фичу в виде плагина для eclipse, правда я пока не знаю, где там копаться, чтобы расширить валидатор для таких конструкций:
Код: java
1.
2.
3.
4.
5.
public class final XStandardWatchEventKinds fork java.nio.file.StandardWatchEventKinds {

    public static final WatchEvent.Kind<Path> ENTRY_NOT_CATCHED = 
         new StdWatchEventKind<Path>("ENTRY_NOT_CATCHED", Path.class);
}

Ну допустим валидатор в еклипсе вы расширите, а как насчёт компилятора? Он-то (компилятор) не научен frok распознавать.
Компилятор кастомный возьмёте - валидатор байт кода такой класс не пропустит и JVM откажется его загружать.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38736774
Foror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
For All, данная конструкция затем будет преобразована в нормальный java синтаксис, автоматически. На вскидку, смержить код и скомпилировать, положив в тот же пакет. А можно даже заместить форкнутый класс, новым, так даже интереснее ) В общем, это тот же форк в файловой системе, только все делается гораздо проще, автоматически, через IDE.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38736779
Foror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. заместо того, чтобы создавать новый бранч в гите, просто объявляешь в коде, своего проекта, форк нужного класса. Пишешь тут же реализацию, а дальше все делается автоматом, когда проект билдится или ранится. Форкнутый класс подменяется вашим классом, для этого можно юзать тот же AOP. И не нужно парится с бранчами, всё просто, удобно и прозрачно.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38736811
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам уже говорили о побочных эффектах?
Изменение класса требует, как минимум, пересборки. Как максимум - запуск всех тестов.
И это ещё хорошо, что ява позволяет обойтись без перекомпиляции. Хотя и не всегда.

P.S. Я, конечно, понимаю желание сократить собственные проблемы за счёт увеличения чужих, но должно же быть хоть какое-то чувство меры?
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737047
Foror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov, нужно понимать, что данный метод не для глобального изменения стороннего проекта, иначе, действительно, проще сделать отдельный бранч. Данный метод скорее для расширения класса, без удаления методов или полей. Поэтому пересобирать сторонний проект нет смысла. Достаточно подменить класс в jar'e.

А вот запуск тестов, интересная идея, но тут не всегда получится их просто запустить.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737121
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мопжежвашуять ...
Сегодня одному разработчику пришла гениальная мысль доработать класс сторонней библиотеки и он его форкнул, завтра - другому и он тоже сделал свой форк, а послезавтра - третьему, совершенно неповинному человеку, понадобилось развернуть оба приложения в одном контейнере. И тут выяснилось, что форки "немножечко несовместимы".
И что этому третьему страдальцу делать? Слёзно умолять двух независимых разработчиков сделать общий форк?
Может проще послать лесом их обоих?
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737138
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще: то, что вы упорно изобретаете, существует с незапамятных времён и называется патч.
Существует и более-менее стандартизированный способ "изготавливать" такие исправления.
Как пример:Tomcat changelogAllow the JNDI Realm to start even if the directory is not available. The directory not being available is not fatal once the Realm is started and it need not be fatal when the Realm starts. Based on a patch by Cédric Couralet . (markt)Выделено мною.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737191
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весь срач не читал, так что отвечу только ОП.

С первого взгляда да, как и написал ОП, вынесение потрохов класса в public дает больше свободы клиентам и меньше головной боли на тему "как заставить эту либу работать так, как нужно нам".

НО:
- самая главная проблема - обратная совместимость. Код, который может использоваться клиентом, уже нельзя поменять без риска сломать компиляцию у зависимых проектов или, еще хуже, внести в них баги. Именно поэтому API так тщательно проектируется, а вся реализация засовывается в private/default область видимости. Злобных буратино с рефлекшном можно игнорировать - сами виноваты.
- вторая проблема - понимабельность. Как правило, именно области видимости формируют у библиотеки API, т.е. что же надо у нее вызывать. Если сделать все public, потенциальный юзер библиотеки не сможет без вдумчивого изучения документации понять, как же ее дергать и какие классы надо использовать.
- третья проблема - декомпозиция. Главное, о чем должен помнить программист - это об ограниченности своего мозга, неспособного одновременно обрабатывать много понятий. Именно поэтому придумана инкапсуляция и блочная структура программ. Чтобы, обдумывая проблему, не нужно было загружать себе в голову детали реализации отдельных модулей.

Что же делать?
Проектирование API - это сложная задача, требующая большого опыта. В качестве библиотеки, где реализация тщательно скрыта от клиента, могу рекомендовать Guava. Образец расширяемой библиотеки для меня - старые модули spring framework, spring-beans например. Изучай, как пишут умные люди и будет тебе счастье.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737312
For All
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FororFor All, данная конструкция затем будет преобразована в нормальный java синтаксис, автоматически.Хотелось бы деталей. Как вот эта конструкция:
Код: java
1.
2.
3.
4.
5.
public class final XStandardWatchEventKinds fork java.nio.file.StandardWatchEventKinds {

    public static final WatchEvent.Kind<Path> ENTRY_NOT_CATCHED = 
         new StdWatchEventKind<Path>("ENTRY_NOT_CATCHED", Path.class);
}

будет выглядеть после преобразования с нормальный java синтаксис?
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737415
Foror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
scf,
авторВесь срач не читал, так что отвечу только ОП

А стоило, ваши ответы лишь повысили энтропию этого топика, не дав ничего интересного.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737435
Foror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,
автор Слёзно умолять двух независимых разработчиков сделать общий форк?
Зачем умолять? Если уж возникла такая ситуация, то всегда есть возможность сделать свой форк на базе предыдущих. В любом случае, это ничем не отличается от Dependency Hell, когда сторонние библиотеки тянут разные версии одной и той же либы в зависимостях. У меня только недавно возникла такая ситуация, когда одна либа тянет старую, борадатую lucene 3.0, а другая 5.0. Различия на порядки и пойди разбери, что делать. Только самому вникать в код и переводить либу на последнюю lucene.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737449
Foror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
For All,
Будет создан класс java.nio.file.StandardWatchEventKinds, который заместит изначальный java.nio.file.StandardWatchEventKinds сделав обычный merge текстовых файлов (исходников обоих классов), как это делается в любых vcs. Вообще, тут нужно продумать различные варианты, я лишь пока кидаюсь идеями, а как появится время, создам отдельный топик и распишу подробнее про fork.

Вот только думаю его нужно не fork назвать, а как-то по другому, т.к. это лишь расширенный extends. Т.е. класс лишь расширяется как при наследовании, но с полным доступом ко всем полям и методам.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737472
Foror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

Конечно, опасно делать сложные форки, с изменением тела методов, например, известных библиотек или JDK. Но с другой стороны не обязательно замещать оригинальный класс, может просто класть форк отдельно, с другим названием, в тот же пакет. Тогда будет гораздо безопаснее, но менее гибче. В общем, идея сложная, я для этого и вынес на обсуждение )
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737487
For All
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FororБудет создан класс java.nio.file.StandardWatchEventKinds, который заместит изначальный java.nio.file.StandardWatchEventKinds сделав обычный merge текстовых файлов (исходников обоих классов), как это делается в любых vcs.А если нет исходников?
И дизассемблирование не всегда поможет, т.к. имена приватных мемберов могут оказаться сгенерёнными дизассемблером, а не те, которые аффтар либы давал.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737709
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FororЗачем умолять? Если уж возникла такая ситуация, то всегда есть возможность сделать свой форк на базе предыдущих.Этот третий - ни разу не программист. Это сисадмин, который в деталях знает какие параметры и почему должны быть прописаны и в комстроке и в настройках. Имеет право даже синтаксиса java не знать.
Но дело даже не в этом.
В этой жизни и так достаточно геморроя с разными версиями одних и тех же библиотек - зачем ещё больше его увеличивать?
В условиях, напомню, когда существует стандартный механизм: допилил, diff и - patch разработчикам.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737721
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FororНе устарел ли private? Откуда вам знать, что может понадобиться пользователю ваших классов? Может достаточно public и protected?

Как ни странно, неофит не так уж и неправ -- есть много языков программирования с ООП, которые не поддерживают т.н. инкапсуляцию на уровне языка -- это делается на уговне соглашений о стиле программирования.

В Java private не так уж и строг -- через reflection приватные поля доступны.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737730
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fororне обязательно замещать оригинальный класс, может просто класть форк отдельно, с другим названием, в тот же пакетИ как рантайм должен компоновать куски? Ваш и "того парня"?
Как быть с Sealed: true в манифестах для библиотек "только чтение"?
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38737734
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВ Java private не так уж и строг -- через reflection приватные поля доступны... пока не установлен диспетчер безопасности. Редкость - да, но всё-таки.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38738058
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У ТС вообще странный вброс. "почему разработчику знают, что нужно пользователю". И что, сидеть ровно и ничего не делать? Формальный ответ - из ТЗ. А не формально... С чего он вообще взял, что через задание области видимости разработчик определяет, что нужно _пользователю_???!. Прежде всего, разработчик определяет то, что нужно _самому_разработчику. Так он указывает, какие части хочет скрыть или, наоборот, показать. Если кто-то наплевал и залез в private, то проблемы индейцев ... - понятно; ни кто не гарантирует ему отсутствие "интересного поведения", когда скрытая реализация изменится (а что, разве кто-то обещал её не менять?).
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38738281
Foror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,
автор... пока не установлен диспетчер безопасности. Редкость - да, но всё-таки.
А разве нельзя его точечно настраивать, скажем для таких-то классов можно рефлекшн, для всех остальных нельзя?
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38738918
way2bariton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Foror, я бы вообще при дизайне избегал бы наследования и иерархий. Любая иерархическая структура содержит в себе подвохи. И хотя мы видим их повсеместно, программы наши могут быть не такими сложными, какими они бывают при использовании иерархических структур.
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38739147
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
way2bariton,

у меня недавно начало складываться впечатление, что этап дизайна может растянуться на долгое время в связи с корректировками. А иерархическая структура будет являться лишь подведением итогов
...
Рейтинг: 0 / 0
Видимость private, почему разработчику знают, что нужно пользователю?
    #38739260
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
way2baritonForor, я бы вообще при дизайне избегал бы наследования и иерархий.
дизайн чего? Слишком широкий термин.
Упростить Модель предметки - обязанность программиста.
...
Рейтинг: 0 / 0
25 сообщений из 124, страница 4 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Видимость private, почему разработчику знают, что нужно пользователю?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]