Является ли Java ортогональной?

Мне интересно, является ли Java ортогональной или нет, и если да, то каковы ее функции, которые делают ее ортогональной. Как вы можете определить, является ли язык ортогональным или нет? Например, я нашел на каком-то веб-сайте, что С++ не является ортогональным, но никаких объяснений, почему бы и нет. Какие другие языки ортогональны? Пожалуйста, помогите мне, потому что в Интернете почти нет информации об этой теме.

Спасибо

Ответ 1

Искусство программирования UNIX, Глава 4. Модульность, ортогональность, Страница 89:

ортогональности

Ортогональность - одна из самых важные свойства, которые могут помочь делают даже сложные конструкции компактными. В чисто ортогональная конструкция, операции не имеют побочных эффектов; каждое действие (будь то вызов API, макрос вызов или языковая операция) меняет только одну вещь без затрагивая других. Существует один и только один способ изменить каждое свойство какой бы системы вы ни были контроль.

Язык программирования Pragmatics, глава 6, Страница 228:

Ортогональность означает, что функции могут использовать в любой комбинации, чтобы все это имеет смысл, и что значение данной функции согласованный, , независимо от другого функции, с которыми он объединен.

В Lisp, 5.2 Ортогональность:

Ортогональный язык - это тот, в котором вы можете выразить много, объединив небольшое количество операторов во многих разными способами.


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

В Java вам придется оценивать, например, если есть комбинация ключевых слов/конструкций, которые могут влиять друг на друга при одновременном использовании в идентификаторе. Например, применяя методы public и static к методу, они не мешают друг другу, поэтому эти два являются ортогональными (без побочных эффектов, кроме того, что предназначено для ключевого слова)

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

Ответ 2

Ортогональность - это особенность вашего дизайна независимо от языка. Конечно, некоторые языки упрощают для вас ортогональный дизайн для вашей системы, но вы не должны фокусироваться на конкретном языке, чтобы поддерживать дизайн вашей системы как можно более ортогональным.

Ответ 3

Использование термина "ортогональный язык программирования" необычно. Как правило, в информатике вы действительно говорите о ортогональных наборах инструкций. Однако, если мы хотим распространить значение на грамматику языка:

"... означает, что [язык] имеет относительно небольшое количество базовых конструкций и набор правил для объединения этих конструкций. Каждая конструкция имеет связанный с ней тип и нет ограничений на эти типы...." см. ALGOL

Тогда мы можем предположить, что если не все инструкции на языке могут работать на всех типах данных, это приведет к неортогональности. Это, однако, не означает, что обратное верно, то есть если все языковые инструкции работают во всех типах данных, это не обязательно означает, что язык ортогонален.

Более формально, ортогональный язык имел бы ТОЛЬКО один способ выполнения данной операции. Неортогональные языки имели бы более чем один способ достижения такого же эффекта.

Простейший пример:

for loop; vs. while loop;

для и while являются неортогональными.

Ответ 4

Ортогональность на самом деле не является языковой функцией как таковой, хотя некоторые языки имеют функции, которые способствуют ортогональности (такие как аннотации, встроенные АОП,..). Что касается ортогональности в Java: я написал небольшое примерное исследование об этом, используя log4j в качестве примера: "" Ортогональность по примеру" - вы можете найти это полезным.

Ответ 5

Отсутствие ортогональности в C:

  • Массив может содержать любой тип данных, кроме void
  • Параметры передаются по значению, но массив передается по ссылке

Язык программирования считается ортогональным, если:

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

  • любая возможная структура является законной

Например, язык с 4 примитивными типами данных (Int, Float, Double, Char) и двумя (Array и Pointer) могут создавать относительно большое количество структур данных.

Таким образом, преимущество ортогональности состоит в том, чтобы сделать язык простым и регулярным, поскольку есть меньше исключений.