Вопрос

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

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

Это было полезно?

Решение

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

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

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

Существует также специфический смысл , когда речь идет о наборы инструкций.

Другие советы

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

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

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

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

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

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

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

Если у вас есть набор конструкций.Говорят , что язык - это ортогональный если это позволяет программисту свободно смешивать эти конструкции.Например, в 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) и т.д.Все это можно смешивать и сочетать по желанию.

От википедия:

Информатика

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

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

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

От Википедия:

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

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

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

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

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

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

ул. сплит

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

len(ул.)

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

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

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

клонирование (obj)

или

obj.клонировать

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

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

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

;)

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

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

От Википедия

В языках программирования объект языка программирования называется ортогональным, если он ограничен без каких-либо ограничений (или исключений).Например, в Pascal функции не могут возвращать структурированные типы.Это ограничение на возврат значений из функции.Поэтому мы рассматриваем его как неортогональный объект.;)

В качестве примеров отсутствия ортогональности в языке высокого уровня рассмотрим следующие правила и исключения в C.Хотя C имеет два вида структурированных типов данных, массивы и записи (structs), записи могут быть возвращены из функций, а массивы - нет.Членом структуры может быть любой тип данных, кроме void, или структура того же типа.Элементом массива может быть любой тип данных, кроме void или функции.Параметры передаются по значению, если только они не являются массивами, и в этом случае они, по сути, передаются по ссылке (поскольку появление имени массива без нижнего индекса в программе на C интерпретируется как адрес первого элемента массива)

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

Example : non-orthogonality

ПАСКАЛЬ:функции не могут возвращать структурированные типы.Функциональные языки в высшей степени ортогональны.

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

Ортогональность в языке программирования означает, что относительно небольшой набор примитивных конструкций может быть объединен относительно небольшим числом способов для построения структур управления и данных языка.Кроме того, каждый пос- возможно сочетание примитивов является законным и значимым.Например, рассмотрим типы данных.Предположим, что язык имеет четыре примитивных типа данных (integer, float, double и character) и два оператора типа (array и pointer).Если два оператора типа могут быть применены к самим себе и к четырем примитивным типам данных, может быть определено большое количество структур данных.Значение ортогональной языковой функции не зависит от контекста ее появления в программе.(слово ортогональный происходит от математического понятия ортогональных векторов, которые независимы друг от друга .) Ортогональность следует из симметрии отношений между примитивами .Отсутствие ортогональности приводит к исключениям из правил языка.Например, в языке программирования, который поддерживает указатели, должно быть возможно определить указатель, указывающий на любой конкретный тип, определенный в языке.Однако, если указателям не разрешено указывать на массивы, многие потенциально полезные пользовательские структуры данных не могут быть определены.Мы можем проиллюстрировать использование ортогональности как концепции проектирования, сравнив один аспект языков ассемблера мэйнфреймовых компьютеров 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 дизайн сложнее освоить из-за ограничений и дополнительных инструкций.Ортогональность тесно связана с простотой:Чем более ортогональен дизайн языка, тем меньше исключений требуют языковые правила.Меньше исключений означает более высокую степень регулярности в дизайне, что делает язык более легким для изучения, чтения и понимания.Тот, кто научился сиг- значительные части языка может свидетельствовать о сложности обучения, его многочисленные исключения из правил (например, я перед е, за исключением после Градусы).

Проверка ортогональности матриц:

Ортогональность также может быть относительно матриц,

Matrix *(transpose of matrix)= identity matrix. 

Нажмите на ссылку ниже, чтобы просмотреть видео на YouTube об ортогональности.
https://youtu.be/tNekLaxnfW8

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top