|
Изолированные классы
|
|||
---|---|---|---|
#18+
Привет, всех с пятницей) Натолкнулся недавно на понятие изолированные классы, почитал, посмотрел примеры, немного не вкурил. Можете дошкольнику объяснить на пальцах что это такое и какая у них сфера применения?) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 21:55 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Как этот термин звучал в англоязычном варианте? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 22:09 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
sealed? для чего, написано в первоисточнике https://openjdk.java.net/jeps/360 Goals Allow the author of a class or interface to control which code is responsible for implementing it. Provide a more declarative way than access modifiers to restrict the use of a superclass. Support future directions in pattern matching by underpinning the exhaustive analysis of patterns. Non-Goals It is not a goal to provide new forms of access control such as "friends". It is not a goal to change final in any way. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 22:24 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
https://habr.com/ru/company/otus/blog/527928/ Запечатанные классы ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 22:24 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
mayton Как этот термин звучал в англоязычном варианте? Sealed. Вадя уже скинул ссылку, читаю, идея пока ускользает. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 22:39 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Я помню этот термин. Я его читал у Хорстмана в его Scala-книжке. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 22:48 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Брайн Гоетс его предложил в 2019 году и получается что в JDK-15 уже имплементировано судя по этой бумажке. https://openjdk.java.net/jeps/360 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 22:50 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
chpasha, Я почитал, там один из примеров понятен, одно из назначений такого типа класса- Изолированный класс позволяет указывать, какие классы ( по аналогии с implements, где мы перечисляем обязательные к реализации методы) могут его наследовать. Это понятно, в принципе полезно. Но дальше начинается кислота ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 00:32 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Если лично вам не требуется сложный дизайн иерархии классов - это ещё ничего не значит. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 00:35 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Если лично вам не требуется сложный дизайн иерархии классов - это ещё ничего не значит. Согласен, более того, даже если вам все таки требуется сложный дизайн иерархии классов-- это тоже ещё ничего не значит. О_О Я в джаве относительно новичок, у меня иерархия глубиной дай бог классов в 3 Имею в виду именно структурное взаимодействие. Понимаю о чем вы. Тяжело без крупных проектов и практики в общем втащить это понятие) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 00:55 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Эти многие пропозиции в JCP как и в комитетах С++ появляются не из космоса. Вся функциональщина (lambda, e.t.c.) была создана еще в середине 20-го века. И многие идеи которые кажутся новыми на самом деле уже много раз пережевывались в других языках и системах. Мне тут чем интересна отсылка к Scala. Книга 2013 года. Фича Sealed уже существовала. И я думаю интересно проследить ее генезис. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:05 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Не ну вовремя чо, и 10 лет не прошло По иронии судьбы сделали sealed в java когда в скале сделали им нормальную замену в виде енумов(единственное что было хуже в скале чем в джаве).Если честно не понимаю смысла совсем, учитывая что алгебраические типы данных вряд-ли взлетят, паттерн матчинг тоже кастрированный, да и реально в джаве крутые енумы, нафиг огород городить.. Goetz вроде умный мужик же, но все никак не поймет что нету особого смысла пытаться делать java более функциональной не убирая мутабельность. А мутабельность не ограничить из-за обратной совместимости. С опшионалом обосрались, стримы тоже такое себе.. единственное что лямбды сделали более менее, но и те из-за слабого inference корявенькие. Теперь вот обсер с паттерн матчингом и sealed. Хотя вот рекорды смотрятся ещё симпатично, если бы не невозможность добавлять методы и поля Короче джава медленно но верно превращается в винегрет возможностей, но в отличие от скалы без связующей парадигмы. Переходили б уже на Котлин что-ли и не мучали старушку джаву ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:12 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Давайте придумаем софистический пример. Я вот только что придумал. (это в Scala) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:18 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Блин по теме то совсем забыл В общем, тебе как обычному джава программисту этот sealed не впился. Это скорее задел на будущее, видимо в дальнейшем будут пытаться протянуть алгебраические типы данных и typeclass паттерн. На данный момент вижу два более мене осмысленных применения sealed 1) Для особо упоротых это возможность дать понять JVM что вариантов реализации мало и компилятор может соптимизмровать на времени вызова подставив би- либо триморфный вызов вместо динамического диспатча. Ключевое слово упоротых 2) Если делаешь паттерн матчинг на объекте с типом интерфейса и не предоставляет ветку для какого-либо подкласса то компилятор сгенерирует ворнинг, мол лажа у тебя и этот подкласс никак не обрабатывается. Почему нельзя просто взять енум остаётся загадкой ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:21 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
mayton, И чем энум не устраивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:23 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
забыл ник mayton, И чем энум не устраивает? Погоди. Дай закончу. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:28 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Как-то так. 100% детерминизм матчинга. И этот матчинг в фазе компилляции уже проверен. В нем не будет новых и неизвестных классов и мы никогда не получим ошибку даункастинга к неизвестному новому наследнику. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:33 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
И здесь не нужен полиморфизм. Оптимизирующий компиллятор (не Java а другой) может использовать широкий спектр подходов чтобы вообще его убрать. ООП приходит смерть. На арену выходит ФП. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:35 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Хотя может я ошибаюсь. Может default case нужен. Но у нас -же пятница? не? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:37 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
mayton, Так чем енам то не подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:37 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Дружище я на самом деле не силен во всех фичах Scala. Давай я закину тебе еще идейку. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:38 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:40 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
mayton Дружище я на самом деле не силен во всех фичах Scala. Давай я закину тебе еще идейку. Так мы про джаву же. Про скалу все и так понятно, в общих чертах ты правильно описал. Только вот эту трихомандию с sealed по историческим причинам сделали потому что не было нормальных енумов. А в скале 3 их наконец-то запили Ржачно конечно получается ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:40 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
mayton Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Сильно сомневаюсь что джава версия паттерн матчинг а такое позволит. Именно про это я и веду речь, если поле message мутабельное это акций гемор ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:43 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
А я всем говорю - курите первоисточник. Всё что JCP предлагает - это вторичные пережованные идеи. Очень мало в программировании нового в наше время. Можно назвать новым применение глубоких нейросеток - но это мать ево НЕ программирование а математика. Там по настоящиму надо учиться. И не спринг с хибернейтом. Что вообще вы можете назвать новым? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:49 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
И тот паттерн-матчинг - не настоящий. Вот настоящий. Это по идее Haskell. Но я пишу от руки поэтому оно нихрена не скомпилируется но идея такая. Код: python 1. 2. 3. 4. 5.
Тоесть я свёл все это дерьмо к декларации трех функций. А не к псевдо-switch оператору. Больше нет ничего. Ни полиморфизьма. Ни объектов. Мир застывшей логики. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 01:57 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
mayton, Ну самое новое это наверное dependent types, хотя разрабатывать теорию начали давно, только недавно появилась реальная перспектива промышленного применения. Из интересных идей также отмечу работу с памятью в Rust, которая безопасная управляемая и быстрая. И никаких gc. Также интересна идея STM. Транзакционная память тоже немолодая идея, но наконец то его можно пробовать в реальных проектах. Ну и касаемо больше fp - есть такой стиль написания программы как final tagless encoding, очень большой потенциал для убийства ООП. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 02:05 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
В случае с Java может произойти не убийство а загрязнение языка. И я сочувствую новичкам которые входят в язык. Им сложнее освоить базу. Она - расширяется и через 10 лет догонит С++. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 02:11 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
mayton И тот паттерн-матчинг - не настоящий. Вот настоящий. Это по идее Haskell. Но я пишу от руки поэтому оно нихрена не скомпилируется но идея такая. Код: python 1. 2. 3. 4. 5.
Тоесть я свёл все это дерьмо к декларации трех функций. А не к псевдо-switch оператору. Больше нет ничего. Ни полиморфизьма. Ни объектов. Мир застывшей логики. Ну скаловский паттерн матчинг конечно более развесистый но и более мощный чем у хаскеля. А вот что касается того что под соусом паттерн матчинг а пытаются всунуть в джаву.... Там да, бессмысленно и беспощадно, я о том и говорю. Лепят какие то полу-недо-фичи обрезанные и которые невозможно юзать в идиоматическом стиле и на мой взгляд только усложняют язык. Но видимо уплочено ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 02:12 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
mayton В случае с Java может произойти не убийство а загрязнение языка. И я сочувствую новичкам которые входят в язык. Им сложнее освоить базу. Она - расширяется и через 10 лет догонит С++. Угу, а загрязнение и приводит к смерти. Ниша сильно сузится. Вообще не понимаю стартов новых проектов на джаве. Не нравится скала или кложур - на тебе котлин ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 02:14 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Мир Java ентерпрайза пока зиждется на строгом убеждении что write once ... works everywhere. И пока это работает бинарникам ничего не грозит. Вот как долго без эволюции OpenJDK и Oracle смогут удерживать JVM в состоянии поддержки. Старые фичи тянут на дно как гиря. Сама JVM это по сути калькулятор Mk-60. Там даже нет намёка на команды поддержки SSE1/2/3, AVX. Мы не можем собрать эффективный H.264 декодер видео на Java не потому что она плоха а потому что у нас нет прямого управления фичами современного процессора. Я шутки ради создал топик где я делаю интринзик на ассемблере x86 в Java коде но в этой шутке я ждал реакции форума. Что скажут? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 02:19 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Сергей Лалов у меня иерархия глубиной дай бог классов в 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 08:05 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
забыл ник Ключевое слово упоротых P.S. Когда же вы все научитесь спокойно относиться к фичами и возможностям, которые не нужны лично вам ?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 08:10 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
mayton Что скажут? Для платформы, которая "бегает везде" нет смысла тянуть в язык фичу, доступную "почти нигде". Сначала - более-менее массовое внедрение и уже потом - поддержка платформы. При этом, что характерно, никто не мешает сделать так, как вам хочется - собственно JVM требует для своей работы всего пяти классов. Всё остальное вы можете переделать. Если не создавать собственный компилятор - кое-что придётся оставить как есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 08:23 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Basil A. Sidorov забыл ник Ключевое слово упоротых P.S. Когда же вы все научитесь спокойно относиться к фичами и возможностям, которые не нужны лично вам ?.. Ну у нас тут все либо-писатели сидят конечно. Перефразируя, упоротого прикладного программиста, надеюсь стало легче. Sealed в скале я использую уже 5 лет и в хвост и в гриву, так что не надо мне рассказывать про нужнгсть. применение у этой фичи в основном такое - 1) замена энумам 2) более безопасный по отношению к рантайм ошибкам паттерн матчинг. Оба этих кейса легко покрываются хорошо имплементированными энамами, что в джаве на редкость хорошо сделано. Я конечно допускаю, что чего-то не понимаю и в этом случае тебе не составит труда привести пару кейсов для которых sealed просто необходим ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 12:53 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
забыл ник не составит труда привести пару кейсов для которых sealed просто необходим Исторический пример - "Sealed: true" в манифесте jar-файла. Зачем может быть нужно? В java-классе доступ по умолчанию "в пределах пакета". Предположим, что я реализовал некий "чувствительный" класс, который используется другими классами в том же пакете. Работа с лицензиями или что-нибудь этакое. Наследоваться от такого класса бессмысленно - "важные" методы и переменные не имеют модификаторов доступа, а значит и у наследников не будет доступа "куда не надо". Но, если "чужак" поместит в этот пакет собственный класс, то сможет получить "некие преференции", которых разработчик трудолюбиво его лишал. Просто создаём собственный класс в пакете разработчика, кладём его "рядышком" и - всё. "Взлом" делается на уровне скрипта запуска. Если jar "запечатан", то классы любых его пакетов будут загружаться строго из одного места, а значит не будет работать или класс "взломщика" или класс разработчика. Понятное дело, что такая "защита" тривиально обходится переупаковкой jar-файла, но во многих случаях и такой вариант "защиты" более чем достаточен. Аналогично и с запечатанными классами. Есть интерфейс (абстрактный класс), который должен быть реализован (расширен) только разработчиком и никем кроме него. При этом разработчику требуется несколько реализаций. Запечатываем (только) интерфейс (класс) и получаем гарантию, что "никто кроме нас". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 13:21 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Практический смысл так и остался непонятен. Насчёт интерфейсов - это по определению вещь, которая должна быть публично доступная и расширяемая. Если надо ее закрыть, то проще не допустить ее появления в публичном api, а практической необходимости ограничивать в контролируемом тобой коде вообще не вижу. Что касается классов - чем final не устраивает хз. В общем так ничего убедительного и не услышал. Насчёт sealed пакетов, кстати интереснее - давно задумывался почему виртуальная машина даёт загружать пекедди с одинаковым именем с разных источников. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 14:39 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
забыл ник Если надо ее закрыть, то проще не допустить ее появления в публичном api, а практической необходимости ограничивать в контролируемом тобой коде вообще не вижу. P.S. "Я ему - покажи. А он мне - в нашем клубе джентельменам верят на слово. И тут мне карта как попрёт" ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 14:56 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
забыл ник Практический смысл так и остался непонятен. Насчёт интерфейсов - это по определению вещь, которая должна быть публично доступная и расширяемая. Если надо ее закрыть, то проще не допустить ее появления в публичном api, а практической необходимости ограничивать в контролируемом тобой коде вообще не вижу. Что касается классов - чем final не устраивает хз. Я вижу себе смысл не в секюрности а в создании непротиворечивой доменной модели. Тоесть если вы определили sealed class Gender - то у вас будет строго детерминированный набор типов Male, Female, Male-To-Female .e.t.c. сколько наша medical insurance system поддерживает типов клиентов. И никто кроме архитектора не подкинет новых. Это можно сказать так. Final class - это ограничитель по "вертикали" диаграмме наследования а sealed - лимит по "горизонтали" или по quantity. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 16:44 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
забыл ник Насчёт sealed пакетов, кстати интереснее - давно задумывался почему виртуальная машина даёт загружать пекедди с одинаковым именем с разных источников. Я думаю что фразу "дает загружать" надо расписать как некую последовательность шагов. Или поисковых операций. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2020, 16:48 |
|
Изолированные классы
|
|||
---|---|---|---|
#18+
Некоторые sealed scala classes: Код: java 1. 2.
Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 01:56 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2120616]: |
0ms |
get settings: |
8ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
32ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
621ms |
get tp. blocked users: |
0ms |
others: | 276ms |
total: | 950ms |
0 / 0 |