我想知道Java是否正交,如果是,那么它的哪些特性使它正交。如何判断语言是否正交?例如,我在某些网站上发现C ++不是正交的,但没有解释,为什么不。还有哪些其他语言正交?请帮助我,因为互联网上几乎没有关于这个主题的信息。
由于
答案 0 :(得分:24)
UNIX编程的艺术,第4章。模块化,正交性,第89页:
<强>正交强>
正交性是其中之一 可以帮助的重要属性 使复杂的设计紧凑。在 纯粹的正交设计,操作 没有副作用;每一个动作 (无论是API调用,还是宏 调用,或语言操作) 只改变一件事 影响他人。有一个和 只有一种方法可以改变每个属性 无论你是什么系统 控制。
编程语言语用学,第6章,第228页:
正交性表示功能可以 可以任意组合使用 组合都有意义,那就是 给定特征的含义是 一致,无论如何 与之合并的功能。
关于Lisp,5.2 Orthogonality:
正交语言就是其中之一 你可以结合一个表达很多 很多运营商中很多 不同的方式。
我认为正交编程语言的每个特征都具有最小的副作用或没有副作用,因此可以在不考虑该使用将如何影响其他特征的情况下使用它们。我从正交API的定义中借用了它。
在Java中,您必须评估,例如,是否存在可在标识符上同时使用时可能相互影响的关键字/构造的组合。例如,当将public
和static
应用于某个方法时,它们不会相互干扰,因此这两个是正交的(除了关键字的目的之外没有任何副作用)
你必须这样做才能证明正交性。这是一种方法。在这件事上,我认为 或 。
答案 1 :(得分:3)
使用术语正交编程语言是不寻常的。通常,在计算机科学中,您实际上是在谈论orthogonal instruction-sets。但是,如果我们要将意义扩展到语言的语法:
“......意思是[语言]具有相对较少的基本构造和一组用于组合这些构造的规则。每个构造都有与之关联的类型,并且对这些类型没有限制。 ......“ see ALGOL
然后我们可以假设,如果不是所有语言中的所有指令都适用于所有数据类型,则会产生非正交性。然而,这并不意味着反过来是正确的,也就是说如果所有语言指令都适用于所有数据类型,则并不一定意味着该语言是正交的。
更正式地说,正交语言只有一种方法可以执行给定的操作。非正交语言有多种方法可以达到同样的效果。
最简单的例子:
for loop; vs. while loop;
for和while是非正交的。
答案 2 :(得分:2)
正交性是您的设计独立于语言的特征。当然,某些语言可以让您更轻松地为系统设计正交设计,但您不应该专注于特定语言,以使系统的设计尽可能正交。
答案 3 :(得分:1)
正交性本身并不是一种语言特征,即使某些语言具有促进正交性的功能(例如注释,内置AOP,......)。关于Java中的正交性:我已经使用log4j作为示例编写了一个关于此的小案例研究:“Orthogonality By Example” - 您可能会发现这很有用。
答案 4 :(得分:1)
C中缺乏正交性:
void
在以下情况下,编程语言应考虑正交:
有一组相对较小的原始构造,可以用相对较少的方式组合来构建数据和控制结构
每个可能的结构都是合法的
例如,具有4种原始数据类型(Int,Float,Double,Char)和两种
的语言
类型运算符(Array和Pointer)可以创建相对大量的数据结构。
因此,正交性的优点是使语言简单而有规律,因为例外情况较少。