문제

"직교성"은 프로그래밍 언어에 대해 이야기 할 때 무엇을 의미합니까?

직교성의 몇 가지 예는 무엇입니까?

도움이 되었습니까?

해결책

직교성 "A를 변경하는 것은 B를 변경하지 않는다"는 것을 의미하는 속성입니다. 직교 시스템의 예는 스테이션을 변경하면 볼륨을 바꾸지 않고 그 반대의 라디오가 될 것입니다.

비 직교 시스템은 속도를 변경하면 방향을 바꿀 수있는 헬리콥터와 같습니다.

프로그래밍 언어에서 이것은 명령을 실행할 때 그 지침 외에는 아무것도 발생하지 않음을 의미합니다 (디버깅에 매우 중요합니다).

언급 할 때도 구체적인 의미가 있습니다 지침 세트.

다른 팁

Eric S. Raymond의 "유닉스 프로그래밍의 예술"

직교성은 복잡한 디자인을 컴팩트하게 만드는 데 도움이되는 가장 중요한 특성 중 하나입니다. 순전히 직교 설계에서, 운영에는 부작용이 없습니다. 각 조치 (API 호출, 매크로 호출 또는 언어 조작 등)는 다른 사람에게 영향을 미치지 않고 한 가지만 변경합니다. 제어중인 시스템의 각 속성을 변경하는 방법은 하나이며 유일한 방법이 있습니다.

다른 부분에 보이지 않는 영향을받지 않고 한 가지를 바꿀 수 있다고 생각하십시오.

광범위하게, 직교성은 서로에게 최소한의 영향을 미치도록 두 가지 사이의 관계입니다.

이 용어는 수학에서 나옵니다. 여기서 두 벡터가 직각으로 교차하면 직교입니다.

일반적인 2 차원 직교 공간 (x/y 축이있는 일반적인 그리드)에 대해 생각해보십시오. 두 줄을 플로팅하십시오 : x = 1 및 y = 1. 두 줄은 직교입니다. x를 변경하여 x = 1을 변경할 수 있으며 이는 다른 줄에 영향을 미치지 않으며 그 반대도 마찬가지입니다.

소프트웨어 에서이 용어는 서로 독립적으로 작동하는 시스템의 두 부분에 대해 이야기하는 상황에서 적절하게 사용할 수 있습니다.

구조 세트가있는 경우. 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) 등으로 작성하는 데 도움이됩니다. 모두 혼합되고 마음대로 일치 할 수 있습니다.

~에서 위키 백과:

컴퓨터 과학

직교성은 복잡한 설계의 타당성과 소형성을 촉진하는 시스템 설계 속성입니다. 직교성은 시스템의 구성 요소에 의해 생성 된 기술 효과를 수정하여 부작용을 시스템의 다른 구성 요소로 전파하지 않도록 보장합니다. 구성 요소로 구성된 시스템의 출현 동작은 통합이 불량한 부작용, 즉 모듈 및 인터페이스의 비 직교 설계로 인한 부작용이 아니라 논리의 공식적인 정의에 의해 엄격하게 제어되어야합니다. 직교성은 부작용을 유발하거나 의존하지 않는 설계를 쉽게 확인하는 것이 더 쉽기 때문에 테스트 및 개발 시간을 줄입니다.

예를 들어, 자동차에는 직교 구성 요소와 컨트롤이 있습니다 (예 : 차량을 가속하는 것은 다른 것에 영향을 미치지는 않지만 가속 기능과 독점적으로 관련된 구성 요소). 반면에, 비골법 디자인은 스티어링에 제동 (예 : 전자 안정성 제어) 또는 속도가 서스펜션에 영향을 줄 수 있습니다.1 결과적으로,이 사용법은 수학에서 직교의 사용으로부터 도출 된 것으로 보인다. 하나는 기본 벡터가 별도로 기본 벡터 세트의 각 구성원에 투사하고 기본 벡터가있는 경우에만 투영을 추가함으로써 벡터를 서브 스페이스에 투사 할 수있다. 상호 직교.

명령어 세트는 지침이 모든 주소 지정 모드에서 레지스터를 사용할 수있는 경우 직교라고합니다. 이 용어는 성분이 지침 필드 인 벡터로서 명령을 고려한 결과입니다. 한 필드는 작동 할 레지스터를 식별하고 다른 필드는 주소 지정 모드를 지정합니다. 직교 명령 세트는 독특하게 레지스터와 주소 지정 모드의 모든 조합을 인코딩합니다.

에서 위키 백과:

직교성은 복잡한 설계의 타당성과 소형성을 촉진하는 시스템 설계 속성입니다. 직교성은 시스템의 구성 요소에 의해 생성 된 기술 효과를 수정하여 부작용을 시스템의 다른 구성 요소로 전파하지 않도록 보장합니다. 구성 요소로 구성된 시스템의 출현 동작은 통합이 불량한 부작용, 즉 모듈 및 인터페이스의 비 직교 설계로 인한 부작용이 아니라 논리의 공식적인 정의에 의해 엄격하게 제어되어야합니다. 직교성은 부작용을 유발하거나 의존하지 않는 설계를 쉽게 확인하는 것이 더 쉽기 때문에 테스트 및 개발 시간을 줄입니다.

