高级软件工程07(包含与聚合).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《高级软件工程07(包含与聚合).ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 软件工程 07 包含 聚合
- 资源描述:
-
1、14、包含与聚合、包含与聚合如果一个构件如果一个构件B使用另外一个构件使用另外一个构件A我们称使用者我们称使用者B为:外部构件为:外部构件 被使用者被使用者A为:内部构件为:内部构件则:外部构件则:外部构件B包含(聚合)内部构件包含(聚合)内部构件A包含与聚合是包含与聚合是COM的两种复用方式(模型)的两种复用方式(模型)为系统升级、扩展提供支持为系统升级、扩展提供支持2(1)包含与聚合简介)包含与聚合简介(2)包含的实现)包含的实现(3)聚合的实现)聚合的实现(4)例子)例子3(1)包含与聚合简介)包含与聚合简介包含(Containment)对象A对象BIYIXIX4对象对象 B 的成员函数
2、在调用对象的成员函数在调用对象A的接口之前或之后的接口之前或之后可以进行其他一些操作可以进行其他一些操作IX提供的功能可以超过提供的功能可以超过IX对象对象B是对象是对象A 的客户的客户而对象而对象B的客户看到的只是对象的客户看到的只是对象B显露出的接口(显露出的接口(IY、IX)对象对象A的创建与释放完全在对象的创建与释放完全在对象B内部进行内部进行对象对象A的生命期包含在对象的生命期包含在对象B的生命期内的生命期内5对象A对象B聚合(Aggregation)IYIX6可以将聚合看作是包含的一个特例可以将聚合看作是包含的一个特例更好地体现了复用更好地体现了复用 虽然对象虽然对象A直接向对象直
3、接向对象B的客户提供服务的客户提供服务 但但 对象对象B的客户感觉不到对象的客户感觉不到对象A的存在的存在对象对象A的生存期受到对象的生存期受到对象B的控制的控制实现聚合的关键在于实现聚合的关键在于 QueryInterface:当客户向对象当客户向对象B请求请求IX时时对象对象B的的QueryInterface返回对象返回对象A的的IX指针指针存在问题:存在问题: (1)从)从IX如何得到如何得到IY?(2)从)从IX得到的得到的Iunknown如何与从如何与从IY得到的得到的IUnknown 相同?相同?7包含的复用性建立在客户包含的复用性建立在客户/服务器模式上服务器模式上聚合的复用性需
4、要内部构件提供支持聚合的复用性需要内部构件提供支持复用方式的选择:复用方式的选择:当内部构件提供的接口完全满足要求时当内部构件提供的接口完全满足要求时使用聚合合适使用聚合合适当内部构件提供的接口与需求类似时当内部构件提供的接口与需求类似时使用包含合适使用包含合适在一个对象中可以同时使用两种复用方式在一个对象中可以同时使用两种复用方式8(2)包含的实现包含的实现假定假定IX、IY的定义分别为:的定义分别为:class IX:public IUnknown public : virtual HRESULT _stdcall FX() =0;class IY:public IUnknown publ
5、ic : virtual HRESULT _stdcall FY() =0;9对象对象B的定义为:的定义为:class CB: public IX, public IY protected: ULONG m_ref;public: CB(); CB(); / IUnknownvirtual HRESULT _stdcall QueryInterface(const IID& iid, void* ppv) ;virtual ULONG _stdcall AddRef() ;virtual ULONG _stdcall Release() ;/IXHRESULT _stdcall FX();/I
6、YHRESULT _stdcall FY(); HRESULT Init();private:IX *m_pIX;10类类B的实现:的实现: CB:CB()m_pIX = null;m_Ref = 0; CB:CB()if (m_pIX != null) m_pIX-Release();HRESULT CB:Init() HRESULT result = :CoCreateInstance(CLSID_ComponentA,null, CLSCTX_INPROC_SERVER,IID_ISomeInterface,(void *)&m_pIX);if (FAILED(result) retur
7、n E_FAIL;else return S_OK;HRESULT _stdcall CB:IX() return m_pIX-FX();11包含的主要用途:扩展接口包含的主要用途:扩展接口 假定想把一个假定想把一个 Iairplane接口扩展为接口扩展为 IFloatPlane:定义:定义:interface Iairplane: Iunknownvoid Takeoff();void fly();void Land();interface IFloatPlane: Iairplane void Float();void Sink();void Rust();void DrainBankAc
8、count();12(3)聚合的实现聚合的实现对象对象B的定义为:的定义为:class CB: public IY protected: ULONG m_ref;public: CB(); CB(); / IUnknownvirtual HRESULT _stdcall QueryInterface(const IID& iid, void* ppv) ;virtual ULONG _stdcall AddRef() ;virtual ULONG _stdcall Release() ;/IYHRESULT _stdcall FY(); HRESULT Init();private:IUnkn
展开阅读全文