29 软件结构-平面和层级:二十五年前没看懂《没有银弹》

17 阅读2分钟

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集


原文:

(The several graphs may represent the flow of control, the flow of data, patterns of dependency, time sequence, name-space relationships.)These are usually not even planar, much less hierarchical.

原译文:

它们通常不是有较少层次的扁平结构。

正确译文:

这些图通常连平面图都不是,更不用说层级图了。

错译的原因是没看懂planar这个词。

planar是图论术语。我们看教材《离散数学及其应用》的英文原版:

图片图片

planar的定义是:可以在平面上画出来的、边没有交叉的。

教材中给出了例子:

图片

例如,4个顶点的完全图K4 是平面的。它可以像FIGURE 3这样,把其中一条边往外一弯,就不交叉了。

3维立方体图Q3,也可以像FIGURE 5这样。

但完全二分图K3,3,怎么绕都没有办法变成平面的。

FIGURE 7给出了一个简单的证明:先从两个子集挑两个顶点出来,例如一个挑v1、v2,一个挑v4、v5,得到(a)的形状。这个形状把平面分割成R1、R2两个区域。然后放第一个子集中剩下的v3。先假设v3放在R2(里面),v3和v4,、v3和v5之间的边把R2分割为R21、R22两个区域。接下来第一个子集中剩下的v6放哪里都不合适了。放R21,v6跟v2之间的边会产生交叉,放R22,v6跟v1之间的边会产生交叉……。

原文还用了一个词hierarchical,这个词不是图论教科书里面的用语,应该是作者自己挑选的词,但原文表达成“not even planar, much less hierarchical”,有一定的模糊。

hierarchical的意思是层级化的、层级的,按照一般的理解,就是有向无环图(DAG):

图片

但是,有向无环图未必是平面的,例如上面说的K3,3,规定所有的边都是从第一个子集的顶点指向第二个子集的顶点,最多走一步就停留在第二个子集,不会有环。

如果说hierarchical一定是planar,那就是树了。树肯定是平面的,往外拼接叶子有的是空间。

图片