我想知道Java是否是正交的。如果是,那么它的哪些特性使它是正交的?如何确定语言是否正交?例如,我在某个网站上发现C++不是正交的,但没有解释为什么。还有哪些语言是正交的?请帮帮我,因为互联网上几乎没有关于这个主题的信息。
谢谢
我想知道Java是否是正交的。如果是,那么它的哪些特性使它是正交的?如何确定语言是否正交?例如,我在某个网站上发现C++不是正交的,但没有解释为什么。还有哪些语言是正交的?请帮帮我,因为互联网上几乎没有关于这个主题的信息。
谢谢
UNIX编程艺术第4章. 模块化,正交性,第89页:
正交性
正交性是帮助使复杂设计变得紧凑的最重要的属性之一。在纯正交设计中,操作没有副作用;每个动作(无论是API调用、宏调用还是语言操作)只改变一个事物而不影响其他事物。控制你所控制的任何系统的每个属性都有一种且仅一种更改方式。
编程语言实践第6章,第228页:
正交性意味着特性可以以任何组合使用,这些组合都有意义,并且给定特性的含义是一致的,不受与其结合使用的其他特性的影响。
On Lisp, 5.2 正交性:
正交语言是一种可以通过多种不同的方式组合少量运算符来表达很多内容的语言。
我认为正交编程语言应该是每个特性具有最小或无副作用的语言,因此可以在不考虑使用方式如何影响其他特性的情况下使用它们。我从正交API的定义中借鉴了这一点。
在Java中,您需要评估例如是否有一组关键字/结构可以在同时应用于标识符时互相影响。例如,在方法上应用public
和static
时,它们不会相互干扰,因此这两个是正交的(除了关键字打算执行的操作之外没有副作用)。
你需要对所有功能进行这样的操作,以证明它们之间的正交性。这是一种方法。我认为在这件事情上不存在明确的正交或非正交。
for loop; vs. while loop;
for和while不是正交的。
正交性是与语言无关的设计特征。当然,某些编程语言可以更容易地使您的系统设计保持正交性,但您不应该专注于特定的编程语言,而是尽可能保持系统设计的正交性。
正交性并不是一种语言特性,尽管有些语言具有促进正交性的特性(如注解、内置AOP等)。关于Java中的正交性:我已经写了一个小案例研究,以log4j为例:“通过示例理解正交性”-你可能会觉得这很有用。
C语言中缺乏正交性:
void
之外的任何数据类型如果一个编程语言符合以下条件,则被认为是具有正交性:
存在一组相对较小的基本构造,可以以相对较少的方式结合起来构建数据和控制结构
每种可能的结构都是合法的
例如,一个具有4种基本数据类型(Int、Float、Double、Char)和两个类型运算符(Array和Pointer)的语言可以创建相对较大数量的数据结构。
因此,正交性的优点在于使语言简单且规则,因为有更少的异常情况。