Что такое "ортогональность"? - PullRequest
116 голосов
/ 06 октября 2009

Что означает «ортогональность», когда речь идет о языках программирования?

Какие примеры ортогональности?

Ответы [ 16 ]

245 голосов
/ 06 октября 2009

Ортогональность - это свойство, которое означает «Изменение A не приводит к изменению B». Примером ортогональной системы может служить радио, где смена станции не меняет громкость, и наоборот.

Неортогональная система будет похожа на вертолет, где изменение скорости может изменить направление.

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

Существует также особое значение при обращении к наборам команд .

33 голосов
/ 06 октября 2009

От Эрика С. Рэймонда "Искусство программирования UNIX"

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

13 голосов
/ 06 октября 2009

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

11 голосов
/ 06 октября 2009

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

Этот термин взят из математики, где два вектора ортогональны, если они пересекаются под прямым углом.

Подумайте о типичном двухмерном декартовом пространстве (вы - типичная сетка с осями X / Y). Постройте две строки: x = 1 и y = 1. Две линии ортогональны. Вы можете изменить x = 1, изменив x, и это не повлияет на другую строку, и наоборот.

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

9 голосов
/ 06 октября 2009

Если у вас есть набор конструкций. Язык называется ортогональным , если он позволяет программисту свободно смешивать эти конструкции. Например, в C вы не можете вернуть массив (статический массив), C в этом случае называется неортогональным:

int[] fun(); // you can't return a static array.
// Of course you can return a pointer, but the langauge allows passing arrays.
// So, it is unorthognal in case.
4 голосов
/ 07 октября 2009

Большинство ответов очень многословны и даже неясны. Суть в том, что если инструмент ортогональный, его можно добавлять, заменять или удалять в пользу более совершенных инструментов, не прибегая ко всему остальному.

Это разница между плотником, имеющим молоток и пилу, который можно использовать для ковки или пиления, или наличием какого-то новомодного комбо молоток / пила, который предназначен для распиливания древесины, а затем ее ковать. Любой из них будет работать на распиловку, а затем на вырубку, но если у вас есть какое-то задание, которое требует распиливания, а не вырубки, то будут работать только ортогональные инструменты. Точно так же, если вам нужно ввернуть вместо удара молоток, вам не нужно выбрасывать свою пилу, если она перпендикулярна (не смешана) с вашим молотком.

Классическим примером являются инструменты командной строки unix: у вас есть один инструмент для получения содержимого диска (dd), другой для фильтрации строк из файла (grep), другой для записи этих строк в файл (cat), и т.д. Все они могут быть смешаны и сопоставлены по желанию.

2 голосов
/ 06 октября 2009

Из Википедия :

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

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

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

Говоря проще, две вещи ортогональны, если изменение одного не влияет на другое.

2 голосов
/ 06 октября 2009

из википедии :

Информатика

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

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

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

1 голос
/ 18 января 2014

Ортогональность в программировании:

Ортогональность является важной концепцией, касающейся того, как относительно небольшое количество компонентов может быть объединено относительно небольшим количеством способов для получения желаемых результатов. Это связано с простотой; чем более ортогональный дизайн, тем меньше исключений. Это облегчает изучение, чтение и запись программ на языке программирования. Значение ортогонального признака не зависит от контекста; основными параметрами являются симметрия и согласованность (например, указатель является ортогональным понятием).

из Википедия

1 голос
/ 06 октября 2009

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

Например, на одном языке вы можете иметь:

str.split

для разделения строки и

LEN (ул)

для получения длины.

На языке, более ортогональном, вы всегда будете использовать str.x или x (str).

Когда вы будете клонировать объект или делать что-то еще, вы будете знать, использовать ли

* * Клон тысяча двадцать-одина (OBJ) * * тысяча двадцать-дв

или

obj.clone

Это один из основных моментов, когда языки программирования ортогональны. Это позволяет вам не обращаться к руководству или не спрашивать кого-либо.

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

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

;)

...