已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。
上个月关门了。
社区上个月审查了是否重新打开这个问题,并将其关闭:
原始关闭原因未解决
Improve this question
为什么我们说像C这样的语言是自顶向下的,而像Java或C++这样的OOP语言是自底向上的?这种分类在软件开发中有什么重要性吗?
已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。
上个月关门了。
社区上个月审查了是否重新打开这个问题,并将其关闭:
原始关闭原因未解决
Improve this question
为什么我们说像C这样的语言是自顶向下的,而像Java或C++这样的OOP语言是自底向上的?这种分类在软件开发中有什么重要性吗?
8条答案
按热度按时间bn31dyow1#
“自顶向下”的方法是对问题进行高层次的定义,并将其细分为子问题,然后递归地进行,直到您将问题分解为明显且易于编码的部分。这通常与编程的“功能分解”风格有关,但不是必须的。
在“自下而上”编程中,您可以确定可以组合成更大程序的较低级别的工具。
实际上,几乎所有的编程都是结合各种方法完成的。在面向对象的编程中,你通常通过识别领域对象(这是一个自上而下的步骤)来细分问题,并细化这些对象,然后将这些对象重新组合到最终的程序中-这是一个自下而上的步骤。
xurqigkl2#
在自顶向下的开发中,你从你的主要功能开始,然后考虑你需要采取的主要步骤,然后你把每一个步骤分解成它们的子部分,等等。
在自底向上编程中,你会想到基本的功能和你需要的部分,然后构建它们。你发展演员和他们的方法,然后你把他们绑在一起,使一个连贯的整体。
当你开发对象时,OOP自然倾向于自底向上,而当你从一个函数开始并慢慢添加时,过程式编程倾向于自顶向下。
4ngedf3f3#
我从来没有听说过“自上而下”和“自下而上”这样的术语。
这些术语通常用于描述如何设计和实现软件系统,因此适用于任何语言或编程范式。
在“On LISP”中,Paul Graham使用术语“自下而上”略有不同,意思是不断将公共功能提取到共享函数中,以便最终创建一个新的,更高级别的LISP方言,让您根据应用程序域进行编程。这不是一个常用的术语。如今,我们称之为“重构”和“特定领域的嵌入式语言”(老LISP程序员会嘲笑LISP从20世纪50年代就能做到这一点)。
oalqel3c4#
我从来没有听说过分类适用于特定的语言,而是它是一种编程范式-你首先填写细节(即。构建完整的实现方法),然后将它们放在一起(例如,从它们的main()方法调用它们,还是从逻辑流程开始,然后充实实现?
你真的可以用这两种语言做任何一种...但我认为这通常是相反的,在当前的OOP语言中,你首先定义接口,形成逻辑结构,然后才关心实现,而像C这样的直接过程语言,你需要在调用它们之前实际实现一些方法。
cigdeys35#
在自顶向下的方法中,系统首先被公式化,在开始时指定但不详细说明任何子系统,然后非常详细地定义每个系统及其子系统,直到将其指定给基础。
在C程序中,需要在程序的顶部声明函数,然后通过主入口非常详细地定义每个子系统/子例程。
在自底向上的方法中,首先设计,从基础层开始到抽象层完成。
在c++/java中,从类开始设计,从编程特性的基本层次开始,然后进入程序的主要部分。
cczfrluj6#
它更多的是关于范式(面向对象,命令式,函数式等)而不是语法。
从dept-info.labri.fr
自下而上的编程与自上而下的编程相反。它指的是一种编程风格,其中应用程序从编程语言的现有原语开始构建,并逐渐构建越来越复杂的功能,直到所有的应用程序都被写好。
在同一篇文章的后面:
在C或Java等语言中,自底向上编程的形式是从语言的原语或现有的抽象数据类型构造抽象数据类型。
vltsax257#
我相信自上而下的方法和自下而上的方法之间的区别在于,自上而下的方法将问题分解为可管理的步骤,而自下而上的方法实际上是详细说明这些步骤。
wi3ka0sx8#
大多数过程语言或低级语言都遵循自顶向下的方法,如C语言。类似地,高级语言如Java,C++等遵循自底向上的方法。
在自顶向下的方法中,所有的系统或大功能被分解成小的子系统,而在自底向上的方法中,小的子系统被组合在一起,以开发一个大的和最终的系统。
递归是自顶向下的方法,而迭代是自底向上的方法。