--- title: Orthogonality localeTitle: 正交 --- ## 正交 在软件工程中,如果更改其中一个组件仅更改该组件的状态,则认为系统是正交的。例如,考虑一个包含三个变量的程序:a,b和c。更改a的值不应更改b或c的值,前提是它们是独立的。此属性在调试程序时尤其重要,因为它依赖于缩小程序的移动部分的数量以识别问题的根本原因。 请参阅Eric S. Raymond的“UNIX编程艺术”中的以下引用。 > 正交性是最重要的特性之一,可以帮助使复杂的设计紧凑。在纯粹的正交设计中,操作没有副作用;每个动作(无论是API调用,宏调用还是语言操作)只改变一件事而不影响其他动作。有一种方法可以改变您控制的任何系统的每个属性。 正交性是一种软件设计原则,用于以改变一个组件不影响其他组件的方式编写组件。它是两个其他原则的结合,即强大的内聚力和松耦合。 正交性是从数学中借用的术语。例如,如果它们是垂直的,则两条线是正交的。在软件设计中,如果一个中的变化不影响另一个,则两个分量是正交的。 将此概念应用于类或代码的其他部分会导致较少的耦合。要正交两个类不能依赖于彼此的实现。他们也无法共享全球数据。更改一个类的内部结构不会影响另一个类。组件应该是独立的,只有一个责任。 考虑一种从文件中读取数字列表并按排序顺序返回的方法。现在需求发生变化,数字也在数据库中。修改此方法以访问数据库将导致客户端代码更改。如果这是两种不同的方法,那么新的源不会影响排序方法。只有客户端代码才必须知道数字的来源。 ### 强大的凝聚力 在软件组件内部,代码应该是强连接的。这表明代码被正确划分。如果组件具有两个或更多相对断开的部件,则可能表明这些部件应该在不同的组件中,或者在它自己的组件上。 ### 松耦合 在软件组件之间,连接应该很少。如果两个组件是强耦合的,则可能表明它们需要是一个组件,或者它们需要被不同地分成更多组件。 #### 更多信息: * [正交性(编程)|维基百科](https://en.wikipedia.org/wiki/Orthogonality_(programming)) * [正交面向对象编程原理| jasoncoffin.com](http://www.jasoncoffin.com/cohesion-and-coupling-principles-of-orthogonal-object-oriented-programming/) * [GRASP - 面向对象的设计原则|维基百科](https://en.wikipedia.org/wiki/GRASP_(object-oriented_design) Stack Overflow:什么是Orthogonality? https://stackoverflow.com/questions/1527393/what-is-orthogonality