5
设计自上而下还是自下而上是更可取的?
据我了解,自上而下的设计是通过将抽象的高级概念细化为较小的混凝土和易于理解的部分,直到定义了最小的构建块。另一方面,自下而上定义了较低级别的部分,然后逐渐构建较高级别的块,直到形成整个系统。 实际上,最好将两种方法结合起来:从高级规范开始,以完全指定领域知识,其关系和约束。一旦清楚地了解了问题,便会创建最小的构建块来构建系统。 过程: 创建需求规范 创建设计规范(带有图表) 实行 交付 重复(在迭代开发中,我们不重复每个阶段的全部工作,而是重复每个阶段的一点工作,并每天开会以满足客户的动态需求) 看起来对我来说是完全正常的(以规格作为计划)。它有其缺陷,但这就是为什么我们要进行迭代开发:为什么要花时间在一个阶段上,而不是花时间进行需求分析,以研究领域知识中可能发生变化的所有可能事物(可能每天),而是进行一些分析,进行一些设计然后实施。 另一种方法是,每次迭代都是一种小型瀑布式的方式,在几天(或一周)内进行分析。设计同样如此。其余时间用于实施。自上而下的方法与迭代开发相结合有天生的错误吗? Paul Graham 在他的论文《自下而上编程》中似乎鼓励完全自下而上地构建,或者鼓励自下而上地对其进行编程,但是不建议进行需求分析/设计阶段: 经验丰富的Lisp程序员对程序进行了不同的划分。除自上而下的设计外,它们还遵循可称为自下而上的设计的原则-更改语言以适应问题。 就我所知,他的意思是Lisper仍然执行自上而下的设计,但程序自下而上,是真的吗?他写道: 值得强调的是,自下而上的设计并不意味着仅以不同的顺序编写相同的程序。自下而上工作时,通常会得到不同的程序。您将获得一种具有更多抽象运算符的更大语言,以及一个用它编写的较小程序,而不是一个单一的整体程序。取而代之的是门,而不是门。 这是否意味着在用Lisp编写程序期间,您最终会获得通用工具?