Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Изолированные классы / 25 сообщений из 41, страница 1 из 2
13.11.2020, 21:55
    #40018132
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Привет, всех с пятницей)
Натолкнулся недавно на понятие изолированные классы, почитал, посмотрел примеры, немного не вкурил.
Можете дошкольнику объяснить на пальцах что это такое и какая у них сфера применения?)
...
Рейтинг: 0 / 0
13.11.2020, 22:09
    #40018134
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Как этот термин звучал в англоязычном варианте?
...
Рейтинг: 0 / 0
13.11.2020, 22:24
    #40018136
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
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.
...
Рейтинг: 0 / 0
13.11.2020, 22:24
    #40018137
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
https://habr.com/ru/company/otus/blog/527928/ Запечатанные классы
...
Рейтинг: 0 / 0
13.11.2020, 22:39
    #40018141
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
mayton
Как этот термин звучал в англоязычном варианте?


Sealed.

Вадя уже скинул ссылку, читаю, идея пока ускользает.
...
Рейтинг: 0 / 0
13.11.2020, 22:48
    #40018143
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Я помню этот термин. Я его читал у Хорстмана в его Scala-книжке.
...
Рейтинг: 0 / 0
13.11.2020, 22:50
    #40018146
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Брайн Гоетс его предложил в 2019 году и получается что в JDK-15 уже имплементировано
судя по этой бумажке.

https://openjdk.java.net/jeps/360
...
Рейтинг: 0 / 0
14.11.2020, 00:32
    #40018174
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
chpasha,
Я почитал, там один из примеров понятен, одно из назначений такого типа класса-
Изолированный класс позволяет указывать, какие классы ( по аналогии с implements, где мы перечисляем обязательные к реализации методы) могут его наследовать. Это понятно, в принципе полезно. Но дальше начинается кислота
...
Рейтинг: 0 / 0
14.11.2020, 00:35
    #40018176
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Если лично вам не требуется сложный дизайн иерархии классов - это ещё ничего не значит.
...
Рейтинг: 0 / 0
14.11.2020, 00:55
    #40018181
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Basil A. Sidorov
Если лично вам не требуется сложный дизайн иерархии классов - это ещё ничего не значит.


Согласен, более того, даже если вам все таки требуется сложный дизайн иерархии классов-- это тоже ещё ничего не значит. О_О

Я в джаве относительно новичок, у меня иерархия глубиной дай бог классов в 3

Имею в виду именно структурное взаимодействие. Понимаю о чем вы.

Тяжело без крупных проектов и практики в общем втащить это понятие)
...
Рейтинг: 0 / 0
14.11.2020, 01:05
    #40018184
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Эти многие пропозиции в JCP как и в комитетах С++ появляются не из космоса.
Вся функциональщина (lambda, e.t.c.) была создана еще в середине 20-го века. И многие идеи
которые кажутся новыми на самом деле уже много раз пережевывались в других
языках и системах.

Мне тут чем интересна отсылка к Scala. Книга 2013 года. Фича Sealed уже существовала.
И я думаю интересно проследить ее генезис.
...
Рейтинг: 0 / 0
14.11.2020, 01:12
    #40018186
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Не ну вовремя чо, и 10 лет не прошло
По иронии судьбы сделали sealed в java когда в скале сделали им нормальную замену в виде енумов(единственное что было хуже в скале чем в джаве).Если честно не понимаю смысла совсем, учитывая что алгебраические типы данных вряд-ли взлетят, паттерн матчинг тоже кастрированный, да и реально в джаве крутые енумы, нафиг огород городить..
Goetz вроде умный мужик же, но все никак не поймет что нету особого смысла пытаться делать java более функциональной не убирая мутабельность. А мутабельность не ограничить из-за обратной совместимости. С опшионалом обосрались, стримы тоже такое себе.. единственное что лямбды сделали более менее, но и те из-за слабого inference корявенькие. Теперь вот обсер с паттерн матчингом и sealed. Хотя вот рекорды смотрятся ещё симпатично, если бы не невозможность добавлять методы и поля
Короче джава медленно но верно превращается в винегрет возможностей, но в отличие от скалы без связующей парадигмы. Переходили б уже на Котлин что-ли и не мучали старушку джаву
...
Рейтинг: 0 / 0
14.11.2020, 01:18
    #40018187
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Давайте придумаем софистический пример.

Я вот только что придумал.

(это в Scala)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
sealed class DayOfWeek {
  case class Mon() extends DayOfWeek
  case class Tue() extends DayOfWeek
  case class Wen() extends DayOfWeek
  case class Thi() extends DayOfWeek
  case class Fri() extends DayOfWeek
  case class Sat() extends DayOfWeek
  case class Sun() extends DayOfWeek
}
...
Рейтинг: 0 / 0
14.11.2020, 01:21
    #40018189
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Блин по теме то совсем забыл
В общем, тебе как обычному джава программисту этот sealed не впился. Это скорее задел на будущее, видимо в дальнейшем будут пытаться протянуть алгебраические типы данных и typeclass паттерн. На данный момент вижу два более мене осмысленных применения sealed
1) Для особо упоротых это возможность дать понять JVM что вариантов реализации мало и компилятор может соптимизмровать на времени вызова подставив би- либо триморфный вызов вместо динамического диспатча. Ключевое слово упоротых
2) Если делаешь паттерн матчинг на объекте с типом интерфейса и не предоставляет ветку для какого-либо подкласса то компилятор сгенерирует ворнинг, мол лажа у тебя и этот подкласс никак не обрабатывается. Почему нельзя просто взять енум остаётся загадкой
...
Рейтинг: 0 / 0
14.11.2020, 01:23
    #40018190
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
mayton,

