diff options
Diffstat (limited to 'parnas-a-rational-design-process.rst')
-rw-r--r-- | parnas-a-rational-design-process.rst | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/parnas-a-rational-design-process.rst b/parnas-a-rational-design-process.rst index ab38b61..78e2309 100644 --- a/parnas-a-rational-design-process.rst +++ b/parnas-a-rational-design-process.rst @@ -393,17 +393,17 @@ Page 13 (袁世家 翻, 卢梦茹 改) -在其它情况下,我们从描述内部数据结构开始;在有些情况下,这些数据结构由子模块实现(并隐藏)。 对每个访问程序,我们包括一个函数 [10] 或者 LD-关系 [14], 用于描述它对数据结构的影响。对于模块返回给调用者的每个值,我们提供另外一个数学函数,这个数学函数叫做抽象函数,它将数据结构的值映射到返回值。对于每个意外事件,我们描述如何检查它。最后,我们提供一个"验证",论证拥有这些属性的程序则会满足模块说明。 +在其它情况下,我们从描述内部数据结构开始;在有些情况下,这些数据结构由子模块实现(并隐藏)。 对每个访问程序,我们包括一个函数 [10] 或者 LD-关系 [14], 用于描述它对数据结构的影响。对于模块返回给调用者的每个值,我们提供另外一个数学函数,这个数学函数叫做抽象函数,它将数据结构的值映射进返回值。对于每个意外事件,我们描述如何检查它。最后,我们提供一个"验证",论证拥有这些属性的程序将会满足模块说明。 -我们继续分解与设计子模块,直到每个工作任务足够小,小到即使负责这个模块的程序员离开了项目,我们也可以承担舍弃它并重新开始的代价。 +我们继续分解与设计子模块,直到每个工作任务足够小,小到即便负责这个模块的程序员离开了项目,我们也可以承担放弃它并重新开始的代价。 如果我们无法用易读的高级语言编程,例如,如果没有编译器可用,我们就把伪代码作为文档的一部分。我们发现让伪代码由不是最终编码者的人写,并让两个程序员负责保持程序的这两个版本一致是有用的 [7]。 E. 设计并且记录使用层次 (uses hierarchy) ```````````````````````````````````````````````````````````````````````````````` -一旦我们知道所有的模块与它们的访问程序,就能设计使用层次 [13] 了。使用层次可以用一个二进制矩阵方便表示,且仅当程序A的正确性依赖于系统中存在正确的程序B时,位置(A,B)上的条目为真。使用层次定义了子集组成的集合, 这个集合可以由删除整个程序且不需要重写任何程序得到。使用层次对于分阶段交付,失效弱化(fail-soft)系统,和程序族开发是重要的 [12]。 +一旦我们知道所有的模块与它们的访问程序,就能设计使用层次 [13] 了。使用层次可以用一个二进制矩阵方便表示,当且仅当程序A的正确性依赖于系统中存在正确的程序B时,位置(A,B)上的条目为真。***使用层次*** 定义了子集组成的集合, 这个集合可以通过删除整个程序且不需要重写任何程序得到。使用层次对于分阶段交付,故障弱化(fail-soft)系统,与程序族开发是重要的 [12]。 -(蓝珲注:文中提到的程序,容易引起混淆,其实就是指模块。二进制矩阵其实描述了模块之间的依赖关系。例如,有1,2,3,4四个模块,3依赖1, 1依赖2, 2依赖4,则{4}, {1,2}, {2,4}, {3,1}. {1,2,4}, {1,3,4},{1,2,3,4} 这些子集都可以组成独立程序,因为每个子集都包含了全部依赖。) +(蓝珲注:本节提到的程序,容易引起混淆,其实就是指模块。二进制矩阵其实描述了模块之间的依赖关系。例如,有1,2,3,4四个模块,3依赖1, 1依赖2, 2依赖4,则{4}, {1,2}, {2,4}, {3,1}. {1,2,4}, {1,3,4},{1,2,3,4} 这些子集都可以各自组成独立程序,因为每个子集都包含了全部依赖,不必依赖与子集外面的东西。) Page 14 |