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

时间:2009-05-19 05:14:09

标签: java c++ c

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

10 个答案:

答案 0 :(得分:61)

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

在“自下而上”编程中,您可以识别出可以组成更大程序的低级工具。

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

答案 1 :(得分:18)

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

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

当您开发对象时,OOP自然倾向于自下而上,而当您开始使用一个函数并逐渐添加到其中时,程序编程倾向于自上而下。

答案 2 :(得分:4)

我从未听过以这种方式使用的“自上而下”和“自下而上”这两个词。

这些术语通常用于描述人们如何设计和实现软件系统,因此适用于任何语言或编程范例。

在“On LISP”中,Paul Graham使用术语“自下而上”略有不同意味着不断将共同功能提取到共享功能中,以便最终创建一个新的,更高级别的LISP方言,让您按照术语编程您的应用程序域。这不是该术语的常见用法。这些天我们称之为“重构”和“特定领域的嵌入式语言”(旧的LISP程序员会嘲笑自20世纪50年代以来LISP能够做到这一点)。

答案 3 :(得分:3)

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

你真的可以使用这两种类型的语言...但我会说它通常是相反的,在当前的OOP语言中,你首先定义接口,形成逻辑结构,然后才担心实现,而像C这样的直接过程语言,你需要在调用之前实际实现一些方法。

答案 4 :(得分:2)

这个维基百科页面很好地解释了http://en.wikipedia.org/wiki/Top-down#Programming

答案 5 :(得分:1)

它更多地是关于范式(面向对象,命令式,功能性等)而不是语法。

来自dept-info.labri.fr

  

自下而上编程与自上而下编程相反。它   指构造应用程序的编程风格   从现有的编程语言原语开始,和   逐渐构建越来越复杂的功能,直到   所有的申请都已写完。

后来在同一篇文章中:

  

在诸如C或Java之类的语言中,自下而上的编程采用了这种形式   从语言或原语的原语构造抽象数据类型   来自现有的抽象数据类型。

答案 6 :(得分:1)

在自上而下的方法中,系统首先制定指定但不详细说明任何子系统的开头,然后详细定义每个系统及其子系统,直到将其指定给基础。

例如 - 在C程序中,需要在程序顶部声明函数,然后通过主条目对每个子系统/子程序进行非常详细的定义。

在自下而上的方法中,首先进行设计,从基础层面开始到抽象层面。

例如 - 在c ++ / java中开始从编程功能的基本级别开始设计,然后转到程序的主要部分。

答案 7 :(得分:1)

我确实认为自上而下的方法与自下而上的编程方法之间的区别在于自上而下的方法将问题引入并进入可管理的步骤,而自下而上的方法实际上是详细说明了这些步骤。

答案 8 :(得分:0)

大多数过程语言或低级语言都遵循自顶向下方法(例如C语言)。类似的高级语言(如java,c ++等)也遵循自下而上的方法。

自上而下的方法将所有系统或大型功能分解为小型子系统,而自下而上的方法将小型子系统组合在一起以开发大型和最终系统。

例如,递归是自上而下的方法,而迭代是自下而上的方法。

答案 9 :(得分:-5)

C是结构化语言,程序序列从上到下。从主要方法开始。

而OOP取决于类和对象的数量。程序流程在OOP中不是自上而下的方法