freeCodeCamp/guide/chinese/software-engineering/orthogonality/index.md

35 lines
2.7 KiB
Markdown
Raw Normal View History

---
title: Orthogonality
localeTitle: 正交
---
## 正交
在软件工程中如果更改其中一个组件仅更改该组件的状态则认为系统是正交的。例如考虑一个包含三个变量的程序ab和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