《对象与组件技术》

上传人:wt****50 文档编号:33103476 上传时间:2018-02-13 格式:DOC 页数:11 大小:58KB
返回 下载 相关 举报
《对象与组件技术》_第1页
第1页 / 共11页
《对象与组件技术》_第2页
第2页 / 共11页
《对象与组件技术》_第3页
第3页 / 共11页
《对象与组件技术》_第4页
第4页 / 共11页
《对象与组件技术》_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《《对象与组件技术》》由会员分享,可在线阅读,更多相关《《对象与组件技术》(11页珍藏版)》请在金锄头文库上搜索。

1、对象与组件技术课程自学指导及作业课程名称:对象与组件技术教学目标:通过对本门课程学习,使学生学习高级的编程技术和思想,巩固原有知识教材:com 原理与应用 ,潘爱民著,清华大学出版社出版社参考书目:com 本质论 ,潘爱民译著,中国电力出版社授课教师:王涛联系电话:13833263720邮箱:自学进度表周次 自学内容 作业完成内容1 类和对象基本概念 编写一个类2 多态的含义 编写虚函数3 对象和组件的基本概念 理解服务对象和接口4 学习简单的组件技术学会使用动态链接库来编写组件5 学习进程内组件 编写一个进程内组件6 学习包容和聚合的基本概念理解包容和聚合的作用和简单实现原理7 学习进程外组

2、件基本知识 编写进程外组件8 学习自动化 自动化基本含义课程自学要求及作业:第一章 类和对象基本概念本章学习目的与要求:学习 c+类和对象的基本概念和实现方式本章学习重点、难点及注意问题:类的编写基本方法,对象的调用。本章考核知识点:类,对象,继承。作业题:1、编写一个学生类,包括学号,姓名,年龄三个属性,并有一个显示的成员函数 diplay,在屏幕上打印出三个函数。答:#include#include#include class CStudentpublic:/构造函数CStudent();/重载构造CStudent(LPSTR szName, byte byAge, int nID);/析

3、构函数CStudent();protected:LPSTR m_szName; /学生姓名byte m_byAge; /学生年龄int m_nID; /学生学号/功能函数public:/学生信息void SetStudentInf(LPSTR szName, byte byAge, int nID);/获取学生信息void GetStudentInf(LPSTR /实现类方法CStudent:CStudent()m_szName = NULL;m_byAge = 0;m_nID = 0;CStudent:CStudent(LPSTR szName, byte byAge, int nID)m_

4、szName = szName;m_byAge = byAge;m_nID = nID;CStudent:CStudent()void CStudent:SetStudentInf(LPSTR szName, byte byAge, int nID)m_szName = szName;m_byAge = byAge;m_nID = nID;void CStudent:GetStudentInf(LPSTR &szName, byte &byAge, int &nID)szName = m_szName;byAge = m_byAge;nID = m_nID;void main()CStuden

5、t Student;Student.SetStudentInf(例子,22,1000);LPSTR lpName=NULL;byte byAge=0;int nID=0;Student.GetStudentInf(lpName,byAge,nID);printf(学生姓名:%s,年龄:%d,学号:%d,lpName,byAge,nID);getchar();2、写一个类 A,作为父类,有一个成员变量 x,类 B 共有继承类 A,有个成员 y。答:class APrivate int y;Class B Extents APrivate int y;第二章 多态的含义本章学习目的与要求:学习上溯

6、和虚函数。理解多态的含义本章自学重点、难点及注意问题:上溯的含义,多态本章考核知识点:上溯,多态,虚函数作业题:1、上溯是什么?答:就是将子类对象赋值给超类对象,看上去像父类的对象拥有的是父类成员变量,但是调用的确是子类的方法,这个方法是重构或者继承自父类而来的方法,从而可以完成自顶向下的调用过程。2、虚函数的作用是什么。答:虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,则它继承

7、其基类的虚函数。 3、有虚函数的类的对象的函数调用过程是什么。答:当调用一个对象的函数时,系统会直接去检查这个对象申明定义的类,即申明类,看所调用的函数是否为虚函数;如果不是虚函数,那么它就直接执行该函数。而如果有 virtual 关键字,也就是一个虚函数,那么这个时候它就不会立刻执行该函数了,而是转去检查对象的实例类;在这个实例类里,他会检查这个实例类的定义中是否有重新实现该虚函数(通过 override 关键字),如果是有,那么 OK,它就不会再找了,而马上执行该实例类中的这个重新实现的函数。而如果没有的话,系统就会不停地往上找实例类的父类,并对父类重复刚才在实例类里的检查,直到找到第一个

8、重载了该虚函数的父类为止,然后执行该父类里重载后的函数。第三章 对象和组件的基本概念本章学习目的与要求:学习组件的基本含义,学习 com 组件的基本内存模型本章自学重点、难点及注意问题:com 组件的基本内存模型,接口本章考核知识点:内存模型,接口。作业题:1、什么是组件,什么是 com?答:组件:组件(Component)是对数据和方法的简单封装一个组件就是一个从 TComponent 派生出来的特定对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。Com:所谓 COM(Componet Object Model,组件对象模型) ,是一种说明如何建立可动态互变组件的规范,此规范提

9、供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。2、接口是什么。答:接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能) 。 3、com 的基本内存模型是什么样的。答:AddRef 和 Release 实现的是一种名为引用计数的内存管理技术,这种技术是使组件能够自己将自己删除的最简单同时也是效率最高的方法。COM组件将维护一个称作是引用计数的数值。当客户虫组件取得一个接口时,此数值增 1,当客户使用完某个接口后,此数值将减 1。当此数值为 0 时,组件即可将自己从内存中

