-
20-09-2019 - |
题
什么是"正交性"意味着在谈到编程语言?
什么是一些例子正交?
其他提示
从埃里克雷蒙的 “UNIX编程的艺术”
正交性,可以帮助甚至复杂的设计紧凑的最重要特性之一。在纯粹的正交设计,操作没有副作用;每个动作(无论是API调用,宏调用,或语言操作)改变的只有一件事,而不会影响其他人。有一个且只有一个办法改变任何系统正在控制的每个属性。
认为它具有能够改变一两件事,而对另一部分一个看不见的影响。
概括地说,正交性是两件事情,使得它们具有相互影响最小之间的关系。
这个术语来自数学,其中两个载体是如果它们以直角相交的正交。
想一想一个典型的2维笛卡儿空间(你用X / Y轴典型网格)。情节两行:X = 1和y = 1。这两条线是正交的。可以通过改变x改变X = 1,这将会对其他行没有影响,反之亦然。
在软件中,术语可以适当地在的情况下使用,你正在谈论两部分,它们独立地表现彼此的系统的
如果你有一组构建的。甲的langauge据说是正交如果它允许程序员这些构建体自由地混合。例如,在C则不能返回一个数组(静态数组),C被认为是在这种情况下unorthognal:
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的)过滤线,另一个用于写入那些线到一个文件(猫),等,这些都可以被混合并随意匹配。
从 维基百科:
计算机科学
正交性的系统设计属性促进可行性和紧凑性的复杂的设计。正交保证修改的的技术产生的效果的一个组成部分的系统既没有创建的,也不是传播副作用的其他组成部分的系统。紧急行为的一个系统组成的组成应该是严格控制,通过正式的定义的逻辑,而不是由副作用导致穷人的集成,即非正交设计的模块和接口。正交降低测试和开发时间,因为很容易验证的设计,不一定造成的副作用,也不取决于他们。
例如,一辆汽车有正交部件和控制(例如加速的车辆不影响任何东西,但所涉及的组件的专用加速功能)。另一方面,一个非正交设计可能会有其转向的影响,其制动(例如电子稳定控),或其速度调整其暂停。1 因此,这个使用情况看来也是源自使用的正交在数学:一个可能的项目的一个向量上的一个子空间的通过突出它到每个成员的一组基础上向量分别增加的预测,如果并且只有如果依据载体相互正交。
指示设置的说是正交如果任何指示可以使用任何登记册中的任何解决方式。这个术语的结果考虑的指令作为一种矢量,其组件是该指令的领域。一领域的标识登记册可以操作的,而另一个指定的处理模式。正交指定独特的编码的所有组合的登记和处理模式。
从维基百科:
正交是系统设计 财产促进可行性和 复杂的设计紧凑。 正交保证 修改技术效果 由系统的部件制造 既不产生也不传播侧 效果的其它组分 系统。的紧急行为 系统组成部件的应 可以通过正规严格控制 它的逻辑,而不是定义由 副作用差所得 一体化,即非正交 模块和接口的设计。 正交减少测试和 开发时间,因为它更容易 验证的设计,无论是事业 副作用也不取决于它们。
例如,汽车具有正交 部件和控制(例如 加速车辆不 影响任何东西,但在 涉及的组件只与 加速功能)。在 另一方面,非正交的设计 可能有它的转向影响其 制动(例如电子稳定 控制),或它的速度调整其 悬浮液。[1]因此,这 用法都被看作是从派生 在数学使用正交的:一 可以投射一个矢量到子空间 通过将其投影到的每个成员 基向量组和单独 加入突起当且仅当 基本向量是相互 正交的。
指令集被认为是 正交如果任何指令可以使用 在任何寻址模式任何寄存器。 这个术语从结果 考虑作为矢量的指令 其组成成分的指令 领域。一个字段标识 寄存器要操作,并 另一个指定寻址模式。 正交指令集唯一 编码寄存器的所有组合 和寻址模式。
要把它在可能的最简单的术语,有两件事是正交如果改变一个具有在另一个之上没有影响。
在谈到对编程语言的项目决策,正交性可以被看作是多么容易让你预测有关的语言为你在过去所看到的其他东西。
例如,在一种语言可以有:
str.split
用于分离的字符串和
LEN(STR)
用于获取lenght。
在一个语言多个正交,你总是使用str.x或x(STR)。
当你将克隆对象或做别的事,你会知道是否使用
克隆(OBJ)
或
obj.clone
这是在编程语言正交的要点之一。这避免了您咨询手册或询问别人。
在维基百科文章谈到更多关于正交于复杂的设计或低级语言。 正如有人以上建议在评论中,Sebesta书干净谈到正交性。
如果我只用一句话,我会说一门编程语言是正交时,其未知部分充当根据你所见到的预期。 还是......没有惊喜。
)
<强>正交于编程:强>
正交是一个重要的概念,解决如何部件的相对小的数目可以在一个相对小数目的方式来获得所期望的结果进行组合。它是用简单相关联;更正交设计,较少的例外。这使得它更容易学习,读,写的编程语言程序。正交特征的含义独立于环境;关键参数是对称和一致性(例如,指针是正交的概念)。
这维基百科
在编程语言中的程序设计语言功能说,如果它是没有任何限制(或例外)界定为正交。 例如,在Pascal函数不能返回结构类型。这是从函数返回值的限制。因此,我们就被视为非正交特性。 ;)
由于在一个高级语言缺少正交性的例子,考虑在C.以下规则和例外虽然C具有2种结构化数据类型,数组和记录(结构)的,记录可以从函数返回,但数组不能。一个结构的构件可以是除空隙的任何数据类型或相同类型的结构。数组元素可以是除空隙或功能的任何数据类型。参数由值来传递,除非它们是阵列,在这种情况下它们被,实际上,通过引用传递(因为数组名,而不在C程序标外观被解释为数组的第一元素的地址)
正交指由一组独立的原始构建体可以组合根据需要来表达的程序,以哪个语言的程度。 特征是正交的,如果有关于它们如何可以被组合没有限制
Example : non-orthogonality
PASCAL:功能不能返回结构类型。 功能的语言是高度正交。
正交的基本思想是,未在概念相关的事情不应该在系统有关。该架构的部分真的什么都没有做与其他诸如数据库和用户界面,不应该需要改变在一起。一个改变应该不会造成一个换向等。
正交的编程语言意味着相对小的一组 原始构建体可以在相对小的数量的方式被组合 构建语言的控制和数据结构。此外,每个POS- 原语的锡布尔赫丁组合是合法的和有意义的。例如,考虑数据类型。假设一个语言具有四个原始数据类型(整数,浮点数, 双,和字符)和两个型操作符(阵列和指针)。如果两个 型算可以应用于本身和四个原始数据类型, 可以定义大量的数据结构。 正交语言特性的含义是独立的 其在程序外观上下文。 (字正交来自 正交向量,其分别独立的数学概念 从关系中primi-对称等。)正交如下 表3-6。缺乏正交性导致例外语言的规则。 例如,在支持指针的编程语言,它应该是 可以定义一个指针指向该语言定义的任何特定的类型。 但是,如果指针是不允许指向阵列,许多潜在有用的用户定义的数据结构不能被定义。 我们可以通过compar-说明使用正交性作为设计理念 荷兰国际集团的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的设计 不正交。只有四分之二的操作数的组合可能性 法律,这两个需要不同的指令,A和AR。 IBM的设计 是更受限制,并且因此较少写。例如,你可以不加 两个值和总和存储在存储器位置。此外,IBM 设计是比较难学,因为限制和附加指令的。 正交性是密切相关的简单:越正交 语言越少异常的语言规则要求的设计。更少 例外情况指的是在设计一个更高程度的规律性,这使得 语言更容易学习,阅读和理解。任何人谁也学到了SIG- 英语语言的nificant部分可以证明了学习的难度及其 许多规则的例外(例如i除C后e)之前。
矩阵的正交性检查:
正交也可以是相对于基质,
Matrix *(transpose of matrix)= identity matrix.
点击下面的链接以查看正交YouTube视频。结果 https://youtu.be/tNekLaxnfW8