体系结构的基本问题-1面向对象的设计模式-2软件系统的框架与体系结构-3MVC结构与用户界面设计-4基于构件的软件体系结构-5从需求分析到系统设计过程-6软件系统设计规范管理-7第五部分软件体系结构与系统概要设计第五部分软件体系结构与系统概要设计第五章基于构件的软件体系结构构件对象模型COM/DCOM-5.1三种构件模型COM+/CORBA/EJB-5.2基于构件的框架与体系结构-5.35.1构件对象模型COM/DCOMCOM/DCOM的由来庞大和复杂的、集中式的系统分解为独立、相互协作的多个模块的组合模块具有独立结构和功能,可通过接口相互协作模块可单独设计、开发、编译、测试和维护当硬件/软件环境、用户需求变化时,可只对个别模块进行修改,重新组装后就得到新系统提高软件复用度,加快软件开发的效率和质量提高部件的互操作性,既使部件的组装更简单,使已有部件的复用度提高Internet的发展,为分布式计算,提供了更大的可能以上三个主要原因,导致COM组件技术的发展概念:组件COM(ComponentObjectModel)组件对象模型DCOM(DisstributedCOM)分布式组件对象模型定义:基于面向对象概念的部件操作互连和通信的、可独立发布的二进制模型组件不是一种设计方法,而是一种支持可组装的、可执行代码的结构标准COM三个主要组成部分:COM组件:可独立发布的二进制组件,在Windows平台上为DLL或者EXECOM对象:通过COM接口提供服务COM接口:客户与对象之间的协议,对象实现COM接口,客户使用COM接口COM/DCOM组件技术更适合于现代的软件环境软件更新快、规模大、强调协作等组件的概念:发展一种软件IC组件的核心,是基于本地过程调用LPC、远程过程调用RPC和标准操作接口的系统互连的工业标准COM/DCOM的独立发布性实现了“接口与实现分离”,成为在Internet上实现多层体系结构的支持技术组件体系COM/DCOM/COM+、CORBA、EJB/J2EE向中间件(middleware)发展概念:组件组件软件部分升级:补丁——缩短软件的更新周期增加异构的可能:标准接口、标准规范、标准协议动态组合,提高软件生产力,符合现代软件发展要求关键:接口设计接口不变性接口可扩展性内部独立设计、独立开发独立发布、独立测试基础设施:组件体系COM(ComponentObjectModel)93年发布,脱胎于MS的OLE规范+实现CORBA(CommonObjectRequestBrokerArchitecture)91年第1版,OMG(ObjectManagementGroup)规范+实现EJB(EnterprisejavaBeans)J2EE中有关构件的规约COM:组件对象模型建立在二进制层次上的标准许多概念与C++的特征相似,如vtable程序与程序之间的通信建立在此基础上COM规范平台无关定义了大量的标准接口用于各种用途COM实现平台相关Windows实现了规范要求以及许多辅助功能COM:特性语言无关规范和实现都是语言无关的进程透明——〉位置透明inprocserver、out-of-procserver可重用性多线程特性可扩展性COM:结构组件的对象特征:组件是对象,是类的实例组件是一种对象:组件由内部数据成员和操作方法组成数据成员维持了组件的运行状态,反映了组件的生存周期操作方法是组件提供给外部的操作函数的集合组件是类的实例:组件只能通过其类的实例化后,才能运行在请求组件服务前,必须首先对组件实例化根据设计的不同,分为组件实例和实例代理。组件实例对应动态链接库DLL,实例代理对应执行程序EXE。COM:用户特性COM的用户特性组件可以有多个接口,只能用户通过接口访问组件对组件的用户而言,组件的运行是一个客户/服务器结构ObjectIUnknownInterface1Interface2从用户看,组件是可能不知道在网络什么地方的一个可提供应用逻辑操作的服务器,可多用户访问。组件作为应用服务器,应支持多线程、同/异步调用等复杂控制COM:接口接口定义COM组件规范采用OSF(OpenSoftwareFoundation,开放软件基金)的DCE规范,描述远程过程调用的接口描述语言IDL(InterfaceDescriptionLanguage)的技术上,进行扩充形成的。IDL是一种不依赖任何程序语言的接口描述方法全局唯一标识符GUID(GloballyUniqueIDentifier)GUID是一个128位的整数,唯一地标识COM对象或接口IID(InterfaceIdentifier)每一个接口,都有IIDCOM接口具有不变性、只允许单继承COM对象可实现多个COM接口,这体现了COM的多态性,这些接口都由基接口IUnknown管理基接口IUnknown是所有COM对象都必须实现的接口,其他接口继承此基接口COM:进程类型COM对象的载体组件的主体服务代码和使用组件的代码可以在同一个进程中,也可以不在为此,组件实现有二种进程模型进程内组件DLL:在加载运行时,被自动安装在启动和应用它的进程中,在同一个进程空间中运行进程外组件组件是执行程序EXE组件是DLL,但在远程,通过RPC实现COM:进程内与进程外组件进程内客户组件客户COM运行库安全提供器LPCDCERPCCOM运行库安全提供器LPCDCERPC组件进程外,但同一节点COM:远程组件进程外不同节点的外部组件客户COM运行库安全提供器协议栈DCERPCCOM运行库安全提供器协议栈DCERPC组件DCOM网络协议COM:COM构件与客户机的通信机制客户进程LPC/RPC客户机应用进程内对象进程内构件对象代理COM组件程序本地/远程服务器进程桩COM本地对象本地构件(1)按IDL格式定义接口,并经编译后产生二个DLL,在用户本地的叫代理(Proxy),在服务器端(本地/异地)的叫桩(Stub)(2)客户程序与代理为同一进程,桩与COM在服务器进程(3)LPC/RPC只在代理和桩之间进行通信(4)代理和桩负责在用户进程与COM间进行参数和结果的翻译、传递和返回COM实现:COM库COM库是COM标准的系统级实现,为COM对象的标识和创建、内存管理、构件程序的卸载等,提供了一组标准的接口和辅助函数在WINDOWS系统中,COM库主要包括OLE32.DLL和RPCSS.EXE文件。他们的产生过程如下:客户组件COM库(OLE32.DLL)SCM(RPCSS.EXE)SCM(RPCSS.EXE)RPC调用创建函数远程创建创建进程和对象COM实现:注册表系统注册表全操作系统范围发布组件信息、对象信息、接口信息的仓库是用户程序、构件程序、COM库交互上述信息的场所注册工具和配置工具Regsvr32.exe.reg自注册-RegServerDCOMCNFG.EXEMTSExplorer、活动目录COM:远程COM对象激活过程客户机注册表CLSIDCOM库类对象对象构件SERVER.DLL①客户调用②COM库定位所请求的类对象③构件被启动④类对象创建成功后将指针经COM库返回给客户⑤客户通过接口创建COM对象实例⑥对象被创建⑦将接口指针返回给客户机COM+在COM的基础上,随着WindowsNT4.0的发布,COM发展到网络分布环境,产生了DCOMDCOM增加了位置透明、网络安全、跨平台调用等。由于对用户透明,因此,可以看成是COM在网络上的自然延伸为支持COM/DCOM的企业应用,MS在NT4.0SP4以后,推出了MTS(MicrosoftTransactionServer,微软事务服务器),把应用系统的客户程序、应用构件和资源,有机的结合起来,弥补了COM/DCOM的不足以后,MS又推出了DNA(DistributedinterNetApplicationArchitecture,分布式网络应用体系结构),包含工具、数据库、操作系统、编程模型和应用服务等5.2三种主要的组件模型1:COM系列COM+在新的企业应用体系结构下,MS进一步把COM/DCOM、MTS统一起来,这就是COM+COM+可以看成是基于操作系统和分布式企业应用之间的“中间件”COM+基本结构5.2三种主要的组件模型COM+COM+目录负载平衡驻留内存数据库对象池新的事件模型构件管理和部署JIT激活MTS事务支持资源分发管理安全模型易于开发和管理远程支持DCOM分布式构件服务COM基于接口的变成模型基本的构件服务5.2三种主要的组件模型2:CORBACORBA(CommonObjectRequestBrokerArchitecture)公共对象请求代理体系结构OMG,800多家厂商联合制定的标准91年1.0,主要是C语言映射95年2.0,加入IIOP,目前最新版本3.0体系结构最完整、最清晰、跨平台最多CORBA规范通过接口定义语言IDL定义接口使用不同编译语言和编译器实现构件通过对象请求代理ORB,连接,形成跨平台应用CORBA实现:ORB(ObjectRequestBroker)CORBA体系结构接口仓库IDL编译程序实现仓库客户机对象实现DII客户桩ORB接口实现骨架DSIORB内核GIOP/IIOP对象适配器输入参数输出参数+回送值CORBA:跨平台、跨语言典型的语言:C++语言、Java语言、Smalltalk多种平台关键:IOR(InteroperableObjectreference)ORB实现部分ORB实现商业ORBOrbix,IONA公司Visibroker,Inprise公司,4.0版完全支持2.3规范Netscapecommunicator浏览器嵌入Visibroker自由ORBORBit,遵循CORBA2.2规范,支持C语言,性能较高mico,GNU,OpenSourceTAO,美国华盛顿大学分布式对象计算研究小组omniORB,AT&T剑桥实验室国产ORB国防科大的嵌入式CORBA(eBus)东南大学的ORBUSCORBA:客户客户通过stub或者CORBA库与对象或者ORB进行通信CORBA:对象对象与OA进行通信CORBA:C++映射开发过程编写IDLIDL-〉C++利用生成的stub类编写客户利用生成的impl类编写服务器对象{以字符串形式传递OR}CORBA:核心CORBAIDL支持多继承支持结构化数据类型字符串形式的ORPOACORBA对象的环境context策略设置CORBA:核心GIOP(GeneralInter-ORBProtocol)互操作协议框架IIOP(InternetInter-ORBProtocol)IORCORBA对象的标识实现仓库、接口仓库未标准化CORBA:服务命名服务层次命名绑定TradingService功能更强、使用更灵活的对象查询服务事件服务事件发送方和接受方之间的decouple用C++开发CORBA应用基本的C++知识,包括链表结构、智能指针的知识针对当前使用的ORB产品,熟悉对于基本数据类型的支持,以及这些类型与当前平台上各数据类型的关系理解CORBA的client/server应用模型包含头文件链接库文件掌握IDL编译器掌握ORB接口如何传递对象引用ORB接口初始:CORBA::ORB_Init,通过命令行传递参数对象引用到字符串的转换操作对象引用:CORBA::Object获得初始接口resolve_initial_reference用C++开发CORBA应用:客户用IDL生成stub代码以及类型定义头文件在客户的main函数中,初始化orb,获得orb对象获得对象引用,并调用_nar