Що таке "ортогональність"?


Відповіді:


255

Ортогональність - це властивість, що означає "Зміна A не змінює B". Прикладом ортогональної системи може бути радіо, де зміна станції не змінює гучність і навпаки.

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

У мовах програмування це означає, що при виконанні інструкції нічого, крім цієї інструкції, не відбувається (дуже важливо для налагодження).

Існує також конкретне значення, коли йдеться про набори інструкцій .


Ця відповідь нагадує мені теорію "суперпозиції" від сигналу та систем.
Özgür

1
Дуже чітке пояснення різних звичаїв цього слова: c2.com/cgi/wiki?DefinitionOfOrthogonal
Лоренцо Солано

Тож функціональне програмування є повністю ортогональним?
corazza

Це цікаве питання @yannbane. В теорії, залежно від теоретичної функціональної мови, це може бути правдою. На практиці немає, навіть функціональні мови не мають способів змінити державну.
К. Росс

1
Б'юсь об заклад, що приклад вертольота від "Прагматичного програміста" :)
Sreekanth Karumanaghat

36

З твору Еріка С. Реймонда "Мистецтво програмування UNIX"

Ортогональність - одна з найважливіших властивостей, яка може допомогти зробити навіть складні конструкції компактними. У чисто ортогональній конструкції операції не мають побічних ефектів; кожна дія (будь то виклик API, виклик макросу або мовна операція) змінює лише одне, не зачіпаючи інших. Існує один і єдиний спосіб змінити кожне властивість будь-якої системи, якою ви керуєте.


16

Подумайте про те, чи зможете змінити одне, не маючи при цьому невидимого впливу на іншу частину.


12

Якщо у вас є набір конструкцій. Кажуть, що лангаж є ортогональним, якщо він дозволяє програмісту вільно перемішувати ці конструкції. Наприклад, в 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.

Насправді я бачив це у своїй книзі і досі не розумію, що це.
AhmetB - Google

LOL Я використовую цю книгу і побачив це питання в онлайн-вікторині книги. Який збіг. Можливо, я також повинен прочитати першу главу.
AhmetB - Google

2
Це просто говорить про те, що повернення та масиви є складнішими у поєднанні: ви не можете використовувати віддачу навколо масивів, не думаючи про взаємодію між ними. В ідеалі, ви б знали, що означає повернення, а що таке масив, і таким чином ви знали б, що буде робити масив, що повертається, але насправді це складніше, ніж це, оскільки C розкриває деталі реалізації масивів (і повернення).
Лі Б

Це відчуття "ортогонального" охоплюється: en.wikipedia.org/wiki/Orthogonality_(programming) , але це нова сторінка з невеликим вмістом.
outis

1
Це "правильніша" відповідь про ортогональність у контексті програмування. "ортогональність" означає, що програмуюча конструкція може бути змішана з будь-якою іншою конструкцією, і її семантика все одно залишиться тією ж.
деревокодер

11

Загалом, ортогональність - це зв'язок між двома речами, таким чином, що вони мінімально впливають один на одного.

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

Подумайте про типовий двомірний декартовий простір (ви типова сітка з осями X / Y). Накресліть два рядки: x = 1 і y = 1. Дві лінії є ортогональними. Ви можете змінити x = 1, змінивши x, і це не вплине на інший рядок, і навпаки.

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


5

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

Це різниця між столяром, що має молоток, і пилкою, яку можна використовувати для забивання молотка або пиляння, або новим комбінованим молотком / пилкою, який призначений для розпилювання деревини, а потім забивання її разом. Або буде працювати для пиляння, а потім і забивання разом, але якщо ви отримаєте якесь завдання, яке вимагає розпилювання, але не забивання, тоді працюватимуть лише ортогональні інструменти. Так само, якщо вам потрібно закрутити молоток, а не забивати, вам не потрібно буде викидати пилку, якщо вона має ортогональний (не змішаний з) ваш молоток.

Класичний приклад - інструменти командного рядка unix: у вас є один інструмент для отримання вмісту диска (dd), інший для фільтрації рядків з файлу (grep), інший для запису цих рядків у файл (cat) тощо. Ці все можна змішувати і узгоджувати за бажанням.