10、删除第四章 学习简单的组件技术本章学习目的与要求:学习利用 dll 去生成一个简单组件本章自学重点、难点及注意问题:dll 的编写过程,组件的编写过程本章考核知识点:clsid,dll,idd作业题:1、Iunkown 接口有几个函数,函数的作用都是什么?答:客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是 Iunkown,它的定义包含在Win32 SDK 中的 UNKOWN.h 头文件中;客户可以调用 QueryInterface 函数来决定组件是否支持某个特定的接口。所有的 COM 接口都需要继承 IUnkown,因而每个 COM 接口的

11、 vTable 中的前三个函数都是 QueryInterface、AddRef和 Release。这使得所有的 COM 接口都可以被当成 IUnkown 接口来处理。2、如何控制服务对象的生存周期答:COM 对象的生存周期分为两部分来讲:客户端与 COM 本身: 在客户端,视定义的 COM 对象接口而定,像我们例子中的 v_Obj,定义成全局变量,那么 COM 对象在创建时产生,只有在程序退出时才被释放。我们也可以在形式上将其释放,如:v_Obj:=nil,这样这个 COM 接口就无效了。在 COM 本身,COM 接口的通过记数的方式来完成 COM 的生存周期,COM 可能同时被多个程序所调用

12、。有一个程序连接到 COM 时计数器加 1,某个释放时计数器减 1,当计数器为 0 时,COM 对象才真正从内存中移除3、clsid 是什么,iid 是什么?答:CLSID 是指 windows 系统对于不同的应用程序,文件类型,OLE 对象,特殊文件夹以及各种系统组件分配一个唯一表示它的 ID 代码,用于对其身份的标示和与其他对象进行区分,IID 是:它是一个结构,接口标识符结构。IID 标识了客户所需的接口。每一个接口都有一个唯一的接口标识符。所以某个与 IID 相对应的接口绝对不会发生变化。接口 IID 决定了 COM 组件的版本。不同的接口具有不同的 ID,包括不同版本的接口。第五章

13、学习进程内组件本章学习目的与要求:学习进程内组件。本章自学重点、难点及注意问题:类厂的作用,组件建立和客户端调用过程。本章考核知识点:上溯,多态,虚函数作业题:1、进程内组件是如何实现的。客户端如何调用一个进程内组件的函数。答:客户:CLSID clsid;IClassFactory* pClf;IUnknown* pUnk;CoInitialize(NULL);CLSIDFromProgID(“组件名”,COM:COM 在注册表中根据“组件名”查找 ID客户:CoGetClassObject(clsid,CLSCTX_INPROC_SERVER,NULL,IID_IClassFactory,

14、(void*)COM:COM 在内存中根据类 ID 查找组件if (组件 DLL 还没被载入) COM 从注册表中获得 DLL 文件名COM 把组件 DLL 载入进程内存DLL 组件:if(组件刚被载入)全局厂对象被构造调用 DLL 的 InitInstance (MFC)COM:COM 根据传给 CoGetClassObject 的 CLSID 值来调用 DLL 的全局导出函数 DLL GetClassObjectDLL 组件:DLLGetClassObject 返回 IClassFactory*COM:COM 为客户返回 IClassFactory*客户:pClf-CreateInstan

15、ce(NULL,IID_IUnknown,(void* DLL 组件:类厂的 CreteInstance 函数被调用(通过组件的 Vtable 直接调用)构造“组件名”类的对象返回请求的接口指针客户:pClf-Release( );pUnk-Release( );DLL 组件:通过 Vtable,”组件名”的 Release 被调用if (refcount = 0)对象自身被析构客户:CoFreeUnusedLibraries( );COM:COM 调用 DLL 的全局导出函数 DLLCanUnloadNowDLL 组件:DLLCanUnloadNow 被调用,if(所有 DLL 的对象被析构

16、)return TRUE;客户:CoUninitialize( );COM:COM 释放资源客户:客户退出DLL 组件:若 DLL 仍然在内存中,而无其它程序使用它,Windows 把它卸载。2、 类厂是什么?答:类厂是另外一种类型的工厂,在这种“工厂”中我们可以制造出所需的组件,这种工厂被称作是类厂。类厂实际上也是一个组件。第六章 学习包容和聚合的基本概念本章学习目的与要求:学习包容和聚合。本章自学重点、难点及注意问题:包容和聚合本章考核知识点:包容聚合作业题:1、包容是什么,怎么实现的。答:包容是外部组件包含指向内部组件接口的指针.外部组件相对来说是内部组件的一个客户,它将使用内部组件的接口来实现它自己的接口;实现起来主要通过外部组件完全控制内部组件的生存期,外部组件内部维护

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号