Является ли Java ортогональным? - PullRequest
10 голосов
/ 17 июля 2010

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

Спасибо

Ответы [ 5 ]

24 голосов
/ 17 июля 2010

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

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

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

Прагматика языка программирования, глава 6, стр. 228:

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

На Лиспе, 5.2 Ортогональность:

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


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

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

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

3 голосов
/ 17 июля 2010

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

"... означая, что [язык] имеет относительно небольшое количество базовых конструкций и набор правил для объединения этих конструкций. У каждой конструкции есть связанный с ней тип, и эти типы не имеют ограничений. ... " см. АЛГОЛЬ

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

Более формально, ортогональный язык будет иметь ОДИН ОДИН способ выполнить данную операцию. Неортогональные языки могут иметь более одного способа достижения того же эффекта.

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

for loop; vs. while loop;

for и while не ортогональны.

2 голосов
/ 17 июля 2010

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

1 голос
/ 21 июля 2013

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

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

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

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

  2. каждая возможная структура является допустимой

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

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

1 голос
/ 07 мая 2013

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

...