高级软件工程(包含与聚合.ppt
《高级软件工程(包含与聚合.ppt》由会员分享,可在线阅读,更多相关《高级软件工程(包含与聚合.ppt(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、高级软件工程(包含高级软件工程(包含与聚合)与聚合)(1)包含与聚合简介)包含与聚合简介(2)包含的实现)包含的实现(3)聚合的实现)聚合的实现(4)例子)例子包含与聚合包含与聚合包含与聚合包含与聚合2(1)包含与聚合简介)包含与聚合简介包含(Containment)对象A对象BIYIXIX包含与聚合包含与聚合包含与聚合包含与聚合3对象对象 B 的成员函数在调用对象的成员函数在调用对象A的接口之前或之后的接口之前或之后可以进行其他一些操作可以进行其他一些操作IX提供的功能可以超过提供的功能可以超过IX对象对象B是对象是对象A 的客户的客户而对象而对象B的客户看到的只是对象的客户看到的只是对象B
2、显露出的接口(显露出的接口(IY、IX)对象对象A的创建与释放完全在对象的创建与释放完全在对象B内部进行内部进行对象对象A的生命期包含在对象的生命期包含在对象B的生命期内的生命期内包含与聚合包含与聚合包含与聚合包含与聚合4对象A对象B聚合(Aggregation)IYIX包含与聚合包含与聚合包含与聚合包含与聚合5可以将聚合看作是包含的一个特例可以将聚合看作是包含的一个特例更好地体现了复用更好地体现了复用 虽然对象虽然对象A直接向对象直接向对象B的客户提供服务的客户提供服务 但但 对象对象B的客户感觉不到对象的客户感觉不到对象A的存在的存在对象对象A的生存期受到对象的生存期受到对象B的控制的控制
3、实现聚合的关键在于实现聚合的关键在于 QueryInterface:当客户向对象当客户向对象B请求请求IX时时对象对象B的的QueryInterface返回对象返回对象A的的IX指针指针存在问题:存在问题:(1)从)从IX如何得到如何得到IY?(2)从)从IX得到的得到的Iunknown如何与从如何与从IY得到的得到的IUnknown 相同?相同?包含与聚合包含与聚合包含与聚合包含与聚合6包含的复用性建立在客户包含的复用性建立在客户/服务器模式上服务器模式上聚合的复用性需要内部构件提供支持聚合的复用性需要内部构件提供支持复用方式的选择:复用方式的选择:当内部构件提供的接口完全满足要求时当内部构
4、件提供的接口完全满足要求时使用聚合合适使用聚合合适当内部构件提供的接口与需求类似时当内部构件提供的接口与需求类似时使用包含合适使用包含合适在一个对象中可以同时使用两种复用方式在一个对象中可以同时使用两种复用方式包含与聚合包含与聚合包含与聚合包含与聚合7(2)包含的实现包含的实现假定假定IX、IY的定义分别为:的定义分别为:class IX:public IUnknown public:virtual HRESULT _stdcall FX()=0;class IY:public IUnknown public:virtual HRESULT _stdcall FY()=0;包含与聚合包含与聚合
5、包含与聚合包含与聚合8对象对象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();/IYHRESULT _stdcall FY();HRESULT Init();pri
6、vate:IX*m_pIX;包含与聚合包含与聚合包含与聚合包含与聚合9类类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)return E_FAIL;else return S_OK;HRESULT _stdcal
7、l CB:IX()return m_pIX-FX();包含与聚合包含与聚合包含与聚合包含与聚合10包含的主要用途:扩展接口包含的主要用途:扩展接口 假定想把一个假定想把一个 Iairplane接口扩展为接口扩展为 IFloatPlane:定义:定义:interface Iairplane:Iunknownvoid Takeoff();void fly();void Land();interface IFloatPlane:Iairplane void Float();void Sink();void Rust();void DrainBankAccount();包含与聚合包含与聚合包含与聚合包
8、含与聚合11(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:IUnknown*m_pUnknownInn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 软件工程 包含 聚合
限制150内