예를 들어, 자동차에는 직교 구성 요소와 컨트롤이 있습니다 (예 : 차량을 가속하는 것은 다른 것에 영향을 미치지는 않지만 가속 기능과 독점적으로 관련된 구성 요소). 반면에, 비골법 디자인은 스티어링에 제동 (예 : 전자 안정성 제어) 또는 속도가 서스펜션에 영향을 줄 수 있습니다. [1] 결과적으로,이 사용법은 수학에서 직교의 사용으로부터 도출 된 것으로 보인다. 하나는 기본 벡터가 별도로 기본 벡터 세트의 각 구성원에 투사하고 기본 벡터가있는 경우에만 투영을 추가함으로써 벡터를 서브 스페이스에 투사 할 수있다. 상호 직교.

명령어 세트는 지침이 모든 주소 지정 모드에서 레지스터를 사용할 수있는 경우 직교라고합니다. 이 용어는 성분이 지침 필드 인 벡터로서 명령을 고려한 결과입니다. 한 필드는 작동 할 레지스터를 식별하고 다른 필드는 주소 지정 모드를 지정합니다. 직교 명령 세트는 독특하게 레지스터와 주소 지정 모드의 모든 조합을 인코딩합니다.

가능한 가장 간단한 용어로 말하면, 하나를 변경하면 다른 하나에 영향을 미치지 않는다면 두 가지가 직교입니다.

프로그래밍 언어에 대한 프로젝트 결정에 대해 이야기하는 동안 직교는 과거에 본 것에 대해 그 언어에 대한 다른 것들을 예측하기가 얼마나 쉬운 지 볼 수 있습니다.

예를 들어, 하나의 언어로 다음을 가질 수 있습니다.

str.split

문자열을 분할하기 위해

렌 (str)

Lenght를 얻기 위해.

더 직교적 인 언어에서는 항상 str.x 또는 x (str)를 사용합니다.

물건을 복제하거나 다른 일을 할 때 사용 여부를 알 수 있습니다.

클론 (OBJ)

또는

obj.clone

그것은 프로그래밍 언어의 주요 요점 중 하나입니다. 그것은 당신이 매뉴얼과 상담하거나 누군가에게 물어 보는 것을 피합니다.

Wikipedia 기사는 복잡한 디자인 또는 저급 언어에 대한 직교성에 대해 더 많이 이야기합니다. 위에서 언급 한 누군가가 의견을 제시했듯이, Sebesta 책은 정형성에 대해 깨끗하게 이야기합니다.

한 문장 만 사용한다면, 알려지지 않은 부품이 당신이 본 것에 기초하여 예상대로 작용할 때 프로그래밍 언어가 직교라고 말할 것입니다. 또는 ... 놀라움이 없습니다.

;)

프로그래밍의 직교성 :

직교성은 상대적으로 적은 수의 구성 요소를 원하는 결과를 얻기 위해 비교적 적은 수의 방법으로 어떻게 결합 할 수 있는지를 다루는 중요한 개념입니다. 단순성과 관련이 있습니다. 디자인이 직교가 많을수록 예외가 적습니다. 이를 통해 프로그래밍 언어로 프로그램을 쉽게 배우고 읽고 읽을 수 있습니다. 직교 특징의 의미는 문맥과 무관합니다. 주요 매개 변수는 대칭과 일관성입니다 (예 : 포인터는 직교 개념입니다).

~에서 위키 백과

프로그래밍 언어에서는 프로그래밍 언어 기능이 제한이 없거나 예외가없는 경우 직교라고합니다. 예를 들어, 파스칼 함수에서는 구조화 된 유형을 반환 할 수 없습니다. 이것은 함수에서 값을 반환하는 것에 대한 제한입니다. 그러므로 우리는 비 직교 특징으로 간주됩니다. ;)

높은 수준의 언어에서 직교성 부족의 예로, C의 다음 규칙과 예외를 고려하십시오. C에는 두 가지 종류의 구조화 된 데이터 유형, 어레이 및 레코드 (structs)가 있지만 레코드는 함수에서 반환 할 수 있지만 배열은 할 수 없습니다. 구조의 구성원은 무효 또는 동일한 유형의 구조를 제외한 모든 데이터 유형 일 수 있습니다. 배열 요소는 무효 또는 함수를 제외한 모든 데이터 유형 일 수 있습니다. 매개 변수는 배열이 아닌 한 값으로 전달됩니다.이 경우 실제로 참조로 전달됩니다 (C 프로그램에 첨자가없는 배열 이름의 모양은 배열의 첫 번째 요소의 주소로 해석되기 때문에).

