Java正交吗?

时间:2010-07-17 15:04:48

标签: java theory definition orthogonal

我想知道Java是否正交,如果是,那么它的哪些特性使它正交。如何判断语言是否正交?例如,我在某些网站上发现C ++不是正交的,但没有解释,为什么不。还有哪些其他语言正交?请帮助我,因为互联网上几乎没有关于这个主题的信息。

由于

5 个答案:

答案 0 :(得分:24)

UNIX编程的艺术,第4章。模块化,正交性,第89页:

  

<强>正交

     

正交性是其中之一   可以帮助的重要属性   使复杂的设计紧凑。在   纯粹的正交设计,操作   没有副作用;每一个动作   (无论是API调用,还是宏   调用,或语言操作)   只改变一件事   影响他人。有一个和   只有一种方法可以改变每个属性   无论你是什么系统   控制。

编程语言语用学,第6章,第228页:

  

正交性表示功能可以   可以任意组合使用   组合都有意义,那就是   给定特征的含义是   一致,无论如何   与之合并的功能

关于Lisp,5.2 Orthogonality:

  

正交语言就是其中之一   你可以结合一个表达很多   很多运营商中很多   不同的方式。


我认为正交编程语言的每个特征都具有最小的副作用或没有副作用,因此可以在不考虑该使用将如何影响其他特征的情况下使用它们。我从正交API的定义中借用了它。

在Java中,您必须评估,例如,是否存在可在标识符上同时使用时可能相互影响的关键字/构造的组合。例如,当将publicstatic应用于某个方法时,它们不会相互干扰,因此这两个是正交的(除了关键字的目的之外没有任何副作用)

你必须这样做才能证明正交性。这是一种方法。在这件事上,我认为

答案 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
  • 之外的任何数据类型
  • 参数按值传递,但数组按引用传递

在以下情况下,编程语言应考虑正交

  1. 有一组相对较小的原始构造,可以用相对较少的方式组合来构建数据和控制结构

  2. 每个可能的结构都是合法的

  3. 例如,具有4种原始数据类型(Int,Float,Double,Char)和两种
    的语言 类型运算符(Array和Pointer)可以创建相对大量的数据结构。

    因此,正交性的优点是使语言简单而有规律,因为例外情况较少。