Страницы

Поиск по вопросам

четверг, 28 ноября 2019 г.

Что такое ортогональность?

#проектирование #терминология


Я заметил что термин ортогональность часто используют неправильно и не нашел в рунете
источника, хорошо объясняющего что это такое.

В ответе я хочу:


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

    


Ответы

Ответ 1



На мой взгляд лучше всего об этом написано в книге «Программист-Прагматик. Путь от подмастерья к мастеру. Э. Хант, Д. Тома». Вот цитата из книги: Этот термин был введен в информатике для обозначения некой разновидности независимости или несвязанности. Два или более объекта ортогональны, если изменения, вносимые в один из них, не влияют на любой другой. В грамотно спроектированной системе программа базы данных будет ортогональной к интерфейсу пользователя: вы можете менять интерфейс пользователя без воздействия на базу данных и менять местами базы данных, не меняя интерфейса.

Ответ 2



Ортогональность - это математический термин, такой же как сложение, умножение или вектор. От того, что слово "vector" используется в программировании, оно не приобретает какие-то новые смыслы, и не становится программистским термином. То же самое и с ортогональностью. Определение ортогональности звучит следующим образом: Если скалярное произведение двух элементов пространства равно нулю, то они называются ортогональными друг другу. (Источник - википедия, или любой учебник по математике). В случае векторов, они оказываются перпендикулярными друг другу, отсюда и происхождение слова "ортогональность" - греческое "прямой угол". Из этого следует, что проекция одного вектора на другой равна нулю (т.к. косинус угла равен нулю), т.е. в системе координат одного вектора, другой равен нулю. Когда говорят о каких-то ортогональных сущностях - это означает что эти сущности никак не связаны друг с другом. Т.е. как и в случае с проекцией векторов, одна сущность не оказывает ни какого эффекта на другую. Что касается применимости слова "ортогональность" в коде - то это говорит лишь о не связанности двух систем. Точно также можно было бы говорить о "параллельности" (не пересекаются), или об отсутствии корреляции. Т.е. слово "ортогонален" просто является синонимом "не связан". Можно сказать что "в С++ алгоритмы ортогональны контейнерам", т.к. у них не никакой прямой связи. Также можно сказать что "логирование должно быть ортогонально UI". В любом случае - это просто использование умного слова "ортогональность", вместо обычного словосочетания "не связанность". Смысл фразы при этом совершенно не меняется.

Ответ 3



Определение понятия: Ортогональность на языке программирования означает, что относительно маленький набор примитивных конструкций может быть объединен в относительно небольшое количество способов построить контроль и структуры данных языка. Термин наиболее часто используется относительно наборов команд собрания как ортогональный набор команд. Подробнее можно прочитать тут На мой взгляд лучше всего объясняет этот термин этот пример: Неортогональная система: Предположим, вы находитесь в экскурсионном вертолете, совершающем полет над Гранд-Каньоном, когда пилот, который совершил ошибку, наевшись рыбы за обедом внезапно вскрикивает и теряет сознание. По счастливой случайности это происходит, когда вы парите на высоте 30 метров. Вы догадываетесь, что рычаг управления общим шагом несущего винта обеспечивает подъем машины, так что, если его слегка опустить, вертолет начнет плавно снижаться. Однако когда вы пытаетесь сделать это, то осознаете, что жизнь — не такая уж простая штука. Вертолет клюет носом, и вас начинает вращать по спирали влево. Внезапно вы понимаете, что управляете системой, в которой каждое воздействие имеет побочные эффекты. При нажатии на левый рычаг вам придется сделать уравновешивающее движение назад правым рычагом и нажать на правую педаль. Но при этом каждое из этих действий вновь повлияет на все органы управления. Неожиданно вам приходится жонглировать невероятно сложной системой, в которой любое изменение влияет на все остальные управляющие воздействия. Вы испытываете феноменальную нагрузку: ваши руки и ноги находятся в постоянном движении, пытаясь уравновесить все взаимодействующие силы. Органы управления вертолетом определенно не являются ортогональными. Взято отсюда Если в двух слова и на пальцах, то на мой взгляд этот термин говорит о слабой свзянности в проектируемой архитектуре.

Комментариев нет:

Отправить комментарий