程序模块化(心得)
程序模块化(心得)
模块化设计,这个概念几乎是在每个刚接触软件编程设计学习时就会被不断提醒的。但是真正地去理解和使用模块化,将其应用于所编写的程序上的变成学习者却不多。这是为什么呢?
原因大概如下:
第一,大多数的编程学习者在一开始接触和学习到的程序很小,代码量很少,甚至只有几十行。对于这样短小的程序进行模块化设计的确是有难度的(不过哪怕是再短小的程序,都可以实现模块化设计!)。第二,很多情况下程序模块化设计需要“浪费”很多时间,例如增加了代码的数量,增加了构思的时间。第三,很多编程学习者体验到了他们不用模块化设计,到最后也可以顺利完成程序,程序可以正常运行。
那么既然不用模块化设计更加便利和快速,为什么还需要模块化的程序设计呢?为什么不把所有的程序代码都写在一个main()函数中呢?为什么不按照傻瓜式的流水线从头到尾写代码,而是要去考虑一个一个模块的功能呢?
所以我认为我们在编程时首先具有模块化的思想是非常重要的。
模块化程序设计的优点:
第一,把所有代码都统统写在一个main()函数中是疯狂的做法(虽然大部分的编程教学书籍都这样做)!为什么会疯狂呢,很多学习者都是这样写的,而且最后程序成功执行!
这样的想法在很多时候都会萌生,因为学习者刚开始编写的大多数程序都是“一次性”的快餐程序!学习者一旦完成了程序,就根本不需要回头修改,或者是以后再阅读。没有模块化设计的程序是极其难以阅读和改进的,即便是程序的作者本人,在一段时间后,也很难重新对程序进行修改。第二,模块化程序设计个人认为是编程的核心所在,即便现在有了“面向对象”的编程,可以面向对象的编程在某种程度上也是对模块化的一种延伸,使得程序的组织结构更加富有层次感,立体感和降低程序的耦合度!第三,几乎所有商用程序都必须使用模块化程序设计理念!这里很想使用“全部”代替“几乎”,因为真的很难想像没有模块化的商用软件!
那么究竟如何进行模块化的程序设计呢?
其实不得不说很遗憾,虽然极尽全力地想从互联网上搜索出详尽的资料,希望能够得到一个商用软件的模块化设计流程,但是因为各公司之间的商业保密和竞争,这部分的资料实在是少得可怜。这在很大程序上也造成了编程学习者难以学习真正的模块化程序设计!编程初学者难以了解一个商用软件(比如说暴风影音,QQ等)究竟是如何进行多人合作编写的,究竟是如何进行模块化划分的!
模块化程序设计并不仅仅只是多写函数,多分文件这么简单!为了让外部函数或者文件调用我们提供的接口功能,就必须包含我们提供的这个接口描述文件----即头文件。同时,我们自身模块也需要包含这份模块头文件(因为其包含了模块源文件中所需要的宏定义或者是结构体),好比我们平常所用的文件都是一式三份一样,模块本身也需要包含这个头文件头文件的作用正是在此。可以称其为一份接口描述文件。其文件内部不应该包含任何实质性的函数代码。我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。但是总的原则是:不该让外界知道的信息就不应该出现在头文件里,而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里,否则,外界就无法正确的调用我们提供的接口功能因而为了让外部函数或者文件调用我们提供的接口功能,就必须包含我们提供的这个接口描述文件----即头文件。同时,我们自身模块也需要包含这份模块头文件(因为其包含了模块源文件中所需要的宏定义或者是结构体),好比我们平常所用的文件都是一式三份一样,模块本身也需要包含这个头文件。
一切都从最简单最基本的功能开始,只要能够养成模块化编程的习惯,只要不断强迫自己去让整个程序的耦合度更低,更易修改,层次更清晰,假以时日,即便是面对大型程序的设计,也会游刃有余。