我对 C++ 非常陌生,并且对模块化编程和面向函数的编程之间的区别感到困惑。我从未做过模块化编程,所以我只知道模块定义它包含函数。那么顺序(函数-面向语言)和模块化编程?提前致谢。
编辑: 我正在阅读 C++ 的 OOP。它开始了类似于什么是非结构化编程的东西,而不是给出了关于结构化编程的基本概念,而不是模块化编程,最后是OOP。
我对 C++ 非常陌生,并且对模块化编程和面向函数的编程之间的区别感到困惑。我从未做过模块化编程,所以我只知道模块定义它包含函数。那么顺序(函数-面向语言)和模块化编程?提前致谢。
编辑: 我正在阅读 C++ 的 OOP。它开始了类似于什么是非结构化编程的东西,而不是给出了关于结构化编程的基本概念,而不是模块化编程,最后是OOP。
模块化编程主要是一种减少计算机程序耦合的策略,主要是通过封装。
在模块化编程之前,结构化编程确保了代码的局部一致性,但缺乏全局一致性:如果您决定将您的拼写检查字典实现为红黑树,那么这个实现将暴露给其他人该程序使从事文本渲染等工作的程序员能够访问红黑树节点以对它们进行有意义的操作。
当然,一旦您需要更改字典的实现,这就变成了地狱,因为那样您还必须修复其他程序员的代码。
更糟糕的是,如果实现细节涉及全局变量,那么您必须非常小心谁更改它们以及以什么顺序更改它们,否则会出现奇怪的错误。
模块化编程通过将实现(模块私有)与接口(程序的其余部分可以使用)分离,对所有这些进行了封装。因此,字典模块可以公开一个抽象类型,该类型只能通过模块函数访问,例如findWord(word,dictionary)
. 在字典模块上工作的人永远不需要在该模块之外窥视以检查是否有人可能正在使用实现细节。
它们都是构建代码的两种方式。如果您对面向函数的编程感兴趣并想更好地理解它,我会看看 lisp。C++ 并不是真正面向函数的,因为每个函数都应该返回一个值,但 C++ 函数可以返回 void(使其成为过程而不是函数),因此从某种意义上说,它不是真正的函数式编程语言。
“我从未做过模块化编程,所以我只知道根据定义它包含功能的模块”。
模块比函数高一个层次。
这是一个好的开始。将函数视为执行某些操作的工作单元,当您有多个可以以某种方式分组的函数时,您将它们放在一个模块中。因此,string.h 有一堆函数用于处理字符串,但您只需包含标题,就可以直接访问所有这些函数。然后,您可以在其他项目中重用这些模块,因为您之前已经使用过这些模块,并且它们已经(我假设)经过调试和测试,并阻止人们重新发明轮子。重点是从累积的经验中受益。
我建议您考虑一个您喜欢的项目并编写一些函数,并考虑您希望如何组织代码以供其他开发人员使用。
希望这对你有一些用处。
我相信函数式编程将我们引导到现在的微服务范式,而模块化编程倾向于类似于 OOP 概念。