Терминология. Борьба со сложностью +6


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. если где неверную информацию привел — поправляйте меня
-->


К сожалению, не доступен сервер mySQL