自上而下和自下而上的编程

35 c c++ java

为什么我们说像C这样的语言是自上而下的,而像Java或C++这样的OOP语言是自下而上的?这种分类在软件开发中是否有任何重要性?

Cha*_*tin 66

"自上而下"方法对问题进行了高级定义,并将其细分为子问题,然后以递归方式执行,直到您看到明显且易于编码的部分.这通常与编程的"功能分解"风格有关,但不一定如此.

在"自下而上"编程中,您可以识别可以组成的较低级别的工具,以成为更大的程序.

实际上,几乎所有编程都是通过多种方法完成的.在面向对象编程中,您通常通过识别域对象(这是一个自上而下的步骤)来细分问题,然后对其进行细化,然后将这些对象重新组合到最终程序中 - 自下而上的步骤.

  • @SridharSarnobat 我很抱歉花了这么长时间才发现这个评论。也就是说,一般来说,面向对象无论如何都不应该自上而下地实践。几乎所有的编程都会涉及回溯和返工。这就是为什么弗雷德·布鲁克斯建议“计划扔掉一个。无论如何你都会扔掉。” (2认同)

Ecl*_*pse 20

在自上而下的开发中,您可以从主要功能开始,然后考虑需要采取的主要步骤,然后将每个步骤分解为子部分,依此类推.

在自下而上编程中,您可以考虑基本功能以及您将需要的部件并进行构建.你开发了演员和他们的方法,然后你把它们绑在一起,形成一个连贯的整体.

当您开发对象时,OOP自然倾向于自下而上,而当您开始使用一个函数并慢慢添加时,程序编程倾向于自上而下.


Nat*_*Nat 6

我从未听说过以这种方式使用的术语“自上而下”和“自下而上”。

这些术语通常用于描述一个软件系统的设计和实现方法,因此适用于任何语言或编程范式。

在“On LISP”中,Paul Graham 使用的术语“自下而上”略有不同,意思是不断将通用功能提取到共享函数中,以便您最终创建一种新的、更高级别的 LISP 方言,让您可以根据应用程序进行编程领域。这不是该术语的常见用法。如今,我们将其称为“重构”和“特定领域的嵌入式语言”(老 LISP 程序员会嘲笑 LISP 自 1950 年代以来就能够做到这一点)。


Avi*_*viD 5

我从未听说过分类适用于特定语言,而是一种编程范例-您是否先填写细节(即构建完整的实现方法)然后将它们放在一起(例如,从它们中调用main()方法),或者从逻辑流程开始,然后充实实现?

您实际上可以同时使用两种语言……但是我要说的是相反的情况,在当前的OOP语言中,您首先要定义接口,形成逻辑结构,然后才担心实现,而直接使用过程像C这样的语言,您需要在调用它们之前实际实现一些方法。

  • 你是绝对正确的。该问题有一个错误的陈述。它们只是可以独立于所使用的编程语言而受到尊重和实现的方法。由于现代软件的复杂性,这两种方法混合在一起,许多开发人员甚至在没有意识到的情况下使用它们。你的答案必须是被接受的,因为它很简单,不会让初学者感到困惑。 (2认同)