직교성은 언어가 프로그램을 표현하는 데 필요한만큼 결합 할 수있는 독립적 인 원시 구성 세트로 구성되는 정도를 의미합니다. 결합 방법에 대한 제한이없는 경우 기능이 직교합니다.

Example : non-orthogonality

PASCAL : 기능은 구조화 된 유형을 반환 할 수 없습니다. 기능적 언어는 매우 직교입니다.

직교성의 기본 아이디어는 개념적으로 관련이없는 것들이 시스템과 관련되어서는 안된다는 것입니다. 데이터베이스 및 UI와 같이 다른 상대와 관련이없는 아키텍처의 일부는 함께 변경할 필요가 없습니다. 한 사람으로의 변경이 다른 사람으로 변경되지 않아야합니다.

프로그래밍 언어의 직교성은 비교적 작은 원시 구성 세트가 언어의 제어 및 데이터 구조를 구축하기 위해 비교적 적은 수의 방법으로 결합 될 수 있음을 의미합니다. 또한, 프리미티브의 모든 시설 조합은 합법적이고 의미가 있습니다. 예를 들어, 데이터 유형을 고려하십시오. 언어에 4 개의 원시 데이터 유형 (정수, 플로트, 이중 및 문자)과 2 개의 유형 연산자 (배열 및 포인터)가 있다고 가정합니다. 두 유형 연산자와 4 개의 원시 데이터 유형에 적용 할 수있는 경우 많은 수의 데이터 구조를 정의 할 수 있습니다. 직교 언어 기능의 의미는 프로그램에서의 외관의 맥락과 무관합니다. (직교라는 단어는 서로 독립적 인 직교 벡터의 수학적 개념에서 비롯됩니다.) 직교는 원시 간의 관계의 대칭에서 비롯됩니다. 직교성이 부족하면 언어의 규칙에 대한 예외가 생깁니다. 예를 들어, 포인터를 지원하는 프로그래밍 언어에서는 언어로 정의 된 특정 유형을 가리키는 포인터를 정의 할 수 있어야합니다. 그러나 포인터가 배열을 가리킬 수없는 경우 잠재적으로 유용한 사용자 정의 데이터 구조를 정의 할 수 없습니다. 우리는 IBM 메인 프레임 컴퓨터의 어셈블리 언어와 VAX 시리즈의 미니 컴퓨터 시리즈의 한 측면을 비교하여 디자인 개념으로서 정형 성의 사용을 설명 할 수 있습니다. 우리는 단일 간단한 상황을 고려합니다. 메모리 나 레지스터에 상주하는 두 개의 32 비트 정수 값을 추가하고 두 값 중 하나를 합으로 바꾸는 것입니다. IBM 메인 프레임에는이 목적에 대한 두 가지 지침이 있으며, 이는 양식이 있습니다.

A Reg1, memory_cell
AR Reg1, Reg2

여기서 reg1 및 reg2가 레지스터를 나타냅니다. 이것들의 의미는입니다

Reg1 ← contents(Reg1) + contents(memory_cell)
Reg1 ← contents(Reg1) + contents(Reg2)

32 비트 정수 값에 대한 VAX 추가 지침은 다음과 같습니다

ADDL operand_1, operand_2

누구의 의미론입니다

operand_2 ← contents(operand_1) + contents(operand_2)

이 경우, 피연산자는 레지스터 또는 메모리 셀 일 수 있습니다. VAX 명령 설계는 단일 명령어가 레지스터 또는 메모리 셀을 피연산자로 사용할 수 있다는 점에서 직교입니다. 피연산자를 지정하는 두 가지 방법이 있으며, 가능한 모든 방법으로 결합 할 수 있습니다. IBM 디자인은 직교가 아닙니다. 4 개의 피연산자 조합 중 2 개만 합법적이며 두 개는 A와 AR의 다른 지침이 필요합니다. IBM 디자인은 더 제한되어 있으므로 쓰기가 적습니다. 예를 들어, 두 값을 추가하고 메모리 위치에 합계를 저장할 수 없습니다. 또한 IBM 디자인은 제한과 추가 지침으로 인해 배우기가 더 어렵습니다. 직교성은 단순성과 밀접한 관련이 있습니다. 언어 설계가 더 직교할수록 언어 규칙에 필요한 예외가 적습니다. 예외가 적다는 것은 디자인의 규칙 성이 높은 것을 의미하므로 언어를 쉽게 배우고 읽고 이해할 수 있습니다. 영어의 눈에 띄는 부분을 배운 사람은 많은 규칙 예외를 배우는 데 어려움이 있음을 증언 할 수 있습니다 (예 : C 이후 E 이전).

매트릭스의 직교 성 점검 :

직교성은 또한 매트릭스와 관련이있을 수 있습니다.

Matrix *(transpose of matrix)= identity matrix. 

아래 링크를 클릭하여 직교성에 대한 YouTube 비디오를보십시오.
https://youtu.be/tneklaxnfw8

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top