Что означает "ортогональность" при разговоре о языках программирования?
Каковы некоторые примеры ортогональности?
Что означает "ортогональность" при разговоре о языках программирования?
Каковы некоторые примеры ортогональности?
Ортогональность - это свойство, которое означает, что "Изменение A не изменяет B". Примером ортогональной системы может быть радио, где изменение станции не изменяет громкость и наоборот.
Неортогональная система будет похожа на вертолет, где изменение скорости может изменить направление.
В языках программирования это означает, что когда вы выполняете инструкцию, ничего, кроме этой команды, не происходит (очень важно для отладки).
Существует также конкретное значение при обращении к наборам инструкций.
От Эрика С. Раймонда "Искусство программирования UNIX"
Ортогональность - одно из самых важных свойств, которое может помочь сделать компактные компактные конструкции. В чисто ортогональном дизайне операции не имеют побочных эффектов; каждое действие (будь то вызов API, вызов макроса или языковая операция) меняет только одно, не затрагивая других. Существует один и только один способ изменить каждое свойство любой системы, которую вы контролируете.
Подумайте, что он может изменить одно, не имея невидимого влияния на другую часть.
В широком смысле ортогональность - это взаимосвязь между двумя вещами, так что они оказывают минимальное влияние друг на друга.
Термин исходит из математики, где два вектора ортогональны, если они пересекаются под прямым углом.
Подумайте о типичном двумерном декартовом пространстве (типичная сетка с осями X/Y). Выделите две строки: x = 1 и y = 1. Две линии ортогональны. Вы можете изменить x = 1, изменив x, и это не повлияет на другую строку, и наоборот.
В программном обеспечении этот термин может быть соответствующим образом использован в ситуациях, когда вы говорите о двух частях системы, которые ведут себя независимо друг от друга.
Если у вас есть набор конструкций. Langauge называется ортогональным, если он позволяет программисту свободно смешать эти конструкции. Например, в 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.
Большинство ответов очень затянуты и даже неясны. Дело в том, что если инструмент ортогонален, он может быть добавлен, заменен или удален в пользу лучших инструментов, не закручивая все остальное.
Это разница между плотником с молотком и пилой, который можно использовать для молота или распиловки, или с помощью нового комковатого молотка/пилы, который предназначен для дерева, а затем сбивает его вместе. Либо будет работать на распиловку, а затем набивать вместе, но если у вас будет какая-то задача, требующая распиловки, но не забивание, тогда будут работать только ортогональные инструменты. Точно так же, если вам нужно прикрутить вместо удара, вам не нужно выбрасывать пилу, если она ортогональна (не перепутана) с вашим молотом.
Классический пример - инструменты командной строки unix: у вас есть один инструмент для получения содержимого диска (dd), другой для фильтрации строк из файла (grep), другой для записи этих строк в файл (cat), и т.д. Все они могут быть смешаны и согласованы по желанию.
От Wikipedia:
Ортогональность - это системный дизайн имущества, способствующего осуществимости и компактность сложных конструкций. Ортогональность гарантирует, что изменение технического эффекта произведенный компонентом системы не создает и не распространяется воздействия на другие компоненты система. Возникающее поведение система, состоящая из компонентов, должна строго контролироваться формальным определения его логики, а не побочные эффекты, интегрирование, то есть неортогональное дизайн модулей и интерфейсов. Ортогональность снижает тестирование и время разработки, потому что это проще для проверки конструкций, которые не вызывают побочные эффекты и не зависят от них.
Например, автомобиль имеет ортогональную компонентов и элементов управления (например, ускорение транспортного средства не влияют на что-либо другое, кроме компоненты, связанные исключительно с функция ускорения). На с другой стороны, неортогональная конструкция может повлиять на его рулевое управление торможение (например, электронная стабильность контроль), или скорость его настройки подвеска. [1] Следовательно, это считается, что использование использование ортогональных в математике: один может проектировать вектор на подпространство проецируя его на каждый член набор базисных векторов отдельно и добавление проекций тогда и только тогда, когда базисные векторы взаимно ортогональны.
Предполагается, что набор команд ортогонально, если любая инструкция может использовать любой регистр в любом режиме адресации. Эта терминология рассматривая инструкцию как вектор компонентами которого являются инструкция поля. Одно поле идентифицирует регистрируемые регистры и другой указывает режим адресации. Набор ортогональных команд однозначно кодирует все комбинации регистров и режимы адресации.
Чтобы выразить это в самых простых условиях, две вещи ортогональны, если изменение одного не влияет на другое.
from wikipedia:
Информатика
Ортогональность - это свойство конструкции системы, облегчающее выполнимость и компактность сложных конструкций. Ортогональность гарантирует, что изменение технического эффекта, создаваемого компонентом системы, не создает и не распространяет побочные эффекты на другие компоненты системы. Возникающее поведение системы, состоящей из компонентов, должно строго контролироваться формальными определениями его логики, а не побочными эффектами, возникающими в результате плохой интеграции, т.е. Неортогональной конструкцией модулей и интерфейсов. Ортогональность уменьшает время тестирования и разработки, потому что легче проверять конструкции, которые не вызывают побочных эффектов и не зависят от них.
Например, автомобиль имеет ортогональные компоненты и элементы управления (например, ускорение транспортного средства не влияет ни на что иное, кроме компонентов, связанных исключительно с функцией ускорения). С другой стороны, неортогональная конструкция может повлиять на ее торможение (например, электронное управление стабильностью) или скорость его подвески. 1 Следовательно, это использование считается производным от использования ортогонального в математике: можно проектировать вектор на подпространство, проецируя его на каждый член набора базисных векторов отдельно и добавляя проекции тогда и только тогда, когда базис векторы взаимно ортогональны.
Набор команд называется ортогональным, если любая команда может использовать любой регистр в любом режиме адресации. Эта терминология возникает из рассмотрения инструкции как вектора, компонентами которого являются поля команд. В одном поле определяются регистры, которые будут использоваться, а другой - режим адресации. Набор ортогональных команд однозначно кодирует все комбинации регистров и режимов адресации.
Говоря о решениях по проектам на языках программирования, ортогональность может рассматриваться как то, как легко предсказать другие вещи об этом языке для того, что вы видели в прошлом.
Например, на одном языке вы можете:
str.split
для разделения строки и
Len (строка)
для получения длины.
На языке, более ортогональном, вы всегда будете использовать str.x или x (str).
Когда вы клонируете объект или делаете что-нибудь еще, вы знаете, следует ли использовать
Клон (OBJ)
или
obj.clone
Это один из основных пунктов ортогональности языков программирования. Это позволяет вам проконсультироваться с руководством или спросить кого-нибудь.
В статье в Википедии больше говорится об ортогональности на сложных проектах или языках низкого уровня. Как кто-то предложил выше на комментарий, книга Sebesta четко говорит о ортогональности.
Если бы я использовал только одно предложение, я бы сказал, что язык программирования ортогонален, когда его неизвестные части действуют так, как ожидалось, на основе того, что вы видели. Или... никаких сюрпризов.
;)
Первый раз, услышав слово, но Википедия, похоже, что-то на нем:
В языках программирования функция языка программирования называется ортогональной, если она ограничена без ограничений (или исключений). Например, функции Pascal не могут возвращать структурированные типы. Это ограничение на возврат значений из функции. Поэтому мы рассматриваем его как неортогональную функцию.;)
Ортогональность в программировании:
Ортогональность - это важная концепция, рассматривающая то, как относительно небольшое количество компонентов может быть объединено относительно небольшим количеством способов получения желаемых результатов. Это связано с простотой; чем больше ортогонален дизайн, тем меньше исключений. Это облегчает изучение, чтение и запись программ на языке программирования. Значение ортогональной функции не зависит от контекста; ключевыми параметрами являются симметрия и согласованность (например, указатель является ортогональной концепцией).
из Wikipedia
В качестве примеров отсутствия ортогональности на языке высокого уровня рассмотрим следующие правила и исключения в C. Хотя C имеет два типа структурированных типов данных, массивы и записи (структуры), записи могут быть возвращены из функций, но массивы не могут. Членом структуры может быть любой тип данных, кроме void или структуры того же типа. Элементом массива может быть любой тип данных, кроме void или функции. Параметры передаются по значению, если только они не являются массивами, и в этом случае они передаются по ссылке (поскольку появление имени массива без индекса в программе C интерпретируется как адрес первого элемента массивов)
Ортогональность означает степень, в которой язык состоит из набора независимых примитивных конструкций, которые могут быть объединены по мере необходимости для выражения программы. Особенности ортогональны, если нет ограничений на то, как они могут быть объединены.
Example : non-orthogonality
PASCAL: функции не могут возвращать структурированные типы. Функциональные языки сильно ортогональны.
Ортогональность в языке программирования означает, что относительно небольшое множество примитивные конструкции могут быть объединены относительно небольшим числом способов построить структуру управления и данных языка. Кроме того, Это сочетание примитивов является законным и значимым. Например, рассмотрите типы данных. Предположим, что язык имеет четыре примитивных типа данных (integer, float, double и character) и двух типов операторов (массив и указатель). Если два операторы типа могут применяться к себе и к четырем примитивным типам данных, может быть определено большое количество структур данных. Значение функции ортогонального языка не зависит от контекст его появления в программе. (слово ортогональное происходит от математическая концепция ортогональных векторов, которые не зависят от каждого другое). Ортогональность вытекает из симметрии отношений между прими- ставители. Отсутствие ортогональности приводит к исключениям из правил языка. Например, на языке программирования, который поддерживает указатели, он должен быть можно определить указатель, чтобы указать на какой-либо конкретный тип, определенный на языке. Однако, если указатели не могут указывать на массивы, многие потенциально полезные пользовательские структуры данных не могут быть определены. Мы можем проиллюстрировать использование ортогональности в качестве концепции проектирования, один аспект языков ассемблера компьютеров мейнфреймов IBM и мини-ЭВМ серии VAX. Мы рассматриваем одну простую ситуацию: добавляя два 32-битных целочисленных значения, которые находятся либо в памяти, либо в регистре, и заменяя одно из двух значений суммой. Мейнфреймы IBM имеют два инструкции для этой цели, которые имеют формы
A Reg1, memory_cell
AR Reg1, Reg2
где Reg1 и Reg2 представляют регистры. Семантика этих
Reg1 ← contents(Reg1) + contents(memory_cell)
Reg1 ← contents(Reg1) + contents(Reg2)
Инструкция добавления VAX для 32-разрядных целых значений
ADDL operand_1, operand_2
чья семантика
operand_2 ← contents(operand_1) + contents(operand_2)
В этом случае либо операндом может быть регистр или ячейка памяти. Конструкция инструкции VAX ортогональна тем, что одна инструкция может используйте регистры или ячейки памяти в качестве операндов. Существует два способа укажите операнды, которые могут быть объединены всеми возможными способами. Дизайн IBM не является ортогональным. Только две из четырех возможностей комбинаций операндов юридические, и эти два требуют разных инструкций, A и AR. Дизайн IBM является более ограниченным и, следовательно, менее доступным для записи. Например, вы не можете добавить два значения и сохранить сумму в памяти. Кроме того, IBM дизайн сложнее изучить из-за ограничений и дополнительной инструкции. Ортогональность тесно связана с простотой: чем больше ортогональна дизайн языка, тем меньше исключений требует языковые правила. Меньшее исключения означают более высокую степень регулярности в дизайне, что делает язык легче учиться, читать и понимать. Любой, кто научился сиг- значительная часть английского языка может свидетельствовать о трудностях изучения его многие правила исключений (например, я до e, кроме после c).
Проверить ортогональность матриц:
Ортогональность также может быть относительно матриц,
Matrix *(transpose of matrix)= identity matrix.
Нажмите ссылку ниже, чтобы просмотреть видеоролик YouTube на сайте Orthogonality. https://youtu.be/tNekLaxnfW8