2007-10-11
“界面”使用的情况
关键字: 纯虚基类 界面 使用情况
现有一基础模块A,提供模块间通信服务。类B、C中都有一个私有A*成员用于与其他模块之间通信,B、C的构造函数要求提供一个A的指针来初始化该私有成员。使用B的开发人员在平台W1上开发程序P1,具有A的A1实现版本;使用C的开发人员在平台W2上开发程序P2,具有A的A2实现版本;P1,P2进行通信。现在来看看A的界面如何使用:
对于A的设计者,给出A的界面接口规范A.h向所有驱动厂商、用户提供;并且给出了W1平台的实现A1.h,A1.cpp,其中A1中有派生类A1 : public A,并在A1.cpp中给出了全部接口实现;编译出A1库,并且向客户提供头文件A1.h;
类B为使用A,在B的接口规范B.h中包含A.h,定义A*私有成员,并通过构造函数获得一个A*;B.cpp的所有实现都对A*进行操作。
类C也是这样。
开发P1的程序员在自己定义的模块中需要包含B.h来使用B,其所在的W1中使用的是A的A1版本,故在头文件中应该:
而开发P2的程序员,首先根据A.h开发自己的A的实现A2.h, A2.cpp,然后在自己的模块中使用A2:
对于A的设计者,给出A的界面接口规范A.h向所有驱动厂商、用户提供;并且给出了W1平台的实现A1.h,A1.cpp,其中A1中有派生类A1 : public A,并在A1.cpp中给出了全部接口实现;编译出A1库,并且向客户提供头文件A1.h;
类B为使用A,在B的接口规范B.h中包含A.h,定义A*私有成员,并通过构造函数获得一个A*;B.cpp的所有实现都对A*进行操作。
类C也是这样。
开发P1的程序员在自己定义的模块中需要包含B.h来使用B,其所在的W1中使用的是A的A1版本,故在头文件中应该:
cpp 代码
- ////P1.h
- #include "B.h"
- #include "A1.h"
- A1* a1ptr = new A1(...);
- B b(a1ptr);
- b.fun()
- ...
cpp 代码
- ////P2.h
- #include "C.h"
- #include "A2.h"
- A2* a2ptr = new A2(...);
- C c(a2ptr);
- c.fun()
- ...
这样,A的开发人员可以根据不同环境,开发不同的驱动版本A1, A2, ....;而这些A的不同实现,并不影响B、C的设计和实现人员;P1、P2的开发人员可以根据自己实际需要选择A的不同实现(或者根据A.h自己再开发),而应用B,C。
另外一个好处是更换A的驱动,并不需要重新编译B、C,只需要重新编译P1,P2,并重新链接B、C即可。结构如下图:

带箭头的线表示继承关系,带实心球的线表示包含关系。
发表评论
- 浏览: 9940 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
站在巨人肩上的思考[连载 ...
呵呵,我看的是Effective C++第三版,第一个item。 对,就是那四句 ...
-- by shi5jin -
站在巨人肩上的思考[连载 ...
欢迎讨论远程数据库和rpc的编程。 “《Effective C++》的开篇点题 ...
-- by bigpanda -
站在巨人肩上的思考 [连载 ...
读完这两节,我基本就一个字,“基本帅呆了”。
-- by spinach -
站在巨人肩上的思考 [连载 ...
终于等到了,慢慢看。
-- by spinach -
站在巨人肩上的思考 [连载 ...
期待下文
-- by spinach






评论排行榜