什么是“正交性”?

谈论编程语言时,“正交性”是什么意思?

什么是正交性的一些例子?

正交性是指“改变A不改变B”的属性。 一个正交系统的例子是一个收音机,改变电台不会改变音量,反之亦然。

一个非正交系统就像直升机,改变速度可以改变方向。

在编程语言中,这意味着当你执行一条指令时,除了那条指令外,什么都没有发生(debugging非常重要)。

提到指令集时也有一个特定的含义。

从Eric S. Raymond的“UNIX编程艺术”

正交性是最重要的属性之一,可以帮助使复杂的devise变得紧凑。 在纯粹的正交devise中,操作没有副作用; 每个操作(无论是API调用,macros调用还是语言操作)都会改变一件事而不会影响其他事件。 只有一种方法可以改变你所控制的任何系统的每个属性。

想想它能够改变一件事而不会对另一部分产生不可见的影响。

广义而言,正交性是两个事物之间的关系,它们彼此间的影响最小。

这个术语来自math,两个向量如果以直angular相交,则是正交的。

想想一个典型的二维笛卡尔空间(你是典型的X / Y轴网格)。 绘制两条线:x = 1和y = 1。 这两条线是正交的。 您可以通过更改x来更改x = 1,这对另一行不起作用,反之亦然。

在软件中,这个术语可以适用于你所说的系统的两个部分彼此独立的情况。

如果你有一套结构。 如果允许程序员自由地混合这些结构,则称语言是正交的 。 例如,在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. 

大部分答案都很啰嗦,甚至模糊不清。 重点是:如果一个工具是正交的,那么可以添加,replace或删除工具,以利用更好的工具,而不用把所有的东西搞砸。

这是木匠用锤子和锯子,可以用来锤击或锯切,或有一些新的锤子/锯组合,这是devise用来锯木,然后锤在一起的区别。 要么锯切,然后一起锤击,但如果你得到一些任务,需要锯,而不是锤打,那么只有正交工具将工作。 同样,如果您需要拧紧而不是敲打锤子,如果锤子与您的锤子正交(没有混淆),您将不需要扔掉锯子。

经典的例子是unix命令行工具:你有一个获取磁盘内容的工具(dd),另一个用于从文件(grep)过滤行,另一个用于将这些行写入文件(cat)等。都可以随意混搭。

维基百科 :

正交性是一种系统devise性质,有助于复杂devise的可行性和紧凑性。 正交性保证修改系统组件所产生的技术效果既不会对系统的其他组件产生也不会传播副作用。 一个由组件组成的系统的紧急行为应该严格按照其逻辑的forms化定义进行控制,而不是由于整合不好引起的副作用,即模块和接口的非正交devise。 正交性减less了testing和开发时间,因为validationdevise既不会造成副作用也不依赖于它们。

例如,汽车具有正交的部件和控制(例如,加速车辆不会影响除了与加速function有关的部件之外的其他任何部件)。 另一方面,非正交devise可能会对其制动(例如电子稳定性控制)产生转向影响,或者其速度会对其悬架产生影响[1]。 因此,这种用法被认为是从math中的正交使用中得出的:可以通过将vector分别投影到一组基vector的每个成员上并将其投影到子空间上,并且当且仅当基vector是相互正交。

如果任何指令可以在任何寻址模式下使用任何寄存器,则指令集被认为是正交的。 这个术语是将一条指令看作一个向量,其分量是指令字段。 一个字段标识要操作的寄存器,另一个字段指定寻址模式。 正交指令集对寄存器和寻址模式的所有组合进行唯一编码。

尽可能地用最简单的话来说,如果改变一个对另一个没有影响,那么两件事是正交的。

来自wikipedia :

计算机科学

正交性是一种系统devise性质,有助于复杂devise的可行性和紧凑性。 正交性保证修改系统组件所产生的技术效果既不会对系统的其他组件产生也不会传播副作用。 一个由组件组成的系统的紧急行为应该严格按照其逻辑的forms化定义进行控制,而不是由于整合不好引起的副作用,即模块和接口的非正交devise。 正交性减less了testing和开发时间,因为validation既不会造成副作用也不依赖于他们的devise更容易。

例如,汽车具有正交的部件和控制(例如,加速车辆不会影响除了与加速function有关的部件以外的其他任何部件)。 另一方面,非正交devise可能会对其制动(例如电子稳定性控制)产生转向影响,或者其速度会对悬架造成影响。 1因此,这种用法被认为是从math中的正交使用中得出的:可以通过将vector分别投影到一组基vector的每个成员上,并将投影相加,当且仅当基vector是相互正交的。