2

Говорячи про рішення проектів щодо мов програмування, ортогональність може розглядатися як те, наскільки легко передбачити інші речі щодо цієї мови для того, що ви бачили раніше.

Наприклад, однією мовою ви можете мати:

str.split

для розбиття рядка та

len (str)

за отримання довжини.

На ортогональній мові ви завжди використовуєте str.x або x (str).

Коли ви будете клонувати об’єкт чи робити щось інше, ви б знали, чи потрібно їх використовувати

клон (obj)

або

obj.clone

Це одне з головних моментів щодо ортогональних мов програмування. Це дозволяє вам не звернутися до посібника чи запитати когось.

Стаття у вікіпедії розповідає більше про ортогональність складних конструкцій або мов низького рівня. Як хтось запропонував вище в коментарі, книга "Себеста" чітко говорить про ортогональність.

Якби я використав лише одне речення, я б сказав, що мова програмування є ортогональною, коли її невідомі частини діють, як очікувалося, на основі побаченого. Або ... ніяких сюрпризів.

;)


Ця відповідь не відповідає іншим; це просто вимагає узгодженості між функціональними викликами або загальною структурою на відміну від інших, що знаходяться на лініях "менш сполученого" або "побічної беззвучності".
Özgür

Це звичайне використання я зазвичай чув. Я думаю, що причина ортогональна полягає в тому, що якщо у вас є X.ToString і X.GetType, ви можете змінювати об'єкт, і синтаксис однаковий, або ви можете змінювати функцію, і синтаксис однаковий. Об'єкт не залежить від функції.
dwidel

1

з Вікіпедії :

Комп'ютерна наука

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

Наприклад, автомобіль має ортогональні компоненти та елементи управління (наприклад, прискорення транспортного засобу не впливає ні на що інше, окрім компонентів, задіяних виключно за допомогою функції прискорення). З іншого боку, неортогональна конструкція може впливати на рульове керування її гальмуванням (наприклад, електронний контроль стійкості) або швидкість зміни її підвіски. 1 Отже, це використання походить від використання ортогональних у математиці: Можна проектувати вектор на підпростір, проектуючи його на кожного члена набору базових векторів окремо і додаючи проекції, якщо і лише якщо базові вектори є взаємно ортогональними.

Кажуть, що набір інструкцій є ортогональним, якщо будь-яка інструкція може використовувати будь-який регістр у будь-якому режимі адреси. Ця термінологія є результатом розгляду інструкції як вектора, компонентами якого є поля інструкцій. Одне поле ідентифікує регістри, якими слід керувати, а інше вказує режим адресації. Ортогональний набір інструкцій однозначно кодує всі комбінації регістрів та режимів адреси.


О, дякую, щойно я відвідав цю заглушку en.wikipedia.org/wiki/Orthogonality_%28programming%29 Вибачте.
AhmetB - Google

1

З Вікіпедії :

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

Наприклад, автомобіль має ортогональні компоненти та елементи управління (наприклад, прискорення транспортного засобу не впливає ні на що інше, окрім компонентів, задіяних виключно за допомогою функції прискорення). З іншого боку, неортогональна конструкція може впливати на рульове керування її гальмуванням (наприклад, електронний контроль стійкості) або швидкість зміни швидкості її підвіски [1]. Отже, це використання походить від використання ортогональних у математиці: Можна проектувати вектор на підпростір, проектуючи його на кожного члена набору базових векторів окремо і додаючи проекції, якщо і лише якщо базові вектори є взаємно ортогональні.

Кажуть, що набір інструкцій є ортогональним, якщо будь-яка інструкція може використовувати будь-який регістр у будь-якому режимі адреси. Ця термінологія є результатом розгляду інструкції як вектора, компонентами якого є поля інструкцій. Одне поле ідентифікує регістри, якими слід керувати, а інше вказує режим адресації. Ортогональний набір інструкцій однозначно кодує всі комбінації регістрів та режимів адреси.

