- 2
- 0
- 约3.33千字
- 约 22页
- 2017-12-23 发布于上海
- 举报
高级软件工程07包含与聚合
* 4、包含与聚合 如果一个构件B使用另外一个构件A 我们称使用者B为:外部构件 被使用者A为:内部构件 则:外部构件B包含(聚合)内部构件A 包含与聚合是COM的两种复用方式(模型) 为系统升级、扩展提供支持 包含与聚合 (1)包含与聚合简介 (2)包含的实现 (3)聚合的实现 (4)例子 包含与聚合 (1)包含与聚合简介 包含(Containment) 对象A 对象B IY IX IX’ 包含与聚合 对象 B 的成员函数在调用对象A的接口之前或之后 可以进行其他一些操作 IX’提供的功能可以超过IX 对象B是对象A 的客户 而对象B的客户看到的只是对象B显露出的接口(IY、IX’) 对象A的创建与释放完全在对象B内部进行 对象A的生命期包含在对象B的生命期内 包含与聚合 对象A 对象B 聚合(Aggregation) IY IX 包含与聚合 可以将聚合看作是包含的一个特例 更好地体现了复用 虽然对象A直接向对象B的客户提供服务 但 对象B的客户感觉不到对象A的存在 对象A的生存期受到对象B的控制 实现聚合的关键在于 QueryInterface: 当客户向对象B请求IX时 对象B的QueryInterface返回对象A的IX指针 存在问题: (1)从IX如何得到IY? (2)从IX得到的Iunknown 如何与从IY得到的IUnknown 相同? 包含与聚合 包含的复用性建立在客户/服务器模式上 聚合的复用性需要内部构件提供支持 复用方式的选择: 当内部构件提供的接口完全满足要求时 使用聚合合适 当内部构件提供的接口与需求类似时 使用包含合适 在一个对象中可以同时使用两种复用方式 包含与聚合 (2)包含的实现 假定IX、IY的定义分别为: class IX:public IUnknown{ public : virtual HRESULT _stdcall FX() =0; } class IY:public IUnknown{ public : virtual HRESULT _stdcall FY() =0; } 包含与聚合 对象B的定义为: class CB: public IX, public IY { protected: ULONG m__ref; public: CB(); ~ CB(); // IUnknown virtual HRESULT __stdcall QueryInterface(const IID iid, void** ppv) ; virtual ULONG __stdcall AddRef() ; virtual ULONG __stdcall Release() ; //IX HRESULT _stdcall FX(); //IY HRESULT _stdcall FY(); HRESULT Init(); private: IX *m_pIX; } 包含与聚合 类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 _stdcall CB::IX(){ return m_pIX-FX(); } 包含与聚合 包含的主要用途:扩展接口 假定想把一个 Iairplane接口扩展为 IFloatPlane: 定义:interface Iairplane: Iunknown{ void Takeoff(); void fly(); void Land(); } interface IFloatPlane: Iairplane { void Float(); void Sink(); void Rust(); void DrainBankAccount(); } 包含与聚合 (3)聚合的实现 对象B的定义为: class CB: public IY { protected: ULON
您可能关注的文档
- 醉翁亭记ppt教学课件.ppt
- 金字塔原理48pages.ppt
- 金字塔原理培训演示教材ppt.ppt
- 重庆铜锣湾生态旅游发展定位101PPT.ppt
- 金融学第八讲融资决策初步.ppt
- 金蝶KIS财务软件实.ppt
- 金融派生产品.ppt
- 针灸镇痛复件.ppt
- 路基路面工程第二章 行车荷载、环境、土.ppt
- 鉴赏诗歌意蕴ppt复习课件.ppt
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 时速160公里动力集中动车组动力车(177页).pptx VIP
- 全国李氏家族字辈.pdf VIP
- 2025储能场站运营的价值定位、运营模式和收益示例-202508v3.pdf VIP
- 小学科学《斜面》优质课件.docx VIP
- 串联型感应加热电源的自动负载匹配技术.pdf VIP
- 2025年新课标《义务教育数学课程标准(2022年版)》测试题及答案.docx VIP
- 老年人谵妄中西医结合诊疗专家共识.pdf VIP
- 膨胀土基坑复合土钉墙试验研究.pdf VIP
- 2021年江苏省无锡市天一高级中学高二物理下学期期末试卷含解析.docx VIP
- 《贵州省公路工程施工监理电子招标文件示范文本(试行)》2025.docx VIP
原创力文档

文档评论(0)