如果任何指令可以在任何寻址模式下使用任何寄存器,则指令集被认为是正交的。 这个术语是将一条指令看作一个向量,其分量是指令字段。 一个字段标识要操作的寄存器,另一个字段指定寻址模式。 正交指令集对寄存器和寻址模式的所有组合进行唯一编码。

在谈论关于编程语言的项目决策的时候,正交性可能被看作是你预测关于那种语言的其他事情是多么的容易。

例如,用一种语言你可以有:

str.split

分割一个string和

LEN(STR)

获得长度。

在更正交的语言上,您总是会使用str.x或x(str)。

当你克隆一个对象或做任何事情时,你会知道是否使用

克隆(OBJ)

要么

obj.clone

这是编程语言正交的一个要点。 这样可以避免您查阅手册或询问某人。

维基百科文章更多地讨论复杂devise或低级语言的正交性问题。 正如有人在评论中提到的那样,塞贝斯特的着作清楚地谈论了正交性。

如果我只用一个句子,我会说,一个编程语言是正交的,当它的未知部分按照你所看到的那样发挥作用时。 或者…没有惊喜。

;)

第一次听到这个词,但维基百科似乎有一些东西:

http://en.wikipedia.org/wiki/Orthogonality#Computer_science

在编程语言中,如果编程语言的特征没有限制(或例外),则称其为正交。 例如,在Pascal函数中不能返回结构化types。 这是从函数返回值的限制。 所以我们认为它是一个非正交的特征。 ;)

编程中的正交性:

正交性是一个重要的概念,解决了如何以相对较less的方式组合相对less量的组件以获得期望的结果。 它与简单相关; devise越正交,例外越less。 这使得用编程语言学习,读写程序变得容易。 正交特征的含义与上下文无关; 关键参数是对称性和一致性(例如,指针是一个正交的概念)。

从维基百科

作为高级语言缺乏正交性的例子,在C中考虑以下规则和例外。虽然C有两种结构化数据types,数组和logging(结构体),logging可以从函数返回,但数组不能。 结构的成员可以是任何数据types,除了void或相同types的结构。 数组元素可以是除void或函数以外的任何数据types。 参数是通过值传递的,除非它们是数组,在这种情况下,它们实际上是通过引用传递的(因为在C程序中没有下标的数组名称的外观被解释为数组的第一个元素的地址)

正交性意味着语言在多大程度上由一组独立的基本构造组成,这些基本构造可以根据需要组合起来expression一个程序。 如果没有关于如何组合的function限制,function是正交的

 Example : non-orthogonality 

PASCAL:函数不能返回结构化types。 function语言是高度正交的。

编程语言中的正交性意味着相对较小的一组基本构造可以以相对较less的方式组合来构build该语言的控制和数据结构。 而且,基元的每种可能的组合都是合法的和有意义的。 例如,考虑数据types。 假设一种语言有四种基本数据types(整数,浮点数,双精度和字符)和两个types运算符(数组和指针)。 如果两种types的操作符可以应用于自己和四种基本数据types,则可以定义大量的数据结构。 正交语言特征的含义与其在程序中出现的上下文无关。 (正交这个词来自正交vector的math概念,它们是相互独立的。)正交性来自primefaces之间关系的对称性。 缺乏正交性会导致语言规则的例外。 例如,在支持指针的编程语言中,应该可以定义一个指针指向语言中定义的任何特定types。 但是,如果不允许指针指向数组,则不能定义许多潜在有用的用户定义的数据结构。 我们可以通过比较IBM大型计算机和VAX系列小型机的汇编语言的一个方面来说明正交性作为devise概念的用法。 我们考虑一个简单的情况:在存储器或寄存器中添加两个32位整数值,并用总和replace其中一个值。 IBM大型机有两个用于此目的的说明,它们具有这些forms

 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指令devise是正交的,因为单个指令可以使用寄存器或存储单元作为操作数。 有两种方法可以指定操作数,可以以各种可能的方式进行组合。 IBMdevise不是正交的。 四个操作数组合中只有两个可能是合法的,两个需要不同的指令A和AR。 IBMdevise受到更多限制,因此不易写入。 例如,您不能添加两个值并将总和存储在内存位置中。 而且,由于限制和额外的指令,IBMdevise更难以学习。 正交性与简单性密切相关:语言devise越正交,语言规则要求的例外越less。 更less的例外意味着devise的更高程度的规律性,这使得语言更容易学习,阅读和理解。 任何学过英语重要部分的人都可以certificate学习其许多规则例外的困难(例如,我之前,除了c之后)。

检查matrix的正交性:

正交性也可以与matrix有关,

 Matrix *(transpose of matrix)= identity matrix. 

点击下面的链接查看正交的YouTubevideo。
https://youtu.be/tNekLaxnfW8