函数和模块有啥区别?

Posted

技术标签:

【中文标题】函数和模块有啥区别?【英文标题】:What is the diffrence between a function and a module?函数和模块有什么区别? 【发布时间】:2011-06-13 15:06:17 【问题描述】:

我对 c++ 很陌生,对模块化编程面向函数的编程之间的区别感到困惑。我从未做过模块化编程,所以我只知道模块定义它包含函数。那么顺序(面向函数的语言)和模块化编程有什么区别?提前谢谢。

编辑: 我正在阅读 C++ 的 OOP。它开始了类似于什么是非结构化编程,然后给出了关于 结构化编程 的基本概念,而不是 模块化编程 和最后,OOP

【问题讨论】:

“模块化编程”不是 C++ 中的正式概念。您的意思是“面向对象编程”吗? “我只知道模块的定义是它包含功能。” - 我从未听说过 C++ 上下文中“模块”的这种定义。想详细说明或解释吗?您是从哪里听说的? 我说的是模块化编程,与语言无关。对不起 c++ 标签。 “面向功能”是指过程型还是功能型(完全不同,甚至是对比的范例)? 【参考方案1】:

模块化编程主要是一种减少计算机程序中耦合的策略,主要是通过封装。

在模块化编程之前,代码的局部一致性通过结构化编程来确保,但缺乏全局一致性:如果您决定将您的拼写检查字典实现为红黑树,那么此实现将暴露于程序中的所有其他人,以便从事文本渲染的程序员能够访问红黑树节点以对它们做有意义的事情。

当然,一旦您需要更改字典的实现,这就变成了地狱,因为那时您还必须修复其他程序员的代码。

更糟糕的是,如果实现细节涉及全局变量,那么您必须非常小心谁更改它们以及以什么顺序更改它们,否则会出现奇怪的错误。

模块化编程通过将实现(模块私有)与接口(程序的其余部分可以使用)分离,对所有这些进行了封装。因此,字典模块可以公开一个抽象类型,该抽象类型只能通过诸如findWord(word,dictionary) 之类的模块函数访问。在字典模块上工作的人永远不需要在该模块之外窥视以检查是否有人可能正在使用实现细节。

【讨论】:

【参考方案2】:

它们都是构建代码的两种方式。如果您对面向函数的编程感兴趣并想更好地理解它,我会看看 lisp。 C++ 并不是真正面向函数的,因为每个函数都应该返回一个值,但 C++ 函数可以返回 void(使其成为过程而不是函数),因此它不是真正意义上的函数式编程语言。

“我从来没有做过模块化编程,所以我只知道模块定义它包含函数”。

模块比函数高一个层次。

这是一个好的开始。将函数视为执行某些操作的工作单元,当您有多个可以以某种方式分组的函数时,您可以将它们放在一个模块中。因此,string.h 有一堆函数用于处理字符串,但您只需包含标题,就可以直接访问所有这些函数。然后,您可以在其他项目中重用这些模块,因为您之前已经使用过这些模块并且它们已经(我假设)经过调试和测试,并阻止人们重新发明***。关键是要从累积的经验中受益。

我建议您考虑一个您喜欢的项目并编写一些函数,并考虑您希望如何组织代码以供其他开发人员使用。

希望对你有用。

【讨论】:

谢谢。你的意思是它的嵌套函数? 我不会使用嵌套这个词。在 lisp 中,函数是嵌套的,因为它是一个综合过程(查看代码示例,您就会明白我的意思)。我会使用“分组”这个词。【参考方案3】:

我相信函数式编程将我们引导到目前的微服务范式,而模块化编程倾向于类似于 OOP 概念。

【讨论】:

以上是关于函数和模块有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

导入整个模块或导入某个功能有啥区别? [复制]

JS面向对象到底有啥用?面向对象里函数的写法和普通函数写法有啥区别?都有哪些优势?

Python 上的 io.open() 和 os.open() 有啥区别?

包括模块和嵌入模块有啥区别?

“包”和“模块”有啥区别?

Ruby 中的“包含模块”和“扩展模块”有啥区别? [复制]