Глоссарий модулей Java

В чем разница между всеми этими терминами, используемыми в спецификации модуля Java? Я не могу найти определение этих терминов, которое не ссылалось бы на себя.

  • Видимый
  • Наблюдаемый
  • Доступный

Спецификация содержит подобные заявления, но я еще не понял, что эти слова на самом деле значат:

В частности, хост-система должна ограничивать обычные единицы компиляции, которые в противном случае были бы наблюдаемыми, только теми, которые видны M.

(JLS 11, раздел 7.3, стр. 183)


person Doradus    schedule 02.12.2018    source источник
comment
Можно ссылку, где ты это нашел?   -  person Niklas Mertsch    schedule 02.12.2018
comment
Я так понимаю, вы не носитель языка? Просто переведите слова на свой язык, потому что они просто означают то, что они означают при использовании английского языка в целом. Это не технические термины. Например: «видимый» означает, что вы действительно можете это увидеть.   -  person the hand of NOD    schedule 03.12.2018
comment
Я носитель языка. Видимый и наблюдаемый - синонимы. Можете ли вы привести пример чего-то в модульной системе Java, что вы можете видеть, но не наблюдать? Или наоборот?   -  person Doradus    schedule 03.12.2018
comment
Ох, хорошо. Извините, просто подумал, что может быть так :-). Пример Observable лучше всего объясняется здесь: docs.oracle. com/javase/7/docs/api/java/util/Observable.html visible, например, лучше всего объясняется модификаторами доступа: docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html   -  person the hand of NOD    schedule 03.12.2018


Ответы (2)


Во-первых, в JLS такие термины, как видимость, могут иметь разное значение применительно к единице компиляции, пакету или типу.

Некоторые ссылки, где термины определены в JLS:

  • Наблюдаемый:

    • Блок компиляции: §7.3, предложение, начинающееся "Хост-система определяет, какие единицы компиляции доступны для наблюдения".

    • Пакет: §7.4.3, первый абзац.

    • Интуиция: элементы, участвующие в компиляции.

  • Видимый:

    • Блок компиляции: §7.3, предложение, начинающееся с "Обычные единицы компиляции, видимые для M" — обратите внимание, что видимость определяется относительно модуля

    • Пакет: §7.4.3, предложение, начинающееся "Пакет виден модулю M" — снова относительно модуля.

    • Интуиция: элементы, наблюдаемые с точки зрения данного модуля с учетом requires и exports.

  • Доступно:

    • General definition: §6.6

Кроме того, центральным новым понятием, начиная с JLS 9, является «уникальная видимость» (§7.4.3), а также термины "потенциально доступный", "читается" / "читается кем", "связанный с". Исторически сложилось так, что в JLS 9 проводилось дополнительное различие между «технически наблюдаемыми» и «действительно наблюдаемыми», которое было исключено с JLS 11.

Кроме того, исторически (до JLS 8) слово «видимый» использовалось в определении затенения (§6.4.1), но это использование было отменено в JLS 9.

Наконец, обратите внимание, что некоторые из этих понятий (явно или неявно) получают определение из API в java.lang.module.

Я предлагаю рассматривать эти термины как технические термины, не предназначенные для обращения к интуиции более широкой аудитории, отчасти потому, что многие определения в JLS касаются «единиц компиляции», которые не нужны для интуитивного понимания. Для сравнения возможного интуитивного понимания с пониманием на основе JLS см. слайд № 20 из JDT использует Java™ 9 — взгляд инсайдеров.

person Stephan Herrmann    schedule 06.12.2018

java.util.Observable не имеет отношения к модульной системе.

В JLS иерархия идет снизу вверх следующим образом: 1. Наблюдаемые: совокупность единиц компиляции, о которых знает компилятор. 2. Видимые: все единицы компиляции в тех модулях, которые читаются модулем, чей код компилируется в данный момент. То, что читает каждый модуль, управляется requires директивами. Видимость определяет, какие пакеты и типы находятся в области видимости, и влияет на доступность. 3. Доступный: общедоступные типы в тех пакетах, которые экспортируются одним модулем в другой модуль, если пакеты в первом модуле видны другому модулю.

person user10750893    schedule 05.12.2018