image Терминология — это важнейшая вещь в любом деле. Не договорившись о терминах невозможно преуспеть. Что с этим в программировании? В частности в Java? Не очень хорошо, если не сказать плохо.

Кажется нет четкой договоренности даже о базовых терминах. Например, если я скажу «внутренний класс», о чем вы подумаете? Держу пари, будет больше чем один вариант того что имеется в виду. И это очень плохо т.к. создает трудности в общении и не только.

Как исправляется такая ситуация обычно — выпускаются ГОСТы. Эти ГОСТы имеют приписку «Термины и определения». Например — ГОСТ Р 7.0.8.-2013 «Делопроизводство и архивное дело — Термины и определения».

Но ГОСТы это же скучно. Поэтому ниже я приведу свой вклад в устранение хаоса, хотя бы по части терминологии в отношении классов Java.

Итак, в Java есть классы:

  • «Лучезарный» (radiant class) — все классы являются «лучезарными». Если вы скажете «я написал лучезарный класс», то это будет означать что это какой-то класс из нижеперечисленных, только и всего. Все нижеперечисленные классы «лучезарны»!

    • «Парящий» (soaring class) — это класс, описание которого начинается сразу после разделов «package» и «import» исходного .java-файла.
    • «Крадущийся» (sneaking class) — крадущиеся классы 'живут' (определяются) только внутри «парящих». Это обобщающее понятие для нижеперечисленных видов классов.

      • «Испепеляющий» (sizzling class) — это статический класс объявленный непосредственно внутри «парящего»
      • «Пронзающий» (piercing class) — это НЕ статический класс объявленный непосредственно внутри «парящего»
      • «Тенеподобный» (shadowy class) — это анонимный класс
      • «Рыскающий» (yawing class) — это локальный класс. Объявляется в блоках кода (в методах классов), впрочем как и «тенеподобный»

Уточнение на всякий случай: в этой схеме «Лучезарный» — это обобщение для всех видов классов вообще, а «Крадущийся» — это обобщение для всех тех «Лучезарных» классов которые не являются «Парящими».

Подбробнее


Парящий (soaring)

  • основной вид классов — располагается непосредственно на «верхнем уровне» исходных .java-файлов

Испепеляющий (sizzling)

Пример:

//А - парящий класс
public class A {
      //B - испепеляющий класс
      public static class B {

      }
}

  • по сути ничем не отличается от парящего класса, кроме места своего объявления
  • не имеет доступа к не статическим элементам своего родительского парящего класса

Пронзающий (piercing)

Пример:

//А - парящий класс
public class A {
      //B - пронзающий класс
      public class B {

      }
}

  • имеет доступ ко всем элементам родительского, парящего класса
  • не может иметь статических объявлений
  • не будучи объявленным как public может быть инстанцирован только внутри своего родительского парящего класса

Тенеподобный (shadowy)

Пример:

new Thread(new Runnable() {
        public void run() {
            ...
        }
    }).start();
//то что внутри Thread(...) - это тенеподобный класс

  • располагается внутри блоков кода (в методах). Все другие классы сначала пишутся с присвоением имени и затем это имя как-то используется. Этот же класс пишется без имени и сразу же используется с оператором new, т.е. сразу инстанцируется
  • имеет доступ к элементам обрамляющего класса
  • имеет доступ к локальным элементам обрамляющего блока кода (к переменным метода например)
  • не может внутри себя определять static элементы кроме static final

Рыскающий (yawing)

Пример:

//А - парящий класс
public class A {
        public void method1() {
            //B - рыскающий класс
            class B {
                ...
                }
        }
}

  • располагается внутри блоков кода (в методах)
  • имеет доступ к элементам обрамляющего класса
  • имеет доступ к локальным элементам обрамляющего блока кода (к переменным метода например)
  • виден только в пределах блока где определен
  • не может быть объявлен как private, public, protected или static
  • не может внутри себя определять static элементы кроме static final

Заключение


Этой терминологии я дал имя [ydax] — случайное, но уникальное имя в пределах меня, сгенерированно специальным скриптиком.

А теперь возрадуемся братья и сестры — хоаса с этом мире стало меньше! Пользуйтесь этой терминологией, а если кому-то что-то будет не понятно — кидайте ссылку на эту статью. Гуд бай )

P.S. эту статью можно принять за стёб, но это не так — в каждой шутке лишь доля шутки )
P.P.S. если где неверную информацию привел — поправляйте меня
Поделиться с друзьями
-->

Комментарии (16)


  1. sbnur
    20.05.2017 13:06

    Поэт — находка для коммента — чувствуется арабское влияние.
    А можно привести заодно английские аналоги назвыаний?


    1. AngReload
      20.05.2017 20:45
      +7

      Самый трушный вариант:
      — Luchezarnyj
      — Parjashhij
      — Kradushhijsja
      — Ispepeljajushhij
      — Pronzajushhij
      — Tenepodobnyj
      — Ryskajushhij


    1. ssurrokk
      21.05.2017 07:09

      Согласен, не лишнее, добавил английские варианты


    1. ssurrokk
      21.05.2017 07:11

      Скорее восточными единоборствами навеяно)


  1. andrewev
    21.05.2017 00:20
    +1

    Подмена понятий. А вот слабо придумать так, чтобы прямо по тексту — без сносок, ссылок и поиска в Яндексе можно было получить краткое описание термина? Ежели слабо — то какой же ты, нафиг, танкист, извините, программист?


  1. Moonrise
    21.05.2017 06:18

    Неладно что-то с вашими определениями.

    крадущиеся классы 'живут' только внутри «парящих»

    однако
    «Испепеляющий» — это статический класс объявленный непосредственно внутри «крадущегося»

    А как же называть статический класс, живущий внутри «парящего»?


    1. ssurrokk
      21.05.2017 06:55

      Заговорился) подправил, внутри «парящего» конечно


  1. fogone
    21.05.2017 10:35

    Вот что-то на счёт испепеляющего не уверен…


    1. ssurrokk
      21.05.2017 14:22

      В чем сомнения?


  1. lexore
    21.05.2017 10:36
    +3

    Крадущийся класс, затаившийся объект.


    1. tridetch
      21.05.2017 11:17
      +1

      Затаившийся объект это когда память потекла))


  1. Daniil1979
    21.05.2017 10:44
    +3

    Автор, Вы с ЛСД завязывайте, пожалуйста.


    1. ssurrokk
      21.05.2017 14:23
      +1

      Сижу только на пиве, вине, иногда водки немного)


      1. Deosis
        22.05.2017 06:08

        Пиво, вино, немного водки — коктейль "Слонобой"


      1. user4000
        22.05.2017 09:43

        Надеюсь, это всё — не одновременно?


        1. ssurrokk
          22.05.2017 09:44

          если речь о коктейле «Слонобой», то нет, не пробовал