Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Изолированные классы  [new]
Сергей Лалов
Member

Откуда: localhost SPB
Сообщений: 1953
Привет, всех с пятницей)
Натолкнулся недавно на понятие изолированные классы, почитал, посмотрел примеры, немного не вкурил.
Можете дошкольнику объяснить на пальцах что это такое и какая у них сфера применения?)
13 ноя 20, 21:55    [22231752]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Как этот термин звучал в англоязычном варианте?
13 ноя 20, 22:09    [22231758]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
chpasha
Member

Откуда:
Сообщений: 10035
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 ноя 20, 22:21
13 ноя 20, 22:24    [22231762]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 18324
https://habr.com/ru/company/otus/blog/527928/ Запечатанные классы
13 ноя 20, 22:24    [22231763]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
Сергей Лалов
Member

Откуда: localhost SPB
Сообщений: 1953
mayton
Как этот термин звучал в англоязычном варианте?


Sealed.

Вадя уже скинул ссылку, читаю, идея пока ускользает.
13 ноя 20, 22:39    [22231768]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Я помню этот термин. Я его читал у Хорстмана в его Scala-книжке.
13 ноя 20, 22:48    [22231774]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Брайн Гоетс его предложил в 2019 году и получается что в JDK-15 уже имплементировано
судя по этой бумажке.

https://openjdk.java.net/jeps/360
13 ноя 20, 22:50    [22231777]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
это что то шибко новое- пока никто не юзал я думаю) спроси через 2 года
13 ноя 20, 22:53    [22231780]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
Сергей Лалов
Member

Откуда: localhost SPB
Сообщений: 1953
chpasha,
Я почитал, там один из примеров понятен, одно из назначений такого типа класса-
Изолированный класс позволяет указывать, какие классы ( по аналогии с implements, где мы перечисляем обязательные к реализации методы) могут его наследовать. Это понятно, в принципе полезно. Но дальше начинается кислота
14 ноя 20, 00:32    [22231811]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10760
Если лично вам не требуется сложный дизайн иерархии классов - это ещё ничего не значит.
14 ноя 20, 00:35    [22231813]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
Сергей Лалов
Member

Откуда: localhost SPB
Сообщений: 1953
Basil A. Sidorov
Если лично вам не требуется сложный дизайн иерархии классов - это ещё ничего не значит.


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

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

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

Тяжело без крупных проектов и практики в общем втащить это понятие)
14 ноя 20, 00:55    [22231821]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Эти многие пропозиции в JCP как и в комитетах С++ появляются не из космоса.
Вся функциональщина (lambda, e.t.c.) была создана еще в середине 20-го века. И многие идеи
которые кажутся новыми на самом деле уже много раз пережевывались в других
языках и системах.

Мне тут чем интересна отсылка к Scala. Книга 2013 года. Фича Sealed уже существовала.
И я думаю интересно проследить ее генезис.
14 ноя 20, 01:05    [22231826]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
забыл ник
Member

Откуда:
Сообщений: 3436
Не ну вовремя чо, и 10 лет не прошло
По иронии судьбы сделали sealed в java когда в скале сделали им нормальную замену в виде енумов(единственное что было хуже в скале чем в джаве).Если честно не понимаю смысла совсем, учитывая что алгебраические типы данных вряд-ли взлетят, паттерн матчинг тоже кастрированный, да и реально в джаве крутые енумы, нафиг огород городить..
Goetz вроде умный мужик же, но все никак не поймет что нету особого смысла пытаться делать java более функциональной не убирая мутабельность. А мутабельность не ограничить из-за обратной совместимости. С опшионалом обосрались, стримы тоже такое себе.. единственное что лямбды сделали более менее, но и те из-за слабого inference корявенькие. Теперь вот обсер с паттерн матчингом и sealed. Хотя вот рекорды смотрятся ещё симпатично, если бы не невозможность добавлять методы и поля
Короче джава медленно но верно превращается в винегрет возможностей, но в отличие от скалы без связующей парадигмы. Переходили б уже на Котлин что-ли и не мучали старушку джаву
14 ноя 20, 01:12    [22231828]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Давайте придумаем софистический пример.

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

(это в Scala)
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
}
14 ноя 20, 01:18    [22231830]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
забыл ник
Member

Откуда:
Сообщений: 3436
Блин по теме то совсем забыл
В общем, тебе как обычному джава программисту этот sealed не впился. Это скорее задел на будущее, видимо в дальнейшем будут пытаться протянуть алгебраические типы данных и typeclass паттерн. На данный момент вижу два более мене осмысленных применения sealed
1) Для особо упоротых это возможность дать понять JVM что вариантов реализации мало и компилятор может соптимизмровать на времени вызова подставив би- либо триморфный вызов вместо динамического диспатча. Ключевое слово упоротых
2) Если делаешь паттерн матчинг на объекте с типом интерфейса и не предоставляет ветку для какого-либо подкласса то компилятор сгенерирует ворнинг, мол лажа у тебя и этот подкласс никак не обрабатывается. Почему нельзя просто взять енум остаётся загадкой
14 ноя 20, 01:21    [22231832]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
забыл ник
Member

Откуда:
Сообщений: 3436
mayton,

И чем энум не устраивает?
14 ноя 20, 01:23    [22231835]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
забыл ник
mayton,

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

Погоди. Дай закончу.
14 ноя 20, 01:28    [22231838]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Как-то так. 100% детерминизм матчинга. И этот матчинг в фазе компилляции
уже проверен. В нем не будет новых и неизвестных классов и мы никогда
не получим ошибку даункастинга к неизвестному новому наследнику.

  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!"
    }
  }
14 ноя 20, 01:33    [22231839]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
И здесь не нужен полиморфизм. Оптимизирующий компиллятор (не Java а другой) может
использовать широкий спектр подходов чтобы вообще его убрать. ООП приходит смерть.
На арену выходит ФП.
14 ноя 20, 01:35    [22231841]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Хотя может я ошибаюсь. Может default case нужен. Но у нас -же пятница? не?
14 ноя 20, 01:37    [22231843]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
забыл ник
Member

Откуда:
Сообщений: 3436
mayton,

Так чем енам то не подходит?
14 ноя 20, 01:37    [22231844]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Дружище я на самом деле не силен во всех фичах Scala.

Давай я закину тебе еще идейку.
14 ноя 20, 01:38    [22231846]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
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...:("
    }
  }

}
14 ноя 20, 01:40    [22231848]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
забыл ник
Member

Откуда:
Сообщений: 3436
mayton
Дружище я на самом деле не силен во всех фичах Scala.

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

Так мы про джаву же.
Про скалу все и так понятно, в общих чертах ты правильно описал. Только вот эту трихомандию с sealed по историческим причинам сделали потому что не было нормальных енумов. А в скале 3 их наконец-то запили Ржачно конечно получается
14 ноя 20, 01:40    [22231850]     Ответить | Цитировать Сообщить модератору
 Re: Изолированные классы  [new]
забыл ник
Member

Откуда:
Сообщений: 3436
mayton
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 мутабельное это акций гемор
14 ноя 20, 01:43    [22231852]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить