Что означает «ортогональность», когда речь идет о языках программирования?
Какие есть примеры ортогональности?
language-agnostic
terminology
lexicon
AhmetB - Google
источник
источник
Из книги Эрика С. Раймонда «Искусство программирования UNIX»
источник
Подумайте о том, что он может изменить одну вещь, не оказывая невидимого влияния на другую часть.
источник
Если у вас есть набор конструктов. Язык называется ортогональным, если он позволяет программисту свободно смешивать эти конструкции. Например, в C вы не можете вернуть массив (статический массив), C в этом случае считается неортогнальным:
источник
В широком смысле ортогональность - это взаимосвязь между двумя вещами, при которой они оказывают минимальное влияние друг на друга.
Этот термин пришел из математики, где два вектора ортогональны, если они пересекаются под прямым углом.
Подумайте о типичном двумерном декартовом пространстве (вы типичная сетка с осями X / Y). Постройте две линии: x = 1 и y = 1. Две линии ортогональны. Вы можете изменить x = 1, изменив x, и это не повлияет на другую строку, и наоборот.
В программном обеспечении этот термин может быть уместно использован в ситуациях, когда вы говорите о двух частях системы, которые ведут себя независимо друг от друга.
источник
Большинство ответов очень многословны и даже неясны. Дело в том, что если инструмент ортогонален, его можно добавить, заменить или удалить в пользу более качественных инструментов, не портя все остальное.
В этом разница между плотником, имеющим молоток и пилу, которые можно использовать для молотка или пиления, или новой комбинацией молоток / пила, которая предназначена для пиления древесины, а затем ее сколачивания. Любой из них будет работать для пиления, а затем молотка, но если вы получите задание, требующее пиления, но не молотка, тогда будут работать только ортогональные инструменты. Точно так же, если вам нужно завинтить вместо молотка, вам не нужно будет выбрасывать пилу, если она перпендикулярна (не смешана) с вашим молотком.
Классическим примером являются инструменты командной строки unix: у вас есть один инструмент для получения содержимого диска (dd), другой для фильтрации строк из файла (grep), третий для записи этих строк в файл (cat) и т. Д. все можно смешивать и сочетать по желанию.
источник
Говоря о проектных решениях по языкам программирования, ортогональность можно рассматривать как то, насколько легко вам предсказать другие вещи об этом языке на основе того, что вы видели в прошлом.
Например, на одном языке вы можете иметь:
для разделения строки и
для получения длины.
На более ортогональном языке вы всегда должны использовать str.x или x (str).
Когда вы клонируете объект или делаете что-нибудь еще, вы будете знать, использовать ли
или
Это один из основных моментов ортогональности языков программирования. Это избавит вас от необходимости обращаться к руководству или спрашивать кого-нибудь.
В статье в Википедии больше говорится об ортогональности в сложных проектах или языках низкого уровня. Как кто-то предложил выше в комментарии, книга Sebesta четко говорит об ортогональности.
Если бы я использовал только одно предложение, я бы сказал, что язык программирования ортогонален, когда его неизвестные части действуют так, как ожидалось, исходя из того, что вы видели. Или ... никаких сюрпризов.
;)
источник
из википедии :
Компьютерная наука
Ортогональность - это свойство системного дизайна, обеспечивающее выполнимость и компактность сложных конструкций. Ортогональность гарантирует, что изменение технического эффекта, производимого компонентом системы, не создает и не распространяет побочные эффекты на другие компоненты системы. Возникающее поведение системы, состоящей из компонентов, должно строго контролироваться формальными определениями ее логики, а не побочными эффектами, возникающими в результате плохой интеграции, то есть неортогональной конструкции модулей и интерфейсов. Ортогональность сокращает время тестирования и разработки, потому что легче проверять проекты, которые не вызывают побочных эффектов и не зависят от них.
Например, у автомобиля есть ортогональные компоненты и элементы управления (например, ускорение автомобиля не влияет ни на что другое, кроме компонентов, задействованных исключительно в функции ускорения). С другой стороны, неортогональная конструкция может влиять на торможение (например, электронный контроль устойчивости) или регулировку скорости на подвеску. 1 Следовательно, это использование считается производным от использования ортогональности в математике: можно проецировать вектор на подпространство, проецируя его на каждый член набора базисных векторов отдельно и добавляя проекции тогда и только тогда, когда базисные векторы взаимно ортогональны.
Набор команд называется ортогональным, если любая инструкция может использовать любой регистр в любом режиме адресации. Эта терминология является результатом рассмотрения инструкции как вектора, компонентами которого являются поля инструкции. Одно поле определяет регистры, с которыми нужно работать, а другое определяет режим адресации. Набор ортогональных команд однозначно кодирует все комбинации регистров и режимов адресации.
источник
Из Википедии :
Проще говоря, две вещи ортогональны, если изменение одной не влияет на другую.
источник
В качестве примеров отсутствия ортогональности в языке высокого уровня рассмотрим следующие правила и исключения в C. Хотя C имеет два типа структурированных типов данных: массивы и записи (структуры), записи могут быть возвращены из функций, а массивы - нет. Член структуры может быть любым типом данных, кроме void или структурой того же типа. Элемент массива может быть любого типа данных, кроме void или функции. Параметры передаются по значению, если они не являются массивами, и в этом случае они фактически передаются по ссылке (поскольку появление имени массива без индекса в программе на C интерпретируется как адрес первого элемента массива)
источник
В языках программирования функция языка программирования называется ортогональной, если она ограничена без ограничений (или исключений). Например, в Pascal функции не могут возвращать структурированные типы. Это ограничение на возврат значений из функции. Поэтому мы рассматриваем это как неортогональную функцию. ;)
источник
Ортогональность в программировании:
из Википедии
источник
Ортогональность в языке программирования означает, что относительно небольшой набор примитивных конструкций может быть объединен относительно небольшим количеством способов для создания структур управления и данных языка. Более того, любая возможная комбинация примитивов допустима и значима. Например, рассмотрим типы данных. Предположим, что в языке есть четыре примитивных типа данных (целое число, число с плавающей запятой, двойное и символьное) и два оператора типа (массив и указатель). Если два оператора типа могут быть применены к себе и к четырем примитивным типам данных, можно определить большое количество структур данных. Значение функции ортогонального языка не зависит от контекста ее появления в программе. (Слово ортогональный происходит от математической концепции ортогональных векторов, которые независимы друг от друга. ) Ортогональность следует из симметрии отношений между примитивными существами. Отсутствие ортогональности приводит к исключениям из правил языка. Например, в языке программирования, поддерживающем указатели, должна быть возможность определить указатель, указывающий на любой конкретный тип, определенный в языке. Однако, если указателям не разрешено указывать на массивы, многие потенциально полезные пользовательские структуры данных не могут быть определены. Мы можем проиллюстрировать использование ортогональности в качестве концепции дизайна, сравнив один аспект языков ассемблера мэйнфреймов IBM и миникомпьютеров серии VAX. Мы рассматриваем одну простую ситуацию: добавляем два 32-битных целых числа, которые находятся либо в памяти, либо в регистрах, и заменяем одно из двух значений суммой. В мэйнфреймах IBM для этого есть две инструкции:
где Reg1 и Reg2 представляют собой регистры. Семантика этих
Инструкция сложения VAX для 32-битных целочисленных значений:
чья семантика
В этом случае любой операнд может быть регистром или ячейкой памяти. Дизайн команд VAX является ортогональным в том смысле, что одна команда может использовать в качестве операндов либо регистры, либо ячейки памяти. Есть два способа указать операнды, которые можно комбинировать всеми возможными способами. Дизайн IBM не ортогонален. Только две из четырех возможных комбинаций операндов допустимы, и для двух требуются разные инструкции, A и AR. Дизайн IBM более ограничен и поэтому менее доступен для записи. Например, вы не можете сложить два значения и сохранить сумму в ячейке памяти. Кроме того, дизайн IBM сложнее изучить из-за ограничений и дополнительных инструкций. Ортогональность тесно связана с простотой: чем более ортогонален дизайн языка, тем меньше исключений требуют языковые правила. Меньшее количество исключений означает более высокую степень регулярности дизайна, что упрощает изучение, чтение и понимание языка. Любой, кто изучил значительную часть английского языка, может засвидетельствовать трудность изучения многих исключений из правил (например, i до e, кроме c).
источник
Ортогональность означает степень, в которой язык состоит из набора независимых примитивных конструкций, которые можно комбинировать по мере необходимости для выражения программы. Элементы ортогональны, если нет ограничений на то, как их можно комбинировать.
PASCAL: функции не могут возвращать структурированные типы. Функциональные языки очень ортогональны.
источник
Основная идея ортогональности состоит в том, что вещи, которые концептуально не связаны, не должны быть связаны в системе. Части архитектуры, которые на самом деле не имеют ничего общего с другими, такие как база данных и пользовательский интерфейс, не должны изменяться вместе. Изменение одного не должно вызывать изменение другого.
источник
Проверяем ортогональность матриц:
Ортогональность может быть и по отношению к матрицам,
Щелкните ссылку ниже, чтобы просмотреть видеоролик YouTube о ортогональности.
https://youtu.be/tNekLaxnfW8
источник