应用软件的模块化技法

应用软件的模块化主要体现在:以函数为粒度单元,按逻辑功能组织源码;以源文件为粒度单元,按目录层次结构组织源码;模块化的源码编译工程以及软件运行时的逻辑结构的模块化。这些模块化技术互相配合,成就了软件良好的架构。前面三种技术可以归类为模块化的静态技法,后者为模块化动态技法。因此分为上下两篇:模块化的静态技法,模块化的动态技法。殊不知各种技法都是为了把源码组织好,使得程序编译顺利,程序运行逻辑能够满足业务要求。而模块化技术使得这一切变得简单容易。

以函数为粒度单元,按逻辑功能组织源码的技术有很多种,比较经济适用的有面向对象技术的编程方式。面向对象技术是以函数为粒度单元的一种源码组织方式,可以体现在各种编程语言中,并非 C++ jave 之类的语言所独有,用 C 语言也是可以写成面向对象的代码。把函数按逻辑功能进行分组,每个组再进行接口与实现分离的原则进行设计,称之为函数接口设计。再把功能相关的接口归并在一个逻辑单元中,称之为类的设计。

函数为粒度单元在模块化的道路上再往上走,是以源文件为粒度单元,按目录层次结构组织源码的模块化方法。清晰自然的目录层次结构在很大程度上体现软件架构,从静态的角度来说,源码组织是目录树型结构的。不同的软件模块分列在不同的目录中,显得清晰又自然。在同一个模块内,又可细分为函数接口目录(对外面头文件目录,对内头文件目录),函数实现目录,不仅起到封装隐藏实现细节的作用,又可以降低不同模块间头文件包含关系的复杂度,为编译工程提供一个清晰自然的组织方式。

编译工程体现了源码在编译链接方面的组织方式,并且服务于软件架构的模块化设计。编译规则,编译选项,编译目标,目标文件的组织方式在很大程度上决定了软件模块化的优劣。不同模块的目标文件分列在不同 makefile 中为模块化提供直接的支持,而编译目标则体现了哪些模块被编译为库,哪些模块被编译为可执行文件。编译规则,编译选项,编译目标,目标文件分列在不同的文件中,使得 makefile 本身更清晰自然,易于维护与扩展。

软件运行时的逻辑结构的模块化技术主要体现模块间的通信接口以及程序运行的控制流。程序运行的控制流,可以说是程序的骨架,有进程函数,线程函数,信号函数, IO 轮询函数,库装载函数以及异常处理函数。模块间的通信接口又分为数据传输通道与数据同步。

数据传输通道在进程这一层次级别的有管道,消息队列,共享内存以及套接字接口;在线程这一个层次级别的主要是共享的全局变量。数据同步来保证数据的一致性与完整的函数,在进程层次级别有记录锁,信号量,在线程层次级别有互斥量,条件变量以及读写锁。

模块间传递的数据的数据结构以及数据交换协议设计合理能够促进软件的模块。在什么情况下使用进程级别的模块化技术还是线程层面的模块化技术是需要进行仔细考量的,是对系统架构师的一个考验。

 

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览34400 人正在系统学习中

来源:tangnf

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2010年2月13日
下一篇 2010年2月15日

相关推荐