什么是模块?
模块是指从物理上对程序中的实体定义进行分组,是可以单独编写和编译的程序单位。模块是组织和管理大型程序的一个重要手段。
一个模块包含接口和实现两部分。
- 接口:在模块中定义的,可以被其他模块使用的一些程序实体的描述
- 实现:在模块中定义的所有程序的具体实现描述。
在过程式程序中(如C语言):
- 接口:声明(
.h
文件) - 实现:定义(
.c
文件)
如何划分模块
划分模块的基本准则:
- 内聚性最大:模块内的各实体之间联系紧密,便于程序的设计和理解。
- 耦合度最小:模块间的各实体之间关联较少,便于程序的维护。
过程式程序的模块划分:
- 通常是基于子程序进行划分,把共同完成某个独立功能的,或使用相同数据的子程序及其相关实体划分在一个模块。
- 缺点:模块边界模糊。
类作为模块
在面向对象程序中,类是一个自然的模块划分单位,模块边界比较清晰。
一个C++程序的模块由两部分构成:
- 类的定义(
.h
文件) - 类的实现(主要是成员函数,
.cpp
文件)
良好的面向对象程序设计风格
- 良好的程序设计风格应该能降低模块的耦合度
- 结构化程序设计为过程式程序设计提供了一种良好的风格指南,要求程序单位具有“单入口、单出口”性质:
- 不带
goto
的顺序、分支和循环控制流程 - 子程序
- 不带
模块间的耦合度反映在对象类之间的关联性上。要降低模块之间的耦合度,可以对类能够访问的对象或者对象类的集合作一定的限制,并尽量使该集合为最小。
Demeter法则
核心思想:仅与你的直接朋友交谈
要求一个类的成员函数:
- 除了能访问自身类结构的直接子结构(数据成员)外,不能以任何方式依赖于任何其他类的结构
- 只应向某个有限集合中的对象发送消息。
两种表达形式:
- 类表达形式:一个类中的成员函数能够直接访问或引用的对象所属的类。(类的集合)
- 对象表达形式:一个类中的成员函数能直接访问或引用的对象。(对象的集合)
Loading Comments By Disqus