组件技术潘爱民北京大学计算机研究所2002-9-13内容关于本课程软件技术的发展当前软件状况COM和CORBA简介本课程的内容和安排(optional)基础:C++Overview关于本课程历史:2001年上半年第一次开设课程–请参考–这学期的变化和调整缩小COM部分的比重,加强Patterns部分的比重–还有将来吗动机:–加强基础–展示最新软件技术–提高软件设计能力课程的风格计算机科学的本质计算机的定义–冯-诺伊曼定义:defineacomputerasadevicethatacceptsdata,processesdata,storesdata,andproducesoutput.–指令流处理方式本质:–动态——计算–静态——存储软件领域的发展程序设计方法的发展软件需求的变化软件环境的变化软件开发模式的变化程序设计方法的发展功能分解法——计算任务结构化程序设计——以数据为中心面向对象程序设计——以对象为中心组件程序设计——以组件为中心综合使用软件需求的变化计算实用管理(MIS)分布式系统软件环境的变化单任务多任务文字界面图形界面单线程多线程平台相关跨平台单机(本地)网络(分布式)单一语言多种语言软件开发模式机器码高级语言和脚本代码OS+Compiler+EditorOS+Compilers+IDEs+Libraries+Wizards+Components+otherinforstructures+经验发展变化的结果软件学科的形成不变因素:–计算机的基本运作模式探求新的计算模型–量子计算——软件学科怎么办?–生物信息学(?)回顾软件学科10多年来的变化软件的产生过程:原始代码-编译-Link-终代码、脚本—混合软件的分发过程:文档、说明书、自动安装工具、培训、升级软件工程:需求-〉分析-〉设计-〉code-test-使用对象技术和组件技术的不断普及,与大环境发展相结合对象技术用一种新的思路来看待问题–10多年的发展证明了OO符合软件的规律–对象技术的发展需要开发工具和开发语言的支持三大特性:封装性、继承性、多态性两种思想–Object-Based–Object-Oriented组件技术组件技术适合于现代的软件环境–软件更新快、规模大、强调协作等–组件的概念、软件IC组件的可独立发布性要求“接口与实现分离”组件infrastructure,组件体系–COM、CORBA(和Java)中间件(middleware)市场国内的状况在对象技术和组件技术方面,国内落后问题:–好的技术没能及时引进来(怎么引进来?)–缺乏好的教材、技术杂志、技术书籍(?)–缺乏良好的教育环境和工业环境基础编译过程,程序产生的过程–回归“冯-诺伊曼”模型C++之必要性:–最能反映对象技术、组件技术的核心概念–存在的问题:缺乏好的书籍(?)国内的应用领域不够广泛(?)概念:类、对象类是定义,它封装了状态和操作对象是实例,它反映了具体的事物对象由类来定义一个对象可以与多个具有继承关系的类相联系概念:组件定义:可独立发布的二进制单元有的地方称作“package”容易混淆:–服务器(server)、对象例如:–COM组件、JavaApplet概念:reuse(重用、复用)软件设计的目标不同形式的reuse不同层次的reuse例子:–类库、中间件概念:接口与实现分离Interfaceandimplementation对象技术和组件技术都强调接口是对象或者组件的通信协议实现是对象或者组件的内部细节接口的发布客户只关心接口概念:decouple去耦尽可能地消除软件之间或者软件的不同部分之间的联系是软件设计的重要手段,也是目标不同层次上的decouple概念:多态性(polymorphism)对象技术中的重要概念以一致的方式来看待不同的事物在C++中,通过继承和虚成员函数来实现运行时刻绑定:runtimebinding–区分两个词:overloadvs.override在组件技术中,通过接口来体现概念:module模块不同层次上有不同的定义在Windows和Linux中,指可独立装载的二进制代码单元有些操作与模块相关概念:模板(template)函数模板和类模板抽象层次更高泛型技术(genericprogramming)已纳入C++标准之中例子:–STL、ATL概念:C/S和多层结构这是指软件的结构C/S是基础多层结构具有较好的灵活性和可扩展性多层结构与基于组件的系统相结合变种:–B/S概念:其他现代软件的发展形成了很多重要的概念掌握这些概念对于提高自己的软件理解水平非常重要防止混淆和滥用概念软件形式单机软件–整体发布Client/Server软件–简单的网络应用分布式软件软件发展面临的问题软件的复杂度增加–代码开发管理软件升级和更新–牵一而发动全身?分布式软件的发布和配置–用户需要培训,程序员和设计人员更需要软件发展面临的问题(续)Custom-madeversusstandardsoftware–如何平衡?依赖于全才开发人员–软件层次划分软件的可扩展性–用户可定制、脚本支持与标准接轨–如Web——〉B/S软件发展趋势组件软件、软件组件–中间件市场已经形成软件基础设施的重要性–经验和成果的重用软件的可重用性要求–重用粒度不同API的多样化软件方案(solution),consulting市场组件软件部分升级–补丁–缩短软件的更新周期增加了异构软件的可能–标准接口、标准规范、标准协议动态组合,提高软件生产力符合现代软件的发展要求软件组件关键:接口设计–接口不变性–接口可扩展性对基础设施的依赖–COM、CORBA、...内部独立设计、独立开发独立发布、独立测试基础设施:组件体系COM(ComponentObjectModel)–93年发布,脱胎于MS的OLE–规范+实现CORBA(CommonObjectRequestBrokerArchitecture)–91年第1版,OMG(ObjectManagementGroup)–规范+实现COM:组件对象模型建立在二进制层次上的标准–许多概念与C++的特征相似,如vtable–程序与程序之间的通信建立在此基础上COM规范–平台无关–定义了大量的标准接口用于各种用途COM实现–平台相关–Windows实现了规范要求以及许多辅助功能COM特性语言无关–规范和实现都是语言无关的进程透明——〉位置透明–inprocserver、out-of-procserver可重用性多线程特性可扩展性COM:接口COM接口–IID:128位整数–接口定义语言COMIDL–对应于C++中由纯虚函数组成的类–单继承,基接口:IUnknownCOM接口特性:–接口不变性–继承性–多态性——运行时刻的多态性COM:对象COM对象–CLSID–实现多个接口COM对象特性:–身份确定–封装–可重用ObjectIUnknownInterface1Interface2COM:组件COM对象的载体–包含多个COM对象进程内组件–DLL–ExportEntrys进程外组件–IPC:RPC/LPCCOM:进程内组件Inprocserver–ExportEntrys客户组件COM:进程外组件Out-of-procserver客户COM运行库安全提供器LPCDCERPCCOM运行库安全提供器LPCDCERPC组件客户程序(客户进程)代理对象组件程序(组件进程)存根代码LPC/RPC组件对象COM:远程组件remoteserver客户COM运行库安全提供器协议栈DCERPCCOM运行库安全提供器协议栈DCERPC组件DCOM网络协议COM:组件信息发布注册表–发布组件的信息、对象的信息、接口的信息等注册工具和配置工具–Regsvr32.exe–.reg–自注册-RegServer–DCOMCNFG.EXE–MTSExplorer、活动目录COM:创建COM对象对象的创建过程客户组件COM库(OLE32.DLL)SCM(RPCSS.EXE)SCM(RPCSS.EXE)RPC调用创建函数远程创建创建进程和对象COM:COM对象管理客户使用规则,控制对象生命周期COM实现优化–各种辅助手段组件类别componentcategoryMTS和COM+COM:COM体系基本的功能扩展功能–连接点–结构化存储–名字服务–自动化–其他COM+COM:COM+建立在COM的基础上,COM的自然延伸Services–事件服务–队列服务–事务服务–负载平衡–其他COM:应用OLEActiveXcontrol脚本功能扩展OLEDBADSIASP其他COM:分布式应用COM/COM+为基于Windows的分布式应用提供了基础设施–Transaction–Security–OLEDB–Web–集成ActiveDirectory–管理功能CORBAOMG,800多家厂商联合制定的标准–91年1.0,主要是C语言映射–95年2.0,加入IIOP–目前最新版本3.0CORBA规范–制订了互操作规范,上层标准协议–一系列映射到多种语言的规范–各种服务相关的规范CORBA实现:ORBCORBA体系结构CORBA:跨平台、跨语言典型的语言:C++语言、Java语言、Smalltalk多种平台–关键:IOR(InteroperableObjectreference)ORB实现部分ORB实现商业ORB–Orbix,IONA公司–Visibroker,Inprise公司,4.0版完全支持2.3规范Netscapecommunicator浏览器嵌入Visibroker自由ORB–ORBit,遵循CORBA2.2规范,支持C语言,性能较高–mico,GNU,OpenSource–TAO,美国华盛顿大学分布式对象计算研究小组–omniORB,AT&T剑桥实验室国产ORB–国防科大的嵌入式CORBA(eBus)–东南大学的ORBUSCORBA:客户客户通过stub或者CORBA库与对象或者ORB进行通信CORBA:对象对象与OA进行通信CORBA:C++映射开发过程编写IDLIDL-〉C++利用生成的stub类编写客户利用生成的impl类编写服务器对象{以字符串形式传递OR}CORBA:核心CORBAIDL–支持多继承–支持结构化数据类型字符串形式的ORPOA–CORBA对象的环境context–策略设置CORBA:核心GIOP(GeneralInter-ORBProtocol)–互操作协议框架–IIOP(InternetInter-ORBProtocol)IOR–CORBA对象的标识实现仓库、接口仓库–未标准化CORBA:服务命名服务–层次命名–绑定TradingService–功能更强、使用更灵活的对象查询服务事件服务–事件发送方和接受方之间的decouple课程内容(一)准备知识–组件技术介绍–C++基础(略)课程内容(二)COM/DCOM/COM+(缩减一部分)–COM接口和IDL–COM对象和COM实现–COM重用性和COM跨进程实现–自动化和脚本技术–COM开发–COM连接点、命名和绑定技术–结构化存储和统一数据传输–DCOM和ActiveX控制–COM+课程内容(三)设计模式–参考“设计模式”一书–增加一些其他与模式相关的内容CORBA介绍中间插1-2次新技术报告考核办法作业(50%)–2-3次考试(50%)课程参考书目《COM原理与应用》《COM本质论》《COM技术