已阅读5页,还剩55页未读, 继续免费阅读
(电路与系统专业论文)基于组件的网上教学系统的设计.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
硕士学位论文 n 认 s t e r s t i赶 s l s 结构的网上教学系统的基础上, 采用组件化程序设计思想及三层结构模式对该 系统重新作了全新的设计。 采用组件来实现三层结构中的中间层业务逻辑, 对 成绩管理、院系管理、课程管理以 及课件点播等功能组件作了详细接口设计。 运用操作系统中的组件服务管理来装配组件, 使系统的安全性、 稳定性都有了 质的提高。 系统通过将日常的教学管理与网络教学有机的结合, 丰富了教学手 段, 提高了资源的利用率。 网上教学管理系统采用o l e d b组件的接口来实现 与数据库的通信, 这就将系统的数据源不仅仅支持关系型数据库, 它还能支持 电子表格, 文件目录服务等, 这就为系统的扩展奠定了坚实的基础。 因而安全、 功能强、高效、易于维护和升级是区别于现有系统的最大特征。 关键词网上教学系统 c o m o l e d b a t l组件对象 a b s t r a c t w e b - b as e d e d u c a t i o n s y s t e m i s a n a p p l i c a t i o n f o r n o r m a l t e a c h i n g m a n a g e m e n t a n d w e b - b a s e d e d u c a t i o n a l m a n a g e m e n t . i t i s a n o ff s p r i n g o f t h e n e t w o r k t e c h n o l o g y a n d m u l t i m e d i a c o m m u n i c a t i o n . t h e u s e o f t h e n e t w o r k m u l t i m e d i a c o m m u n ic a t i o n i n t e a c h i n g c a n e n h a n c e t h e t e a c h i n g q u a l i t y b y h e i g h t e n t h e a p p e t i t e o f l e a n i n g . t h e c a i o n n e t a l s o c a n d o t h i s . wit h s t u d e n t s i n c r e a s i n g , t h e w a y i n w h i c h s t u d e n t s g e t t h e s o u r c e o f k n o w le d g e o n t h e b a s e o f c u r r e n t e d u c a t i o n r e s o u r c e i s v e r y i m p o rt a n t . t h e w e b - b a s e d e d u c a t i o n s y s t e m c a n g iv e s t u d e n t s a s t u d y c i r c u m s t a n c e o n w e b . i t c a n a l s o p r o v i d e s t u d e n t s p l e n t y o f e d u c a t i o n r e s o u r c e o n w e b . t h i s s y s t e m i s p r o v e d t o b e v a l u a b l e i n p r a c t i c e . a t p r e s e n t , m o s t s y s t e m s u s e c g i , s p e c i a l a p i . j d b c a n d e t c f o r t h e m i d d l e w a r e a n d b / s s t r u c t u r e . t h i s m o d e l h a s s o m e s h o rt c o m i n g s , t h e m o r e c o n s u m e r s t h e l o w e r r a t i o s o f a c c e s s i n g t o t h e d a t a b a s e . f u rt h e r m o r e , i t s s h o rt o f n e c e s s a r y s e c u r i t y a n d h a r d t o r e u s e d a n d a l s o h a r d t o u p d a t e .s o it s t h e m o s t i m p o r t a n t t o d e s i g n a s t a b l e a n d s a f e m i d d l e w a r e f o r t h e s y s t e m . c o m m o n o b j e c t m o d e l i s a s o ft w a r e c r i t e r i o n b a s e d o f b i n a ry s y s t e m s t a n d a r d a n d b e i n d e p e n d e n t o f t h e p r o g r a m l a n g u a g e . i t d e f i n e s h o w t o l o a d o b j e c t a n d 、d e f in e c o m p o n e n t a n d c r e a t e c o m p o n e n t . i t a l s o p r o v i d e s r e a li z a t io n p o rt i o n - - c o m 奋 li b r a r y . w h a t t h o s e s y s t e m s e r v i c e s d o in c l u d e s t h e c o m p o n e n t s o r i e n t a t io n , i n s e rt i n g t h e c o m p o n e n t s i n t o t h e r o m, a n d a l s o i n c l u d e s s o m e o t h e r o p e r a t i o n s u c h a s t h e e x e c u t i o n o f t h e c o m m u n i c a t i o n i n a n d o u t o f p r o c e s s i o n . f u n d a m e n t a l c h a r a c t e r i s t i c s o f c o m a r e l a n g u a g e i n d e p e n d e n t , p r o c e s s t r a n s p a r e n t , s o ft w a r e r e u s a b l e a n d s e c u r e . t h e m i d d l e w a r e l o g i c a l l a y e r b a s e d o n c o m c a n e s t a b l i s h a s t e a d y , e as y m a i n t a i n e d a n d e a s y u p g r a d e d a p p l i c a t i o n s y s t e m b y w h o l l y u s i n g t h e s e s p e c i a l t i e s . a c t i v e x t e m p l a t e l i b r a ry p r o v i d e s a t e m p l a t e b a s e o f c + + . t h e t e m p l a t e l i b r a r y r e a l i z e s s o m e b a s i c c o m c h a r a c t e r s u c h a s i u n k n o w n . i c l as s f a c t o ry ni i n t e r f a c e . u s e o f a t l c a n w r i t e c o m p a c t c o d e .i t a l s o p r o v i d e s v i s u a l s u p p o r t . o n t h e b a s e o f f o r m e r w e b - b a s e d e d u c a t i o n s y s t e m , w h i c h u s e s c / s s t r u c t u r e , t h i s t h e s i s d e s i g n s t h e s y s t e m n e w l y , i n w h i c h a d o p t s t h e 3 t i e r f r a m e m o d e l a n d t h e i d e a o f c o m p o n e n t p r o g r a m m i n g a n d d e s i g n s t h e i n t e r f a c e s u c h a s g r a d e m a n a g e m e n t a n d s o o n . s a f e t y a n d s t a b i l i t y o f t h e s y s t e m h a v e b e e n g r e a t l y im p r o v e d b y t h e u s e o f c o m p o n e n t s e r v i c e m a n a g e m e n t . wi t h t h e c o m b i n a t i o n o f t h e d a i l y t e a c h i n g m a n a g e m e n t a n d t h e w e b - b a s e d e d u c a t i o n m a n a g e m e n t , w e e n r i c h t h e t e a c h i n g m a n n e r s , a d v a n c e t h e u s i n g r a t e o f t h e t e a c h i n g r e s o u r c e . t h i s m a n a g e m e n t s y s t e m c o m m u n i c a t e s w i t h d a t a b a s e b y t h e i n t e r f a c e o f t h e o l e d b , w h i c h s u p p o rt s t h e r e l a t i o n s h i p d a t a b a s e , e x c e l f o r m a n d d i r e c t o r y s e r v i c e s .a l l t h e s e e s t a b l i s h a m a s s f o u n d a t i o n f o r t h e e x p a n s i b i l i t y o f s y s t e m . i n a w o r d , t h e g r e a t e s t d i ff e r e n c e b e t w e e n t h e n e w a n d o l d s y s t e m i s i t s s a f e t y , p o w e r f u l f u n c t i o n a n d e a s y m a i n t e n a n c e . k e y w o r d : c o m, o l e d b , a t l , we b - b a s e d e d u c a t i o n s y s t e m , c o m p o n e n t o b j e c t 劝 i v 硕士学位论文 m a s t e r s t h e s i s 第一章 概述 1 . 1软件应用结构的发展 随着计算机技术和网络技术的飞速发展,计算机软件的复杂程度在不断增 强, 系统结构在软 件设计和开 发过 程中 所起的 作用越来越重 要 u 。 早 期的软 件 产品大都是单层应用软件,这样的单层结构不适合网络应用或者是分布式应 用。 这样就自 然的导致了应用程序分成了两个部分, 客户端部分和服务器部分, 这就是我们所说的两层结构即客户一服务器结构。 在这种两层结构中, 用户界 面和业务规则在应用的客户端, 数据维护在服务器端实现, 通常由另一个独立 的应用程序来完成。 这种应用模式一般适用于小规模的用户, 较小的单一数据 库而且具有安全快速的网络环境。 两层结构的软件比单层应用软件有不可比拟 的 优点, 但是两层结构 ( c / s 结构) 也存在明显的局限 性(2 j , 1 、安全管理困难, 由于业务逻辑处理程序驻留在客户端, 在这种基于用户 授权的方式下, 一旦用户拥有了某项权限, 他就能直接操纵对应权限下 数据库中的数据。 2 、系统性能随客户的增多下降很快, 即使客户不进行数据处理, 服务器端 的数据库必须同每个活动的客户保持连接, 这样导致随着客户的增多系 统的性能下降很快。 3 、软件升级困难, 由于应用逻辑全部驻留在客户端, 当软件进行更新升级 时每个客户的应用程序都需要重新更新,增加了系统维护和管理的代 价。 随着以网络计算为中心的应用系统规模的扩大和软硬件结构的日趋复杂 多样, 客户端和服务器端的负担也日 益繁重, 并且传统软件的移植性、 互操作性 和重用性也都不能满足现在的性能需求, 为此人们提出了一种介于客户端和服 务器端的中间层 ( 业务逻辑层)这种三层结构如图所示: 表现层 客户 ( 用户界面) 业务层 中间层 ( 业务逻辑) 服务器 ( 数据维护和存储) 数据层 dat abas e 1 一 1应用软件三层结构示意图 在三层应用结构中, 客户层只提供应用的用户界面, 它根据用户的操作调 用相应的业务逻辑,它永远不会直接访问后台的数据库。 业务逻辑层是应用系统的关键所在, 它负责处理所有用户的请求, 并且把 处理结果返回给客户层。 服务器层仍然提供数据库支持,实现数据的存储、数据的访问控制、 数据 完整性约束等等。 将应用结构分为三层有如下优点2 1 3 1 4 , 1 、系统性能增强,由于客户不直接与数据库相连,这样就不会使得随 着用户数的增多,导致数据库系统突然崩溃。 2 、可靠性增强,因为多层结构把一个复杂的应用拆分成一些小的组件 所以应用系统的可靠性得到了 保证。 3 、维护简单,当业务处理逻辑发生变化时只需对相应的业务处理逻辑 进行更新而不需对客户的应用程序进行更新,使得系统的维护更为 简单方便。 1 . 2组件化程序设计 软件业的发展历程上,程序设计方法经历了最初的功能分解法,结构化程 序设计方法, 以及现在广泛使用的面向 对象程序设计方法。 人们对程序设计方 法的选择取决于程序设计方法对应用软件的适用性。 结构化程序设计方法着眼于局部的程序结构,难以用发展的眼光指导应用 程序的设计。 面向 对象程序设计方法能够从问题的本身来把握应用系统的整体 设计,并且有效地把应用发展过程中容易变动的部分和相对稳定的部分分开。 而且面向对象程序设计方法于面向对象分析、 面向对象实现紧密结合起来, 构 成了软件生存周期的主体。 面向对象程序设计方法强调把问题域的概念直接映射到对象以 及对象之间 的接口, 这种方式比 较符合人们通常的思维方式, 从而减少了 传统开发方法从 问题域到分析阶段再到设计和实现阶段的偏差15 1 . 但是,从十多年的发展来看,面向 对象程序设计也表现出了一些缺点。 1 、面向对象程序设计方法在处理大型软件系统时,它的粒度粗细难以 有效控 制。 2 、现实世界中的很多问题领域包括影响多个对象的全局性处理,可以由几个 并行或者串 行执行的步骤组成。 这种全局处理的概念不从属于任何单个对 象,与面向对象的思想不统一,并且缺乏有效的表示方法。 3 、虽然面向对象程序设计方法强调重用性,但实际重用的效果并不理想。 组件化程序设计方法继承并发展了面向对象的程序设计方法。它将对象技 术应用于系统设计, 对面向 对象程序设计的实现过程作了 进一步的抽象。 将组 件化程序设计方法用作于构造系统的体系结构层次的方法, 并且可以使用面向 对象的方法很方 便地实 现组 件6 1 7 1 。 组件化程序设 计方法 强调 真正的软件重 用 和高度的互操作性。 它侧重于组件的产生和装配, 这两方面一起构成了组件程 序设计的核心。组件程序设计方法有以下几个方面的优点i $ 1 9 1 , 1 、编程语言和开发环境的独立性。在一定的标准下,组件建立了二进制一级 的标准,不同软件开发商只需遵守该标准,选择合适的编程语言。 2 、组件位置的透明性。位置透明是组件独立的一个方面,对于分布式应用系 统,位置透明可以跨越机器,即一台机器上的应用程序可以透明访问另一 台机器上组件。 3 、可扩充性。每个组件都是自主的,有其独特的功能,只能通过接口与外界 通信。当一个组件需要提供新的服务时,可以通过增加新的接口来完成, 不会影响原接口己存在的用户。 而新的用户可以选择新的接口来获得服务。 4 、可扩展性。在实现组件的过程中,可以通过包容和聚合来对组件库中的组 件进行扩展。 1 . 3中间层的实现 ( 1 )通用网关接口c g i ( c o o m o n g a t e w a y i n t e r f a c e ) 通用网关接口 是一组关于如何在客户端w e b 浏览器、 w e b 服务器与c g i 应用 程序之间传递信息的 规范, 是h t t p ( h y p e r t e x t t r a n s f e r p r o t o c o l ) 服务器与应 用程序进行“ 交谈” 的 一 种方式1 1 0 1 1 川p z l w o c g i 接口 为 从h t t p 服务器内 执行 程序提供了一种简单易用的方法, 可以使用这种机制来创建动态文档以及作为 与h t t p 服务器之外的服务程序之间的接口。c g i 接口 有许多好处, 包括服务器 软件之间的可移植性, 以及大量的公用领域程序( 免费程序) 和为它设计的开发 工具。最大的优势就在于, 几乎所有的w e b服务器都支持c g i 程序。但是, c g i 接口也存在着一些不足, 其中最主要的就是性能问题, 特别是在需要多个数据 硕士学位论文 m a s 1 f r s 7 7 让s i s 库连接的多用户应用程序中尤其明显。 c g 工 程序不能被多个客户请求共享, 当一 个新的请求到达时, 即使c g 工 程序有一个实例在运行, 也必须再启动一个新的实 例. 并发请求越多, 服务器上创建的并发进程也越多。 为每个请求创建一个应用 进程会消耗较多的系统资源, 最终导致性能降低, 增加等待时间。 ( 2 )专用a p i ( a p p l i c a t i o n p r o g r a m m i n g i n t e r f a c e ) 针对c g i 程序的上述不足之处, 为了 提高w e b 服务器与数据库服务器之间的 通信效率和性能, 各大 w e b服务器厂商和数据库厂商纷纷推出各自的专用 a p i 1 1 0 1 1 11 1 1 2 1 。在 w e b服务器与数据库服务器的连接方案中, n e t s c a p e和 m i c r o s o f t作为 w e b服务器厂商分别推出了适用于各自 w e b服务器的 n s a p i ( n e t s c a p e s e r v e r a p p l i c a t i o n p r o g r a m m i n g i n t e r f a c e ) 和 i s a p i 1 4 1 ( i n t e r n e t s e r v e r a p p l i c a t i o n p r o g r a m m i n g i n t e r f a c e ) 。与c g i 程序是作 为独立的进程运行不同, n a s p i和 工 s a p i都是以动态链接库的形式存在 的, n s a p i 和i s a p i 应用程序的效率和性能 较之c g i 程序有大幅度的提高。 当然, 采用这种类型的a p i 也存在一些缺陷, 例如, n s a p i 与 i s a p i 相互之间不兼容; 它们只能在特定的服务器和操作系统上运行; 由于采用了动态链接库的形式, 一旦代码质量较差就比较容易造成服务器系统的崩溃; 并且进行程序设计时会 更复杂。三大数据库厂商o r a c l e , s y b a s e 和 i n f o r m i x 提供的w e b 服务器与数 据库服务器的接口方案都与各自的数据库产品紧密集成, 因而无论是在效率、 1胜能还是安全性方面都达到了较为理想的水平。但也正是由于这种紧密集成, 导致了它们只能局限于各自的数据库产品之上, 所以兼容性和可移植性差。 ( 3 ) j a v a 数据库互连j d b c ( j a v a d a t a b a s e c o n n e c t i v i t y ) 为了克服c g i 程序访问数据库效率低和专用a p i 可移植性差的缺陷, 新近出 现的 j d b c是一种较为理想的接口方案11 0 1 川 12 1 = j d b c是用来执行 s q l ( s t r u c t u r e d q u e r y l a n g u a g e ) 语句的j a v a 应用程序接口。 它由一组用j a v a 硕士学位论文 1 八 s c i r s 1 1 比 s i s 程序设计语言写成的类和接口组成, 易于向任何关系数据库发送s q l 语句, 支持 对多种数据库的访问。运用j d b c a p i , 只需写出单独一个程序就能够发送 j d b c a p i 给相应的数据库。j a v a语言的中性结构和 j d b c的开放性使得程序员只需 写一次程序就能让它到处运行。j d b c是一个低层次的a p i , 它是更高层次 a p i 的基础。 开发人员可以 在j d b c 的基础上, 设计出用户更容易理解、 便于使用的 更高层次的接口和工具。 ( 4 )基于 c o m的中间层 c o m ( c o m p o n e n t o b j e c t m o d e l ) 即组件对象模型, 是m i c r o s o f t公司提出的 一种以组件为发布单元的对象模型, 这种模型使得各软件组件可以用一种统一 的方式进行交互。它既提供了组件对象之间进行交互的规范, 也提供了实现交 互的环境。 基于c o m 的中间层封装了与底层的逻辑关系, 它能够提高系统的安 全性 能 is l a o c o m 应 用开 发 方 面具 有以 下 特点 1 7 18 1 ( 1 )组件与开发工具语一言无关。开发人员可以根据特定情况选择特定语 言工具实现组件的开发; ( 2 )通过接口有效性保证了组件的复用性。一个组件具有若干个接口, 每个接口 代表组件的某个属性或方法: ( 3 )组件运行效率高, 便于使用和管理。c o m组件是二进制代码, 运行效 率比解释性语言高很多。 1 . 4项目简介 随着网络技术以及多媒体技术的发展,使得传统的教育方式越来越不能满 足现代教学的需要。资源共享,网上教学,学生通过网络来获得知识将会在以 后的教学活动中占 据重要的 地位 l 9 。 但是如果没有一个好的网上教学系统来 管理这些教学活动将使得网络教学的开展达不到充分利用现有资源, 服务教育 事业的目的,在这种情况下我们组织开发了网上教学系统。 网上教学系统按照角色划分为三个部分, 学生系统, 教师系统和管理系统。 学生系统分为实时系统和非实时系统,实时系统主要是指实时的上课,讨 论交流等方面的学习活动, 在这里学生可以实时的和其他同学交流或者回答别 人的问题。非实时系统里面有作业,考试, 练习,自主上课学习等方面的学习 活动。 辅助系统用于学生的选课, 查看教师的基本信息情况, 查看自己的成绩, 个人信息维护等方面的内容。 教师系统同 样分为实时系统和非实时系统,实时系统主要是指和学生在线 交流。非实时系统里面有批改作业,回答学生课余提问等。辅助系统用于教师 的授课申请,查看学生的基本信息情况,个人信息维护等方面的内容。 本人在网上教学系统的开发过程中负责教学管理子系统的设计与实施。本 文在原有已经实现的二层结构的网上教学系统的基础上, 对该系统采用组件化 程序设计思想及三层结构模式重新作了全新设计。管理子系统采用了三层结 构, 在中间层的实施过程中采用了组件化设计。 其中 用户的登录, 课件的管理, 教学的管理, 人员 信息的管理, 院系管理, 专业管理, 成绩管理等实现模块组件 化,己及针对数据的记录操作,查询操作, 报表打印等形成功能组件。我们在 针对数据库系统的开发过程中,不可避免的要用到数据的记录操作, 查询以及 报表的打印工作, 这样我们在这里开发的组件就能够实施组件的重用性为我们 的开发带来极大的 方 便2 0 1 2 1 1 。 本系统用了 新的 数 据访问 技术o l e d b 2 2 2 3 1 2 4 1 它不仅支持对关系型数据库的开发, 还能够支持操作系统中的文件、 电子表格、 电子邮件、多媒体数据以及目录服务信息等等。 2 . 2 c o m 接口 2 . 2 . ,c o m 接口概述 客户程序与c o m对象是通过c o m接口进行交互的。c o m接口包含了一 组函数的数据结构,通过这组数据结构,客户代码可以调用组件对象的功能。 在c o m中 接口 就是一切 3 2 1 3 3 1 。 对于客户来说, 一 个组件就 是一个接口 集, 客 户只能通过接口才能与c o m组件打交道。下面给出了一个组件与接口的联系 示意图。 组 件 , 接 口 1- 3 一 组 件 31 接 口 1一 2 接 口 3 一 4 组 件 ,1 接 口 2 一 4 组 件 4 组件 1组件 3接口1 一3 接口 1 -2接口3 -4 组件4接口2 -4组件 2 2 -2接口 关系示意图 从这个图中可以看到 c o m 接口对于组件的重要性。接口提供了两个不同 对象间的一种连接。 通过一组函数定义程序中不同接口部分, 才能将这些接口 连接起来。在客户程序中用一个指向接口数据结构的指针来调用接口成员函 数。如下图所示: p v t a b l e v t a b l e 2 -3接 口结构 硕士学位论文 ma s t e r s t h e s i s 从图中可知接口 指针通过另一个指针指向一组函数,该函数称为接口函数 表。接口函数表中每一项为4 个字节长的函数指针,每个函数指针与c o m对 象的具体实现相连接。通过这种方式如果客户获得了接口指针那就可以调用 c o m对象的实际功能。 接口函数表称为 虚函数表 ( v i r t u a l f u n c t i o n t a b l e , 简称v t a b l e ) ,指向v t a b l e 的 指针称为p v t a b l e。 对于一个接口 来说,它的 虚函 数表v t a b l e 是确定的,而且 每个接口的成员函数个数是不变的,并且它的成员函数的先后顺序也是不变 的。对于它的成员函数来说,其参数与返回值也是确定的 2 . 2 . 2 c o m 接口定义语言 i d l mi c r o s o ft 的接口 定义语言i d l ( i n t e r f a c e d e s c r i p t i o n l a n g u a g e ,接口定义语言 ) 是基于d c e r p c ( d i s t r ib u t e d c o m p u t i n g e n v ir o n m e n t , r e m o t e p r o c e d u r e c a l l , 分 布式计算环境 , 远程过程调用) 规范之上的。 m i c r o s o f t 扩展了 这个规范, 使它 包含了对基于c o m接口的支持。它提供了一种不依赖于任何语言的接口定义 方法,因此可以 成为组件程序和客户程序的共同 语言冈。 mi c r o s o ft v i s u a l c + + 提供t mi d i 工具, 可将i d l 接口描述文件编译成c l c + + 兼容的接口描述头文件 ( .h ) 。它可以被组件程序和客户程序所使用。 在后面的章节中将看到采用 a t l开发组件的环节。在采用 a t l o b j e c t wi z a r d 来开发组件时, 它仅仅为用户实现了一个接口的定义, 因此当组件要实 现多个接口时,那么需要手动添加这些接口。 2 . 2 . 3 c o m 接口的特点 1 .二进制特性 c o m接口 规范与语言无关,它规定了二进制一级的标准。 2 接口不变性 c o m接口是组件客户程序和组件对象之间的桥梁, 接口不变使得系统开发 变得稳定,这也符合组件化程序设计思想。 3 .接口继承性 硕士学位论文 ma s t e r s t h e s i s c o m规范规定所有的接口都必须从i u n k n o w n 派生。接口继承只是说明继 承,即派生的接口只继承了基接口的成员函数说明,并没有继承接口的实现, 接口继承不允许多重继承。 4 .多态性 c o m的多态性通过其接口 来体现。如果几个不同的c o m对象实现了同一 个接口,则客户程序可以用同样的代码调用这些 c o m 对象。c o m规范建立 的插件系统正是基于c o m 的多态性。 2 . 3 i u n k n o w n 接口 2 . 3 . 1 u n k n o w n 接口概述 客户程序通过接口与c o m对象进行通信,c o m规范规定所有的接口都必 须从i u n k n o w n 继承,这是因为i u n k n o w n 接口 提供了两个非常重要的特性: 生存期控制和接口查询。 生存期控制: 客户程序只能通过接口与c o m对象进行通信, 它应该能够控 制c o m对象的存在与否。如果客户对对象的操作己经完成,以后不需要该对 象,即该对象的生存期己经结束,则客户程序必须及时将对象释放掉。 i u n k n o w n 通过 “ 引用计数”来控制c o m对象的生存期。 接口 查询: 一个c o m对象可以 有多个接口, 客户程序一次只能获得某一接 口指针与c o m对象进行通信,这样就涉及在众多的接口指针中进行查询的问 题。 i u n k n o w n 通过“ 接口 查 询” ( q u e ry i n t e r f a c e ) 来实 现接口 之间的 跳转。 i u n k n o w n接口 包括三个成员函数: q u e ry i n t e r f a c e ,a d d r e f ,r e l e a s e。 其中 a d d r e f ,r e l e a s e 用于对象生存期管理, q u e r y i n t e r f a c e 用于c o m对象的接口 指 针查询。下面为i u n k n o w n 的定 义 ( i d l ) i n t e r f a c e i un k n o wn h r e s u l t q u e r y i n t e r f a c e ( i n r e f i i d , o u t v o i d * * p p v ) ; 4 +master 位论 文 s t i i e s i s u l o n g u l o n g a d d r e f ( v o i d ) ; r e l e a s e ( v o i d ) 2 . 3 . 2 引用计数 引用计数是使组件能够控制对象生命周期的最简单也是最有效的方法。 c o m组件通过维护引用计数的数值,来决定 c o m对象的生存期。引用计数 是一个整数,它的初始值为0 。当客户获得一个接口指针时,此引用计数值将 增 l ,当客户使用完该接口指针后,组件的引用计数值将减 1 。当引用计数值 为 0时,表示没有客户在使用对象或者接口,组件即可从内存中删除。其中 l u n k n o w n 接口成员函数a d d r e f 和r e l e a s e 分别完成引用计数的增 1 和减 1 操 作。 a实现引用计数的三种方案 1 .组件级 设置一个针对整个组件全局的引用计数。当实现组件时, 用一个全局整数 变量记录引用计数值,当组件被初始装入内存时,该计数值为0 。当有对象被 创建时, 计数值开始增加, 在整个组件被使用过程中, 计数值一直保持大于0 1 当组件中的所有对象都被用完后,计数值减为0 , 从而组件可以从内存中被释 放掉。 该引用计数方法可以控制组件模块的生存周期,但不能控制c o m对象的 生存周期。这样在组件程序运行过程中如果产生了多 个c o m对象,都必须等 待所有的对象被使用完后,对象才能够被释放,这降低了系统资源的利用率。 这个缺点称之为计数分辨率太粗。 2 .对象级 设置一个针对 c o m 对象的引用计数。对于多个对象的组件,通过针对 c o m对象的引用计数可以在对象被创建时计数值增 1 而在客户不再使用该对 象时使计数值减1 ,当计数值为0 时就将该对象释放掉,这样有效的提高系统 资源的利用率。组件程序通过一个全局的对象计数值来控制组件的生存周期, 硕士学位论文 ma s t e r s t he s i s 这样当组件程序发现没有对象存在时组件模块就可以被释放。 这样就避免了计 数分辨率太粗的缺点 3 .接口级 为每个接口设置一个引用计数。通过接口的引用计数,可以有效掌握客户 对接口的使用情况。由于一个 c o m对象可能有多个接口,这就导致了当一个 接口的引用计数值为0 时, 还要判断是否所有的接口引用计数值为0 时, 只有 当所有的引用计数值为0 时该对象才能被释放。 这样就导致了计数分辨率太细 的缺点。 下图所示说明了三种引用计数的层次关系 组件模块 组件引用计数 对象乙 i un k n o w 其他接口 2 -4引用计数层次关系图 b引用计数的用法 1 ,客户引用接口 时进行增1 操作, 调用i u n k n o w n : :a d d r e f q 2 .客户用完接口时进行减1 操作,调用i u n k n o w n : :r e l e a s e o 3 .当对象的计数值为0 时,释放对象 4 .当组件中所有对象的引用计数值为0 时,卸载组件 硕士学位论文 m a s t e r s t i 止 s i s 2 . 3 . 3 接口查询 一 个c o m对象可以 实 现多 个接口 , 客户程序通过q u e r y i n t e r f a c e 函 数来查 询组件是否支持某个特定的接口 。如果支持则 q u e r y i n t e r f a c e 将返回一个指向 此接口的指针, 否则返回值将是一个错误代码。 然后客户可以接着查询其它接 口或者将组件卸载。 q u e ry i n t e r f a c e 带有两个参数: h r e s u l t 一 s t d c a l l q u e ry i n t e r f a c e ( c o n s t i i d 第一个参数标识了 客户所需的 接口, 第二个参数是q u e r y i n t e r f a c e 存放请求 接口指针的地址。 q u e r y i n t e r f a c e 的实现 如图所示 2 - 5 q u e ry i n t e r f a c e 实现示意图 类c j i lu 继承了两个i u n k n o w n 接口, 下面的 程序通过q u e r y i n t e r f a c e 可以 返回三种不同的指针:l u n k n o w n . i d e l e t e , l i n s e r t o h r e s u l i 泣s t d c a l l c m y c l a s s : :q u e ry l n t e r f a c e ( c o n s t i i d e l s e i f ( i i d =i i d 一 i d e l t e ) 毛 * p p v = s t a t i c - c a s t ( t h i s ) ; e l s e * p p v = n u l l ; r e t u r n e 一 o i n t e r f a c e ; s t a t i c c a s t ( * p p v ) 一 a d d r e f q ; r e t u rns o k ; 前面讲述了c o m对象, 接口, 组件等, 下面给出一个示意图来表示这些名 词的具体关系。 ( un k n o wn c o m 组件 添加数据 c o m对象 1 i i c o m对象2 删除数据 2 -6 c o m组件、c o m对象、c o m接口关系 2 . 4进程内组件和进程外组件的调用 2 . 4 . 1 进程内组件 客户程序在调用组件程序服务时,将组件程序装入到自己的内存中,导致 客户程序和组件程序运行在同一个进程中, 这就称为进程内组件。由于客户程 序和组件程序运行在同一个进程中, 客户代码可以 直接调用v t a b l e 的成员函数, 1 5 硕士学位论文 6 t a s i e r s 1 1 汪 s i s 它的效率非常的高。下图为进程内组件调用情况: 2 - 7 进程内组件直接调用 2 . 4 . 2 进程外组件 如果组件程序独占一个进程,而不使用客户程序的进程空间,这种组件程 序称为进程外组件程序。在 w i n d o w s 平台上一般用 e x e程序模块来实现进程 外组件程序。 对于进程外组件, 组件和客户之间的通信必须跨越进程边界。 c o m 采用了本地过程调用 ( l o c a l p r o c e d u r e c a l l , l p c ) 和远程过程调用 ( r e m o t e p r o c e d u r e c a l l , r p c )的方法进行进程之间的通信。其中l p c用于同一机器 上的不同进程之间通信,而 r p c用于在不同机器上的通信。下图为进程外组 件与客户程序通信示意图 6代理对象返 654 回最终结果 务完成 1 客户调 接口成员 用组件 象接口 员函数 2 -8进程外组件与客户程序通信示意图 由图中可知客户程序完成一次功能调用, 它必须通过代理d l l 和存根d l l 完成l p c调用。 而客户程序调用的参数必须先经过代理d l l处理,它将参数 以及其他一些调用信息组装成一个数据包给组件进程, 这个过程称为参数列集 ( m a r s h a l i n g ) 组件过程接收到数据包后,要进行解包将参数信息提取出来, 这个过程称为参数散集 ( u n m a r s h a l i n g ) e 1 6 硕士学位论文 ma s i e k s t h e s i s 接口i c l a s s f a c t o r y的 成员函 数c r e a t e i n s t a n c e 用于 创建对应的c o m对象。 每个 c o m 对象都有一个相应的类工厂对应。 如果一个组件程序实现了多 个 c o m对象,则相应的有多个类工厂对应。 接口i c l a s s f a c t o r y的 成员函数l o c k s e r v e r 用于 对组 件生 存期的 控制。 在 某 些情况下, 用户可能在组件对象释放后仍然需要将组件程序锁定在内存中, 这 样通过用户保留的类工厂中的接口指针可以再次调用组件对象。 这样就需要通 过l o c k s e r v e ; 来实现锁定和解锁, 其原理类似于前面所述说的接口引用计数原 理 。 类工厂本身也 是c o m对象, 它是由 一个引出 函 数d 1 1 g e t c l a s s o b j e c t 创建 的。 d 1 1 g e t c l a s s o b j e c t 函 数的原型如下: h r e s u l t d i i g e t c ia s s o b j e c t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《城市轨道交通概论》试题库15套
- 基本公共卫生服务项目考试题库(含答案)
- 中级银行从业资格考试风险管理模拟题及答案第二套
- 信息技术学业水平考试模拟七信息技术试题(解析版)
- 中国铁塔计算机类笔试题
- 商业计划书的制作与演示考试满分答案
- (新版)中级养老护理资格考试题库(完整版)
- 2025年榆林市榆阳区特岗教师招聘考试笔试试题
- 东方航空面试流程
- 北师大中文系古代文学专业历年考研试题
- 储能解决方案介绍
- 2025年大学《数据科学-数据库系统原理》考试参考题库及答案解析
- 房屋漏水检测报告和鉴定报告
- 2025浙江绍兴北站站区综合管理服务中心招聘辅助人员92人考试笔试备考试题及答案解析
- 杂志代理授权协议书模板
- 肉驴养殖项目可行性研究报告
- 公司内部控制制度及操作流程手册
- 市场部的安全生产职责
- 2026年能源加工公司产学研合作研发项目管理制度
- 肾造瘘护理查房
- 甲状腺护理教学查房
评论
0/150
提交评论