Якщо говорити найпростіше, дві речі є ортогональними, якщо зміна однієї не впливає на іншу.


1

В якості прикладів відсутності ортогональності в мові високого рівня розглянемо наступні правила та винятки в C. Хоча C має два типи структурованих типів даних, масиви та записи (структури), записи можна повернути з функцій, але масиви не можуть. Членом структури може бути будь-який тип даних, крім пустоти або структури одного типу. Елементом масиву може бути будь-який тип даних, крім void або функції. Параметри передаються за значенням, за винятком випадків, коли вони є масивами; в цьому випадку вони, по суті, передаються посиланням (оскільки поява імені масиву без підпису в програмі C інтерпретується як адреса першого елемента масиву)


0

У мовах програмування функція мови програмування називається ортогональною, якщо вона обмежена без обмежень (або винятків). Наприклад, у Pascal функції не можуть повертати структуровані типи. Це обмеження для повернення значень функції. Тому ми вважаємо це неортогональною ознакою. ;)


0

Ортогональність програмування:

Ортогональність - важлива концепція, яка стосується того, як порівняно невелика кількість компонентів може бути об'єднана порівняно невеликою кількістю способів отримати бажані результати. Це пов’язано з простотою; чим більш ортогональний дизайн, тим менше винятків. Це полегшує навчання, читання та запис програм мовою програмування. Значення ортогональної ознаки не залежить від контексту; ключовими параметрами є симетрія та послідовність (наприклад, покажчик - це ортогональне поняття).

з Вікіпедії


0

Ортогональність мови програмування означає, що порівняно невеликий набір примітивних конструкцій може бути об'єднаний порівняно невеликою кількістю способів побудови структури управління та даних мови. Крім того, кожна можлива комбінація примітивів є законною та значимою. Наприклад, розглянемо типи даних. Припустимо, мова має чотири примітивні типи даних (ціле число, плаваючий, подвійний та символьний) та два оператори типу (масив та покажчик). Якщо оператори двох типів можуть бути застосовані до себе та чотирьох примітивних типів даних, можна визначити велику кількість структур даних. Значення функції ортогональної мови не залежить від контексту її появи в програмі. (слово ортогональне походить від математичного поняття ортогональних векторів, які не залежать один від одного. ) Ортогональність випливає із симетрії взаємовідносин між первісними. Відсутність ортогональності призводить до винятків із правил мови. Наприклад, у мові програмування, яка підтримує покажчики, слід мати можливість визначити покажчик, який вказує на будь-який конкретний тип, визначений у мові. Однак, якщо покажчики не дозволяють вказувати на масиви, багато потенційно корисних визначених користувачем структур даних неможливо визначити. Ми можемо проілюструвати використання ортогональності як концепції дизайну, порівнюючи один аспект мов складання комп'ютерів IBM mainframe та серії міні-комп'ютерів 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 важче засвоїти через обмеження та додаткову інструкцію. Ортогональність тісно пов’язана з простотою: чим більше ортогональне оформлення мови, тим менше винятків, яких вимагають мовні правила. Менше винятків означає більш високий ступінь регулярності в дизайні, що робить мову легшою для вивчення, читання та розуміння. Кожен, хто засвоїв значну частину англійської мови, може засвідчити складність вивчення багатьох її винятків з правил (наприклад, i до e, крім після c).


0

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

Example : non-orthogonality

ПАСКАЛ: функції не можуть повертати структуровані типи. Функціональні мови є високо ортогональними.


0

Основна ідея ортогональності полягає в тому, що речі, які не пов'язані концептуально, не повинні бути пов’язані між собою у системі. Частини архітектури, які насправді не мають нічого спільного з іншими, такі як база даних та інтерфейс користувача, не повинні змінюватися разом. Зміна на одну не повинна спричиняти змін до іншої.


-5

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

Ортогональність може бути і щодо матриць,

Matrix *(transpose of matrix)= identity matrix. 

Клацніть посилання нижче, щоб переглянути відео з YouTube на "Ортогональність".
https://youtu.be/tNekLaxnfW8


Очевидно, питання стосується програмування.
аггсол
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.