`
shi5jin
  • 浏览: 37260 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

“界面”使用的情况

阅读更多
现有一基础模块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版本,故在头文件中应该:
cpp 代码
 
  1. ////P1.h  
  2. #include "B.h"  
  3. #include "A1.h"  
  4.   
  5. A1* a1ptr = new A1(...);  
  6. B  b(a1ptr);  
  7. b.fun()  
  8. ...  
而开发P2的程序员,首先根据A.h开发自己的A的实现A2.h, A2.cpp,然后在自己的模块中使用A2:
cpp 代码
 
  1. ////P2.h    
  2.  #include "C.h"    
  3.  #include "A2.h"    
  4.      
  5.  A2* a2ptr = new A2(...);    
  6.  C  c(a2ptr);    
  7.  c.fun()    
  8.  ...   

这样,A的开发人员可以根据不同环境,开发不同的驱动版本A1, A2, ....;而这些A的不同实现,并不影响B、C的设计和实现人员;P1、P2的开发人员可以根据自己实际需要选择A的不同实现(或者根据A.h自己再开发),而应用B,C。

另外一个好处是更换A的驱动,并不需要重新编译B、C,只需要重新编译P1,P2,并重新链接B、C即可。结构如下图:

带箭头的线表示继承关系,带实心球的线表示包含关系。

分享到:
评论

相关推荐

    财务软件源码财务软件源码

    使用情况:ZW,CF,FX,BB,GD,MR,GZ,YSYF,SM frmIN_SourceAccount.frm 说明: 帐务取数公式定义窗体 使用情况:已经不使用 frmInformation.frm 说明: 伊康财务系统信息窗体 使用情况:ZW,CF,FX,BB,GD,MR,GZ,YSYF ...

    Linux应用技术:二Linux初体验命令操作界面使用.pptx

    在使用者是管理维护人员时,更多情况下会使用远程登录管理服务器(易受到网络等因素影响),故更节省资源,更快速的命令行成为首选。 命令行缺点——需要记忆的内容多 命令行界面的使用 Linux启动后,默认进入图形...

    VC++界面编程之--使用分层窗口实现界面皮肤

    使用分层界面来实现界面皮肤的好处是:可以保证图片边缘处理不失真,且能用于异形窗口上,如一些不规则的窗口,你很难用SetWindowRgn来达到理想效果。 在很多情况下,界面的漂亮与否,取决于PS的制作及创意,而界面...

    和利时(HOLLiAS)人机界面HD3000使用手册.pdf

    和利时(HOLLiAS)人机界面HD3000使用手册pdf,和利时(HOLLiAS)人机界面HD3000使用手册:HD3400L文本显示器是连接可编程序控制器(PLC)或具有串口通讯能力电气设备的小型人机界面 (HMI) 产品,它能以文字、数据、...

    Visual Tkinter 使用VB设计python界面的可视化设计工具(终结版),目前最好用。

    这是一个VB6的IDE插件(Addin),使用VB6的IDE直接设计Python的界面。 Python和VB都是能让人快乐的编程语言,我使用了Python之后,很多自己使用的工具都使用Python开发或改写了,因为最终实现的Python代码实在太短了...

    c#使用进度条加载主界面

    采用进度条主界面,可详细反应主界面每一步加载情况(主要采用委托以及线程)

    锂离子电池固体电解质界面的界面效应

    一种特殊情况是固体电解质界面(SEI),这是一种由于电解质在阳极表面的不稳定性和随后的分解而形成的非均匀多组分膜。SEI起到钝化层的作用,阻碍电解质进一步分解,从而导致库仑效率不足。在这项工作中,我们使用第...

    简单计算器(使用C#和GUI界面操作)

    该计算器界面与Windows自带的计算器类似,至少要实现以下功能 (1)使用方法与Windows自带的计算器一样 (2)包含0~9这10个数字按钮以及小数点按钮 (3)包含加、减、乘、除按钮,实现实数间的加、减、乘、除运算 (4...

    界面测试checklist

    理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。 易用性细则: 1) 完成相同或相近功能的按钮用Frame框起来,常用按钮要支持快捷方式。 2) 完成同一功能或任务的元素放在集中位置,减少...

    C# 界面美化,可自定义界面(用自己的图片),附送IrisSkin,(内附源码)

    而我们开发的时候,大部分情况下,是需要定制自己的界面的。压缩包里包含了一个SkinEngine,有全部源代码,用Office2007做默认的Skin,你可以根据自己项目的需要,创建自己的图片,修改源代码,定制自己的界面,达到...

    python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例

    在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言。其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式,以达到美化...

    软件界面设计工具_3款合集

     UIDesigner除了能让使用者能够快速地搭建起软件界面的高保真原型外,还提供了项目管理,让使用者能够方便地管理工程文件;提供了图片库和模板库功能,让使用者可以方便地重用以前的设计资源;提供了32个Windows...

    界面设计模式 原版

    英文原版。本书清楚、简洁、引人入胜,以设计模式的形式总结处理界面设计法则,展现了常见设计问题的解决办法及其在...初级设计师则可以按照书中的指导直接使用这些模式,找到一条通往界面和交互设计领域的快捷之路。

    模拟银行的自动取款机使用过程中的界面和用户交互过程 实现查询银行卡余额、取款、修改密码、退出系统等功能

    模拟银行的自动取款机使用过程中的界面和用户交互过程。实现查询银行卡余额、取款、修改密码、退出系统等功能。 (1)卡号、密码输入最多三次,否则直接退出系统。 (2)取款功能:取款金额受卡余额、机单笔最大取款...

    基于matlab实现的热红外图像温度检测源码(含GUI界面)+详细注释.zip

    1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合...

    外部程序嵌入到Qt进程界面---附源码

    项目需要将一个外部软件嵌入自己编写的qt界面,类似于将外部程序当作自己软件的一个插件,以起到集成的目的。笔者这里用电脑自带的计算器为例。 传统做法: 1)首先打开需要的外部程序; 2)通过spy+获取的外部程序...

    Java图形界面编程模拟ATM自助取款系统

    4、用户查询余额及账户资金使用情况(账户收支情况) 5、用户转账功能 6、更改账户密码功能 7、退卡功能 本源代码简洁清晰,非常合适想学习Java图形界面的新手入门,代码均有注释,数据保存方式是文件的输入输出流

    打造自己的 C# WinForm 应用程序的 SQL Server 连接配置界面

    在C# WinForm 应用程序非常需要一个 SQL Server 连接配置界面,许多时候,因 SQL Server 服务器地址变更或 数据库登录账户 变更引起的连接失败等情况,客户就可能打电话“找麻烦”。既然这样,还不如提供一个可视化...

    多界面切换3.rar

    在labview中实现多界面之间切换,有多种方法,如 - 方法一:使用选项卡控件; ​ 说明:多个平行事件之间的切换时使用... 这里主要用方法三实现多界面的切换,注意,程序使用过程中需要对路径进行更新,否则会报错。

    MySkin SDK 界面修改工具包

    mySkin 界面修改工具是一个提供给程序开发人员的修改软件界面的小型函数库。它封装了Windows API , 并处理相应的Windows 消息,实现软件界面的修改功能。通过其简单的接口,程序开发人员可以方便地定制自己地软件...

Global site tag (gtag.js) - Google Analytics