(计算机软件与理论专业论文)软件产品线技术在数控系统软件集成上的研究.pdf_第1页
(计算机软件与理论专业论文)软件产品线技术在数控系统软件集成上的研究.pdf_第2页
(计算机软件与理论专业论文)软件产品线技术在数控系统软件集成上的研究.pdf_第3页
(计算机软件与理论专业论文)软件产品线技术在数控系统软件集成上的研究.pdf_第4页
(计算机软件与理论专业论文)软件产品线技术在数控系统软件集成上的研究.pdf_第5页
已阅读5页,还剩85页未读 继续免费阅读

(计算机软件与理论专业论文)软件产品线技术在数控系统软件集成上的研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

捅费 摘要 本文讨论的是基于软件产品线技术的数控软件产品集成。 数控机床种类千变万化,同一种类机床的不同规格系列也不尽相同,这导 致了控制每种机床的软件产品也是多种多样的。然而数控机床的基本运行原理 又是相近的,构成数控系统软件的基本框架大都类似。为提高数控系统软件的 生产效率,避免生产过程中的重复劳动,我们对使用软件产品线技术来集成数 控软件产品,进行了初步的探索。 本文首先简要回顾了几十年来软件复用所走过的历程,对软件产品线的关 键技术做了简要的概述。 可复用组件是软件产品线的核心资产之一,组件模型是实现组件对象模型 的一套编程规范。在本课题中所用到的组件采用的是e z c o m 组件对象模型, 它是微软c o m 组件对象模型的一个超集,因此本文对以上两种组件规范做了 阐述。组件库是为组织、存储和管理可复用组件而开发的,是实现产品线所必 须的管理工具。本文详细说明了组件库的刻面分类方法及组件库的体系结构设 计,并给出了组件库的简要实现。 接着对典型数控产品软件进行了分析,依据并修改了原有的一个数控软件 体系结构,分离出了数控软件共有部分的组件和差异部分的组件,将每个组件 及一些组件组合而成的子体系结构表达为特征,采用一种基于x m l 的特征描述 语言( x m lb a s e df e a t u r ed e s c r i p t i o nl a n g u a g e ,x f d l ) 来描述整个产品族 的特征,并简要介绍了集成工具的实现。 最后介绍了以本课题实现的产品线原型集成出的两套典型的数控系统产 品:数控车床和数控冲床软件产品。 关键字产品集成;软件产品线:组件;组件库;特征描述语言 北京工业大学工学硕士学位论文 a b s t r a c t t h i sp a p e ri sf o c u s e do ni n t e g r a t i n gn u m e d c a lc o n t r o ls y s t e ms o f t w a r eb a s e do n t h et e c h n o l o g yo fs o f t w a r ep r o d u c tl i n e s a si sk n o w nw e l lt h a tal o to fn u m e d c a fc o n t r o im a c h i n e se x i ti nt h ew o r l da n d s o m es p e c i f i c a t i o n si sm a d ef o re a c ho n e a sa r e s u l t t h e r e a r ea l lk i n d so f n u m e r i c a lc o n t r o ls y s t e ms o f t w a r ef o rc o n t r o l l i n ge a c hk i n do fm a c h i n e h o w e v e r ,n o t o n l yt h er u n n i n gp r i n c i p l e so fn u m e r i c a lc o n t r o ls y s t e m b u ta l s ot h es t r u c t u r e so f n u m e r i c a lc o n t r o ls y s t e ms o f t w a r ea r ea l la l i k e i no l d e rt oi m p r o v i n gt h ep r o d u c t i v i t y o fn u m e r i c a lc o n t r o ls y s t e ms o f t w a r ea n da v o i d i n gr e p e a t e dw o r k w ed i s c u s st h e p o s s i b i l i t yo fa p p l y i n gs o f t w a r ep r o d u c tl i n e st oi n t e g r a t i n gn u m e r i c a lc o n t r o ls y s t e m s o f t w a r e p r o d u c t s f i r s t l y w er e v i e wt h ec o u r s eo fs o f t w a r er e u s ed u r i n gd e c a d e s ,a n ds t a t et h ek e y t e c h n o l o g yo fs o f t w a r ep r o d u c ti i n e si nb r i e f r e u s a b l ec o m p o n e n t sa r eo n eo ft h ec o r ea s s e t so fs o f t w a r ep r o d u c ti i n e s a n d c o m p o n e n to b j e c tm o d e li s as p e c i f i c a t i o no fp r o g r a m m i n g i nm y t h e s i s ,w ea p p l y e z c o m ,w h i c hi s a s u p e r s e to fm sc o mt h e r e f o r e ,w ei n t r o d u c et h e s et w o c o m p o n e n ts p e c i f i c a t i o n s i n d e t a i l ,c o m p o n e n tl i b r a r y i sat o o l t h a ti su s e df o r o r g a n i z i n g ,c l a s s i f y i n ga n ds t o r i n gc o m p o n e n ti n f o r m a t i o na n di t i s n e c e s s a r yf o r i m p l e m e n t i n gas o f t w a r ep r o d u c tl i n e s i nt h i sp a p e r w ee x p l a i nt h ef a c e t b a s e d c l a s s i f i c a t i o n p a n e ma n dt h ed e s i g no fs o f t w a r ea r c h i t e c t u r ei nc o m p o n e n tl i b r a r y f i n e l y ,t h ei m p l e m e n to fi ti ss h o w n t h e n a i m i n ga tt y p i c a ln u m e r i c a lc o n t r o ls y s t e ms o f t w a r e ,a n a l y s i si sd o n ea n d l e g a c ya r c h i t e c t u r ei sm o d i f i e dt oa d a p tt os o f t w a r ep r o d u c tl i n e s w et h ec o m m o n p a r ta n dt h ev a r i a b l ep a r ti nt h i sm o d i f i e da r c h i t e c t u r e ,a n df e a t u r e se x p r e s se v e r y c o m p o n e n ta n ds o m es u b - a r c h i t e c t u r e al a n g u a g eb a s e do nx m li su s e df o r d e s c r i b i n gf e a t u r e so f o v e r a l lp r o d u c t f a m i l ya n d a ni n t e g r a t i o nt o o li sp r e s e n t e d i nt h ee n d 。t w ok i n do ft y p i c a ln u m e n c a lc o n t r o ls y s t e ms o f t w a r e :n u m e r i c a lc o n t r o l l a t ha n dn u m e r i c a lc o n t r o lp u n c h w h i c ha r eg e n e r a t e db yo u ri n t e g r a t i o nt o o l ,a r e d e m o n s t r a t e d k e yw o r d s :p r o d u c ti n t e g r a t i o n ;s o f t w a r ep r o d u c tl i n e s ;c o m p o n e n t ;c o m p o n e n t l i b r a r y ;f e a t u r ed e s c r i p t i o nl a n g u a g e i i 独创性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研 究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其 他人已经发表或撰写过的研究成果,也不包含为获得北京工业大学或其它教育 机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何 贡献均已在论文中作了明确的说明并表示了谢意。 签名:雌 日期:护镡6 藏锣 关于论文使用授权的说明 本人完全了解北京工业大学有关保留、使用学位论文的规定,即:学校有 权保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部 或部分内容,可以采用影印、缩印或其他复制手譬保存论文。 ( 保密的论文在解密后应遵守此规定) 签名:哗导师签名:点4 年日期:知e 斗每6 月千盆 第l 章绪论 1 1 软件生产现状 第1 章绪论 1 9 6 8 年,在北大西洋公约组织( n o r t ha t l a n t i ct r e a t yo r g a n i z a t i o n ,简 称n a t o ) 的软件工程会议上,d o u gm c l l r o y 正式提出了软件复用( s o f t w a r e r e u s e ) 的概念。自软件复用的概念提出以来,3 0 多年过去了,从6 0 年代的 子程序时代,7 0 年代的模块化时代,8 0 年代的面向对象时代,到9 0 年代的面 向组件时代,软件工程方法也经历了不断提升改进,波浪式前进,螺旋式上升 的发展过程。但是软件产品的生产仍然是比较独立的“一次开发一个的”过 程,必须为每个大型系统的开发投入大量的人力和物力,这更像是手工作坊的 “一种一个”的解决方案,很长时间以来,软件复用一直是软件工程领域的笑 柄。当新世纪的曙光来临之际,卡内基梅隆大学软件工程研究所( c a r n e g i e m e l l o nu n i v e r s i t y ,s o f t w a r ee n g i n e e r i n gi n s t i t u t e ,简称c m us e i ) 提出了软 件产品线( s o f t w a r ep r o d u c tl i n e s ,简称s p l ) 技术,这种技术把我们考虑问 题的焦点从开发一个个单个软件产品,转移到开发一个软件产品系列,一个软 件产品族中来,这为软件工程又带来了一次重大革新。 1 2 软件复用与软件产品线技术概述 1 2 1 软件复用 软件复用是指一种由预先构造好的,以复用为目的而设计的软件构 件来建立或者组装软件系统的过程,目的是为了能够在软件开发过程中 利用已有的软件成份来构造新的软件成份或系统”j 。 在目前的开发中,构件的内涵已扩展到过程中任何阶段都可以提出 来进行复用的产物,这包括系统需求分析,系统设计的构思方法,设计 策略与机制,系统结构,二进制的可执行组件,系统测试设计和测试用 例,系统的发布方法等等。 北京丁业人学工学硕士学位论文 1 2 2 组件 组件是一个独立发布的功能部分,可以通过它的接口访问它的服务 【2 1 ;是根据约定的接口进行组装的单元,具有明显的上下文依赖性 3 1 。组 件的定义体现了三个方面:第一、组件是可交付的单元,具有可执行软 件包的特性;第二、组件提供了一些有用的功能,这些功能集合到一起 会满足一些需求;第三、组件通过接口提供服务,使用组件,要求通过 这些接口来提出要求。而不是通过访问组件的内部实现细节。 1 2 3 软件产品线 软件产品线是指具有一组可管理的公共特性的软件密集型系统的集 合,这些系统满足特定的市场需求或任务需求,并且按预先定义的方式 从个公共的核心资产集( c o r ea s s e ts e t ) 开发得到【4 1 。 管理活动对软件产品线的成功部署及其重要,包括技术管理和组织 管理。技术管理负责监督核心资产开发和产品开发的执行,主要有配置 管理、技术风险管理等,本文后面提到的组件库也属于技术管理部分。 组织管理进行组织协调整个产品线的运作,包括组织规划、组织风险管 理、培训等。在本文之后将来的工作中,会对产品线的管理活动进行更 进一步的研究。 核心资产包括从开发开始,在开发过程中任何阶段的各类产品,即 领域模型、需求分析、软件体系结构、性能模型、测试用例和二进制组 件等,所有的资产都是为重用而设计的。 软件产品线方法集中体现了一种大规模、大粒度的软件复用实践, 复用是有计划的、能够实现的和强制的。它能大幅度地提高软件生产率 和生产质量,改善软件复用,节省维护费用。 让我们先考虑一下这样一个例子。假设你打算买一台计算机,但你 并不准备买品牌机,而正准备自己组装台。你从电子市场上买到了一 些组装计算机的零配件,例如:主板,c p u ,内存,硬盘,光驱等,这 些零件都是根据你自己所希望的而定购的,会既考虑到了自己的经济能 力,又考虑到了自己所期望的性能。然后根据主板说明书,开始自己动 2 第l 覃绪论 手组装:或者,你懒得自己动手,直接买组装好的品牌机,于是你向可 以直销的厂商,比如d e l l 公司,提出了自己的要求,通过使用计算机 的术语来描述,来定购一台现成品。例如:“我要定购一台p 43 2 g a m d 处理器、2 5 6 md d r a m 、8 0 g 硬盘、5 6 k 内置调制解调器、3 2 m 图形加速卡、d v d 光驱的家用娱乐计算机”。这些就是软件产品线想要 为程序员解决的问题:攒一个由软件组件组成的软件“机器”。 软件产品线的特点是在开发过程中使用共有的软件资产,包括软件 体系结构( a r c h i t e c t u r e ) ,软件组件( c o m p o n e n t ) 以及开发过程模 型。软件产品线中组装出来的产品是根据基本的用户需求,对标准的产 品族体系结构进行定制,将可复用组件与系统中独有的部分集成而得到 的。图1 1 演示了产品线、产品族、产品三者之间的关系。外界看到的 产品线,在内部实现上,其实是一些产品的集合,或者是一个产品族; 外界看到的一个产品系列,在内部实现上其实是这个产品系列的一个产 品族【5 j 。 外部视角 内部视角 产品线 产品族 产品线 ii 产品族 图1 1 产品线、产品族及产品三者之间的关系 f i g u r e l 1r e l a t i o n s h i pa m o n gp r o d u c tl i n e s 、p r o d u c tf a m i l y 、p r o d u c t s 1 3 产品线的产品生产过程模型 1 3 1 软件产品线的基本活动 软件产品线的内容包括核心资产的开发,即可复用组件的开发以及 产品族体系结构的开发,和利用了核心资产的产品丌发,即,基于产品 族体系结构的,使用可复用组件的应用系统的集成和组装。通常可以从 核心资产构建新产品,或从现有产品中提取核心资产,核心资产开发也 被成为领域工程,利用核心资产的产品开发被称为应用工程,二者均需 要组织和技术管理。图1 2 显示了这三个基本活动吲。 北京工业大学工学硕士学位论文 产品线开发 图1 - 2 软件产品线的基本活动”j f i g u r e l 2e s s e n t i a lp r o d u c tl i n ea c t i v i t i e s 核心资产开发活动的目标是建立产品的生产能力,生产产品的 活动是产品线的最终目的,管理必须在技术和组织上为软件产品线 服务。由于我们是研究性组织,因此,本文关注较多的是核心资产 开发和产品开发这两个和软件工程较密切的活动。 1 3 2 产品线在软件工程领域的实践 软件工程实践领域是应用适当技术创建和发展核心资产和产品所需 要的实践领域,包括:领域工程、产品族体系结构定义,体系结构评 估、组件开发、c o t s ( c o m m e r c i a lo f f - t h e s h e l f ,简称c o t s ) 使 用、挖掘现有资产、软件系统集成和测试。图1 3 所示的是产品线在软 件工程领域的实践图【4 】。 4 第l 章绪论 图1 - 3 产品线在软件工程实践领域之间的关系 f i g u r e l - 3r e l a t i o n s h i pa m o n gs o f t w a r ee n g i n e e r i n gp r a c t i c ea r e a s 由图可见,领域分析流向需求,需求驱动产品族体系结构,体系结 构指定组件。组件可以由内部开发、可以从开放的市场购买、可以从以 前开发的资产中挖掘、也可以通过委托合同得到。该选择取决于内部可 用的人力和资源。开放市场的组件情况、可挖掘的遗留资产库和能委托 的签约人等因素。一且获取到了体系结构所需要的全部组件,就可以集 成产品了,并且组件和集成的系统必须进行测试。这是一个不断迭代的 过程,大致展示了产品线在软件工程实践领域是如何运行的。 1 4 研究现状 1 4 1 国外研究现状 国外目前已有多家大公司在其组织内部采用了产品线技术,这些公 司主要有:c u m m i n s 公司、b i g l e v e r 公司、h p 的打印机部门、s a l i o n 公司、b o e i n g 公司、c e l s i u s t e c h 公司、n o k i a 手机公司、p h i l i p s 家电 公司、p h i l i p s 医疗系统公司等。其中瑞典的c e l s i u s t e c h 公司的 北京工业大学工学碗士学位论文 s s 2 0 0 0 系统是一个经典的成功运行软件产品线的例子,常常被许多教 科书当作例子来引用。美国的c u m m i n s 公司是一家全球最大的商用柴 油机生产商,他们的软件生产部门引进了产品线技术后,使得1 0 0 0 多 种产品仅需有2 0 多个软件体系结构,使产品开发周期从2 5 0 入月缩短 为不到1 0 个人月,引进产品线前后所需人手的比例为3 6 :1 。德国的 b i g l e v e r 软件公司开发了一条名为p r o d u c tl i n ep l a t f o r m 的产品线,这 条产品线是为支持生产电子商务的软件而设计的,使用该产品线工具, 客户需要做的是列举所有的产品,并比较它们的不同点,然后列出所有 的通用组件和可变组件的所有版本,并定义哪个产品使用哪些组件。图 1 4 是在b i g l e v e r 网站的截屏图。 1 4 2 国内研究现状 图1 4b i g l e v e r 网站截屏图 f i g u m l - 4d i g r a mi nb i g l e v e rw e b s i t e 青鸟型系统是北京大学软件工程研究所的青鸟工程的一部分,研 究的是软件的工业化生产技术,开发软件工业化生产系统青鸟软件 生产线系统,为软件开发提供整体解决案,推行软件工业化生产模式。 它对基于构件( c o m p o n e n t ) 构架( a r c h i t e c t u r e ) 复用的软件工业 化生产技术进行全面的支持,其中包括:提出青鸟构件模型和构件描述 语言;支持专业化的构件生产,即有目的的构件开发和采用再工程技术 从已有系统中获取构件:采用领域工程技术,支持专业化的构架开发; 强有力的构件库、构架库管理;支持软件过程设计和控制;支持基于构 第1 章绪论 件、构架复用的应用系统集成( 组装) 。青鸟型系统支持的软件开发 过程如图所示: 图1 5 青鸟软件生产线 f i g u r e l 5s o f t w a r ep r o d u c tl i n e so fj a d eb i r d 青鸟构件一构架模式的软件开发技术已在北大青鸟商用系统公司开 发的若干商场管理系统中进行试用。青鸟公司先后开发了桂林百货大 楼、北京前门商场等p o s 系统,积累了丰富的领域信息和经验,通过领 域工程,提炼出p o s 系统的类属构架及1 2 0 多个构件。现正使用这些 构架和构件进行新的p o s 系统的集成组装工作。 1 5 课题的内容及意义 众所周知,数控系统的种类千变万化,即使是同一种类数控系统的软件也 不尽完全相同。如果我们按照传统的软件工程来开发数控软件,将付出漫长的 开发周期;与此同时,数控系统又存在着极大的相似性,数控系统软件之间存 在着大量的可复用的部分,如果按照传统方法开发,又将付出大量的重复性劳 动。这就使得我们有必要采用一种技术,能大大缩短数控系统软件的生产周 期,避免重复性劳动,而同时又能保证产品的质量,为此我们选用了软件产品 线技术。 北京工业大学工学硕士学位论文 本课题始于2 0 0 2 年北京市科委项目“开放式数控技术在北京市的应用技 术示范和相关技术研究”,并在此基础上我们申请了下个课题“开放式数控 软件系统重构技术的研究”。 本课题主要的研究内容是: 基于刻面分类模式建立组件库,实现组件存储、检索和更新; 采用特征描述语言方法,引导用户提出需求,实现系统集成; 提供产品线集成工具和相应软件原型。 本文的第三章详细论述了组件库的设计与实现,第四章给出了改进的基于x m l 的特征描述语言和产品线集成原型的设计,第五章给出了以本课题实现的产品 线集成工具集成出的两套典型的数控系统软件产品:数控车床和数控冲床。 由于受限于人力和物力,我们只对典型的数控系统进行了需求分析,并使 用我们的软件产品线工具集成出两种典型的数控系统软件产品数控车床和 数控冲床以作为演示例子。 第2 章组件对象技术概述 第2 章组件对象技术概述 软件体系结构和组件是采用软件产品线策略的技术关键,本章从传统面向 对象程序设计的缺陷出发,简要介绍了目前主要的商业使用的组件模型:m s c o m 的基本原理和相关的设计方法,随后介绍科泰世纪公司提供的,m s c o m 的一个超集e z c o m 组件模型,l 三l 及提供对e z c o m 组件运行平台支 持的和欣操作系统( e l a s t o s ) ,在本课题中,组成产品的全部组件均采用 e z c o m 组件模型,这种已经供商业化使用的组件技术为本课题提供了必要的技 术支持。 2 1 传统面向对象程序设计用于软件组件化生产的缺陷 面向对象的程序设计思想已经走过了几十年的历程,这种经典的理论已被 广泛采用。与此对应,类库市场也出现了,但它发展很缓慢。可复用性一直是 面向对象的主要目的之一,但事实上,编写一个很容易被复用的类却非常不容 易。除此之外,软件工业技术的迅速发展,使得传统的那种每隔几年由开发人 员将应用程序升级一次的做法越来越不能适应软件产业发展的需要。一般来 讲,一个应用程序发布后,在下一个新版本到来之前,它一直保持静止状态, 是不能发生任何变动的,这就使得对应用程序局部进行升级也变得十分困难。 这些障碍都是由传统丽向对象程序设计的编译和链接模型造成的,c + + 语 言是面向对象程序设计语言的代表,十多年来,c + + 俨然成为几乎所有主要计 算环境的系统程序语言的霸主,我们就以c + + 语言作为例子来分析c + + 程序设 计模型本身存在着的不适用于软件复用和升级的天生缺陷: c + + 的封装只是编译时语法上的封装,没有实现真f 二进制意义上的封 装; c + + 只有语法语义标准,而其对象模型缺少一个二进制的标准: c + + 的继承是白盒继承,这增加了基类和派生类之间的过分耦合关系, 增加了代码的维护难度1 6 】。 9 北京工业大学工学硕士学位论文 图2 - 1c + + 面向对象程序设计模型 f i g u r e 2 1c + + o b j e c to r i e n t e dp r o g r a m m i n gm o d e l 以上几点原因导致了复用或者升级一个c + + 类必须要有其实现的源代码, 而获取源代码在当今商业应用中显然是不现实的。图2 1 表示了c + 十的程序设 计模型,应用程序由若干模块( 对象,o b j e c t ,+ o b j ) 构成,模块之间的关系 在编译的时候被固定,模块之间的关系是静态的,绑定死的,在程序运行时不 可改变模块之间的关系,就是说在运行时不能动态替换模块。为了能使模块在 运行时实现动态替换,就不能在编译时将模块链接进应用程序,使用动态链接 库可以解决这个问题,但却无法保证在不改变与客户接1 :3 的情况下,模块的升 级不会影响到旧版本客户,这主要还是因为c + + 缺少一个二进制标准。为了解 决传统面向对象程序设计模型的这些缺陷,组件程序设计模型应运而生。 2 2m sc o m 二进制互操作组件技术 m sc o m 组件是经典的面向对象理论中最有价值的思想与微软有关软件重 用的经验的商业结合,是一个说明如何建立可动态替换更新的组件的规范,它 提供了为保证能够互操作,客户和组件应遵循的标准,它主要解决了一下问 题: 解决不同来源的组件实现互操作: 组件以二进制的形式发布,一个组件的升级不会影响其他组件; 独立于编程语言,实现编程语言无关性; 组件在进程内、跨进程以至于跨网络运行的透明性,实现分布式计算; 1 0 第2 章组件对象技术概述 图2 - - 2 展示了c o m 组件程序设计模型,构成系统的组件可以在运行时动 态拆卸而不会影响客户端正常工作。m sc o m 组件的主要技术包括如下几点: c o m 接口 c o m 类 c o m 的激活机制 c o m 类型库及类型信息 图2 - 2c o m 面向组件程序设计模型 f i g u r e 2 - 2c o mc o m p o n e n t o r i e n t e dp r o g r a m m i n gm o d e l 2 2 1c o m 接口( j n t e r f a c e ) 在c o m 中,接口是客户同组件之间的一个约定。c o m 接口用接口 定义语言( i n t e r f a c ed e f i n i t i o nl a n g u a g e ,简称i d l ) 来定义,i d l 用 一种与语言无关的方式来描述客户所必须遵守的一组调用规范。c o m 的 设计者提出了两种继承性:接口继承,表示只有行为的规范被继承;实 现继承,表示真正的实现细节或行为被继承。这样,就把接口和实现真 正分离出来。对客户来说,一个组件就是一些接口集合,客户只有通过 接口才能同c o m 组件打交道,而看不到组件实现。一旦公布了一个接 口,那么它将永远保持不变,当对组件进行升级时,一般不会修改已有 的接口,而是加入一些新的接口m 。 c o m 接口具有非常简单的二进制结构特征,图2 。3 演示了c o m 接 口的工作原理。接口实际上是一个包含指向虚函数指针数组( v t b l ) 的虚 指针( v p t r ) 的内存结构,每一个数组元素包含的是一个由组件所实现 的函数的地址,组件将为v t b l 分配存储空间,并用每一个虚函数的地址 l l 北京工业大学:亡学硕士学位论文 m l 来初始化表的每一项。c + + 中一个类的大小是变化的,而接口的大小是 固定的,就是一个虚指针的大小,由于接1 :3 是一组纯虚函数的集合,因 此不能够被实例化,而只能够使用接口指针,这样就为客户和组件实现 之间添加了一层间址,把数据类型的实现细节封装在二进制的防火墙后 面,使得对象的布局结构能够随着时间的推移而进化,但无须要求客户 重新编译。此外,若两个不同实现的组件支持同一接口,那么客户将可 以使用相同的代码来处理其中的任何一个组件。一个组件所支持的接口 越多,这些接口就应该越小,较小的接口表示较为简单的行为,而大的 接口则表示更多的行为。一个接口所表示的行为越多,它对环境的依赖 性将越强,因此它被其他组件复用的可能性就越小。因此,多接口使得 多态性更为突出。 实现类 图2 - 3 c o m 接口的工作原理图( 接e l 的内存布局模型) f i g u r e 2 - 3i n t e r f a c ep r i n c i p l e ( m e m o r yl a y o u tm o d e lo fi n t e r f a c e ) c o m 的一切特性都是建立在i u n k n o w n 这个接口之上,所有的 c o m 接口都必须从i u n k n o w n 接口派生,所有的c o m 类都必须实现 i u n k n o w n 接口,i u n k n o w n 提供了三个方法:q u e r y i n t e r f a c e ,a d d r e f 和r e l e a s e ;第一个方法实现c o m 的类型转换,后两个方法用于控制 组件的生命周期。客户通过这些方法,可以安全地查询对象的类层次接 口,从而访问出对象引出的所有扩展功能。 硝2 章组件对笨技术_ l 鞔述 2 2 2c o m 类( c o c l a s s ) c o m 类则是对c o m 接口的实现,客户程序与c o m 组件程序进行 交互的实体就是c o m 类的实例c o m 对象。当我们使用面向对象语 言如c + + 来实现c o m 类时,一个c + 十类通过从一个或多个接口派生, 通过重载接口中声明的纯虚函数来完成接口功能。虽然我们用c + + 类来 实现c o m 类,但二者有着本质的区别:在前面我们提到,c + + 类中的 封装只是语义上的封装,而在c o m 类中,数据是被完全封装起来的, 外部不能看到或访问c o m 类的数据属性,c o m 类的数据成员的封装以 组件模块为边界,对于客户程序来说是完全透明的。此外,c o m 类和 c + + 类在可复用性方面二者的表现形式也完全不同,c o m 类的可复用性 表现在聚合( a g g r e g a t i o n ) 和包容( c o n t a i n m e n t ) ,一个c o m 类不 能够被继承;而c + + 类的可复用性表现在继承( i n h e r i t a n c e ) 和组合 ( c o m p o s i t i o n ) 。 c o m 清晰地把接口、实现和类看作三个不同的概念,接口是与客 户程序进行通信的抽象协议;实现是支持一个或者多个接口的具体数据 类型,它为接口的每个抽象操作都提供了精确的语义解释;类是被命名 的实现,它代买表了具体的、可实例化的类型。同接口一样,c o m 类也 应该被定义在i d l 中,c o m 类的i d l 定义包含一组接1 3 的列表,该类的 实例将引出这些接口。 2 2 3c o m 的激活机制 定义了c o m 接e l ,实现了c o m 类,客户还不能获取指向c o m 对象的接口的指针。下面我们将介绍c o m 对象如何被激活,并集成到 c o m 运行环境中,以便使客户可以找到或者创建给定c o m 类的对象。 c o m 有三种激活类型:本地机器进程内激活,本地机器进程外激活和远 程机器激活。如图2 5 所示,演示了c o m 的激活机制嘲: 北京工业大学工学硕士学位论文 ( 1 ) 本地机器进程内激活 当一个c o m 对象在客户进程内部激活时,实现该c o m 对象 的o l l 将被加载到客户进程中,对象的所有数据成员都驻留在客户 的地址空间中,无需进程切换,也不用中间运行库c o m 库的介入 进来,方法的调用开销基本等同于简单的虚函数调用。这种进程内 c o m 激活类型特别适合对时间响应要求较高的应用中,本课题中集 成产品的组件全部为这种类型。 客户程序广、 ( 地1 丝- 窒囹虹 习蒋皇麓 指向远程 对象代理 0 r p c c o m 库 ( o l e 3 2 d i d c o m 库 ( o l e 3 2 d 1 1 ) 主机a 服务控制管理器( s c m ) r p c s s e x e c o m 库 ( o l e 3 2 d 1 1 ) 主机b 务控制管理器( s c m ) r p c s s e x e 图2 - 4c o m 组件的澈活机制 f i g u r e 2 - 4m e c h a n i s m o fc o ma c t i v a t i o n ( 2 ) 本地机器进程外激活 当一个c o m 对象在本地机器的另外一个进程中被激活时,实 现c o m 对象方法的代码将在服务器进程中执行,对象的所有数据成 员都驻留在服务器进程的地址空间中。客户进程为了能够和服务器 进程进行通信,c o m 库在激活时刻透明地给客户程序返回一个代理 对象,它把方法调用翻译成服务器执行环境中的本地过程调用 ( l o c a lp r o c e d u r ec a l l ,简称l p c ) 请求,在服务器执行环境中, 这些l p c 请求又被翻译回实际对象上的方法调用。进程外调用每次 1 4 第2 章组件对象技术概述 访问对象都需要线程切换和进程切换,这使得方法调用的效率较 低,但是这种激活类型可以隔离错误,提高安全性。 ( 3 ) 远程机器激活 当一个对象在远程机器上被激活时,与进程外激活基本类似, 所不同的是。客户程序与服务器的通信协议采用的是远程过程调用 ( r e m o t ep r o c e d u mc a l l ,简称r p c ) 请求。远程调用由于需要通 过网络传输数据和请求,这使得这种激活类型的调用效率最低,但 它能进一步增强安全性,同时还实现了分布式计算。 客户程序有三种方式可以激活一个c o m 对象,允许c o m 根据客 户提供的类的唯一标识号所代表的c o m 类来创建一个新实例,把c o m 对象带入到内存中。这三种激活方式分别是:绑定到类对象,绑定到类 实例,绑定到来自文件的永久实例。如图2 5 所示,演示了c o m 的绑 定到类实例的激活方式:客户程序首先指定激活类型及类和接口的标 识,通过a p i 函数向c o m 库发出创建c o m 对象的请求,c o m 库接到 请求后,根据客户程序指定的激活类型及类标识在注册表中查找c o m 对象的存放位置,若是进程外或远程对象,则生成代理对象,然后激活 该对象,调用i u n k n o w n 的方法q u e r y i n t e r f a c e ,把客户请求的接口指 针返回给客户,客户程序在接下来可以直接( 进程内时) 或通过代理对 象( 进程外或远程时) 调用接1 :3 方法,而无需c o m 库再介入。 图2 - 5c o m 组件的绑定到类实例激活方式 f i g u r e 2 5a c t i v a t i o no fc o mc o c r e a t e l n s t a n c e 北京工业大学工学碗士学位论文 2 2 4c o m 类型库及类型信息 c o m 类型库提供了有关组件、接口、方法、属性、参数及结构的 类型信息。类型库中的内容实际上是i d l 文件的一个编译版本,是一个 二迸制文件,是c o m 为了解决语言无关的的、适合于v b ,j a v a 等解 释型语言和宏编程环境使用的头文件的等价物。类型库是类型信息的容 器,调用w i n 3 2a p i 函数l o a d m y p e l i b ( ) 并指定包含类型库的文件, 就可以打开类型库,返回一个i t y p e l i b 的接口,该接口是由c o m 库实 现的,使用该接口,就可以获取类型信息的数量,关于类型信息的描述 性信息,类型信息描述的项目的类型等,它提供了到类型信息的通道。 类型信息是一组描述单个对象或接口的静态数据结构,通过c o m 库实 现的i t y p e l n f o 接口,读取类型信息中的数据。 2 2 5 面向对象程序设计模型与面向组件程序设计模型比较 通过以上分析,我们可以得出以下面向对象程序设计模型与面向组 件程序设计的比较: 面向对象程序设计模型:( 语法上的) 封装+ ( 实现) 继承+ ( 部 分) 运行时绑定+ ( 类的) 多态+ ( 源代码级) 复用; 面向组件程序设计模型:( 完全的二进制) 封装+ ( 接1 7 1 ) 继承+ ( 完全) 运行时绑定+ ( 组件的) 多态+ ( 二进制级) 复用; 2 3m sc o m 的超集e z c o m 技术简介 m sc o m 程序设计模型扩展了传统的面向对象程序设计模型,强迫开发人 员考虑接口与实现之间的关系,隔离了组件实现的细节,但是c o m 仍存在的 一些缺陷:编程模型繁琐,对象的生命周期管理复杂,不易于开发者编程:组 件内缺少元数据信息,不能够自描述,不适用于当今的网络服务;只适用于局 域网域内的分布式计算,不能跨越防火墙;组件需要注册机制,新的组件必须 安装以后才能使用,不符合当今软件工厂的即拿即用的理念。 e z c o m 组件技术是科泰世纪公司提出的面向组件程序设计的编程模型i g 】, 运行在和欣操作系统( 下节将要介绍) 或w i n d o w s2 0 0 0 x p 操作系统平台 第2 章璺l 件对蒙技术概述 上。e z c o m 兼容m sc o m ,它是m sc o m 的一个超集,规定了一组组件间相 互调用的标准,使得二进制组件能够自描述,能够在运行时动态加载,而无须 安装及注册。但是和m sc o m 相比,e z c o m 删除了m sc o m 中过时的约 定,禁止客户定义c o m 的非自描述接口;完备了组件及其接口的自描述功 能,实现了对c o m 的扩展:对c o m 的接口指针使用智能指针进行了简化包 装,容易使用。为了使用来自于网络的组件,需要解决自动下载,安全等问 题。因此,和欣操作系统中需要根据一个组件的自描述信息自动生成组件的运 行环境,生成代理组件即中间件,通过和欣操作系统自动生成的中间件对组件 的运行状态进行干预或控制,或自动提供针对不同网络协议、输入输出设备的 服务( 即运行环境) 。图2 - 6 显示了e z c o m 面向中间件的程序设计模型。 为了支持e z c o m 组件的运行,和欣操作系统提供了一套e z c o m 组件运 行平台,该运行平台提供了一套符合e z c o m 规范的系统服务组件及支持组件 相关编程的a p i 函数,实现并支持系统组件及用户组件相互调用的机制,为 e z c o m 组件提供了编程运行环境。和砍运行平台有在不同操作系统上的实现, 符合e z c o m 程序设计规范的应用程序通过该平台实现二进制级跨操作系统平 台兼容。图2 7 为和欣组件运行平台的体系结构。在w i n d o w s2 0 0 0 、 w i n c e 、l i n u x 等其他操作系统上,和欣组件运行平台屏蔽了底层传统操作系 统的具体特征,实现了一个组件化的虚拟操作系统。在和欣组件运行平台上开 发的应用程序,可以不经修改、不损失太多效率、以相同的二进制代码形式, 运行于传统操作系统之上。 代理组件实现组件 p 叫组件1 0i ll 叫组件2 0k ll ! i l i i 叫组件nl ii 图2 - 6e z c o m 面向中间件程序设计模型 f i g u r e 2 6e z c o mm i d d l e w a r eo r i e n t e dp r o g 旧m m i n gm o d e l 1 7 北京工业大学工学硕i :学位论文 图2 - 7 和欣组件运行平台体系结构 f i b u r e 2 - 7a r c h i t e c t u r e 硝e 1 a s t o sc o m p o n e n t r u np l a t 2 3 1e z c o m 的组件模型 e z c o m 中的“e z ”源自与英文单词“e a s y ”,e z c o m 采用组件定 义语言( c o m p o n e n td e f i n i t i o nl a n g u a g e ,简称c d l ) 进行组件的描 述,c d l 语言是m si d l 语言的扩展,e z c o m 通过c d l 语言进行组件 的描述,定义组件中的类、接口以及接口方法等信息。并由此来进行组 件的编程。在e z c o m 中,使用智能指针来简化对接口的操作。客户智 能指针可以完成以下操作: 正确的处理a d d r e f r e l e a s e 调用,来保证客户正确地控制组件的生 命周期: 在析构函数中自动释放接口,从而降低资源泄漏的可能,以及改进异 常的安全性: 通过c + + 类型系统来简化对q u e r y i n t e r f a c e 的调用。 智能指针分为接口智能指针和类智能指针,接1 3 智能指针是经过封 装

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论