И чем энум не устраивает?
...
Рейтинг: 0 / 0
14.11.2020, 01:28
    #40018191
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
забыл ник
mayton,

И чем энум не устраивает?

Погоди. Дай закончу.
...
Рейтинг: 0 / 0
14.11.2020, 01:33
    #40018192
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Как-то так. 100% детерминизм матчинга. И этот матчинг в фазе компилляции
уже проверен. В нем не будет новых и неизвестных классов и мы никогда
не получим ошибку даункастинга к неизвестному новому наследнику.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  sealed class DayOfWeek
    case class Mon() extends DayOfWeek
    case class Tue() extends DayOfWeek
    case class Wen() extends DayOfWeek
    case class Thi() extends DayOfWeek
    case class Fri() extends DayOfWeek
    case class Sat() extends DayOfWeek
    case class Sun() extends DayOfWeek

  def main(arg: Array[String]): Unit = {
    def whatToDo(dayOfWeek: DayOfWeek): String = dayOfWeek match {
      case Sat() => "Hurray!"
      case Sun() => "Yahoo!"
    }
  }
...
Рейтинг: 0 / 0
14.11.2020, 01:35
    #40018194
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
И здесь не нужен полиморфизм. Оптимизирующий компиллятор (не Java а другой) может
использовать широкий спектр подходов чтобы вообще его убрать. ООП приходит смерть.
На арену выходит ФП.
...
Рейтинг: 0 / 0
14.11.2020, 01:37
    #40018195
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Хотя может я ошибаюсь. Может default case нужен. Но у нас -же пятница? не?
...
Рейтинг: 0 / 0
14.11.2020, 01:37
    #40018196
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
mayton,

Так чем енам то не подходит?
...
Рейтинг: 0 / 0
14.11.2020, 01:38
    #40018197
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Дружище я на самом деле не силен во всех фичах Scala.

Давай я закину тебе еще идейку.
...
Рейтинг: 0 / 0
14.11.2020, 01:40
    #40018199
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
object Main {

  sealed class DayOfWeek
    case class Mon() extends DayOfWeek
    case class Tue() extends DayOfWeek
    case class Wen() extends DayOfWeek
    case class Thi() extends DayOfWeek
    case class Fri() extends DayOfWeek
    case class Sat() extends DayOfWeek
    case class Sun(message : String) extends DayOfWeek

  def main(arg: Array[String]): Unit = {
    def whatToDo(dayOfWeek: DayOfWeek): String = dayOfWeek match {
      case Sat() => "Hurray!"
      case Sun(_) => "Hurray!"
      case _ => "Okay...:("
    }
  }

}
...
Рейтинг: 0 / 0
14.11.2020, 01:40
    #40018200
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
mayton
Дружище я на самом деле не силен во всех фичах Scala.

Давай я закину тебе еще идейку.

Так мы про джаву же.
Про скалу все и так понятно, в общих чертах ты правильно описал. Только вот эту трихомандию с sealed по историческим причинам сделали потому что не было нормальных енумов. А в скале 3 их наконец-то запили Ржачно конечно получается
...
Рейтинг: 0 / 0
14.11.2020, 01:43
    #40018201
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
mayton
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
object Main {

  sealed class DayOfWeek
    case class Mon() extends DayOfWeek
    case class Tue() extends DayOfWeek
    case class Wen() extends DayOfWeek
    case class Thi() extends DayOfWeek
    case class Fri() extends DayOfWeek
    case class Sat() extends DayOfWeek
    case class Sun(message : String) extends DayOfWeek

  def main(arg: Array[String]): Unit = {
    def whatToDo(dayOfWeek: DayOfWeek): String = dayOfWeek match {
      case Sat() => "Hurray!"
      case Sun(_) => "Hurray!"
      case _ => "Okay...:("
    }
  }

}


Сильно сомневаюсь что джава версия паттерн матчинг а такое позволит. Именно про это я и веду речь, если поле message мутабельное это акций гемор
...
Рейтинг: 0 / 0
14.11.2020, 01:49
    #40018208
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изолированные классы
А я всем говорю - курите первоисточник. Всё что JCP предлагает - это вторичные пережованные идеи.
Очень мало в программировании нового в наше время. Можно назвать новым применение глубоких
нейросеток - но это мать ево НЕ программирование а математика. Там по настоящиму надо учиться.
И не спринг с хибернейтом.

Что вообще вы можете назвать новым?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Изолированные классы / 25 сообщений из 41, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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