




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(申请工学硕士学位论文) 基于 动态织入 术 养单位:计算机科学与技术学院 学科专业:计算机应用技术 研 究 生: 尹 博 指导教师:赵岳松 副教授 2006 年 11 月 武汉理工大学硕士学位论文 2 分类号 密 级 学校代码 10497 学 位 论 文 中 文 基于 题 目 英 文 题 目 研究生姓名 尹 博 姓名 赵岳松 职称 副教授 学位 本科 单位名称 计算机科学与技术学院 邮编 430070 申请学位级别 硕士 学科专业名称 计算机应用技术 论文提交日期 2006年 11 月 论文答辩日期 学位授予单位 武汉理工大学 学位授予日期 答辩委员会主席 评阅人 指导教师 武汉理工大学硕士学位论文 3 2006 年 11 月 第一章 述 什么需要 软件开发过程就是使用计算机语言将人们关心的现实世界的问题映射到计算机世界进行求解的过程 。 软件设计的主要目标是要实现好的结构 ,使被开发出来的软件具有良好的构造性和演化性 ,而好的代码带给程序员好处的最终体现就是代码复用。 回溯程序设计范型的发展以及各种程序设计语言的兴起 ,体现了人们对抽象程度的不断追求 ,通过更高层次的分解和模块化来解决日益增长的软件复杂性。结构化 程序设计提供了功能层次的抽象 ,供了对象层次的抽象 , 然而 ,面向对象技术并没有彻底解决软件开发中的维护、复用等问题。在面向对象世界里 ,软件被划分为多个离散的类 ,每个类担任一个角色 ,以此来实现软件系统角色的划分。但是类与类之间的关系通常是错综复杂的 ,面向对象只通过继承表达了纵向的联系 ,而类与类之间横向的联系是其所忽略的 ,结果导致类之间的一些共同属性散乱分布在各个类的代码中 1。从角色划分角度来说 ,类由于承担了多个角色而导致代码混乱 ,结果使得封装不严密 ,划分的角色也不清晰 ,这显然与面向对象思想相违背 ; 实际上软件具有固有的复杂性 ,这是由一些因素决定的 ,包括问题域本身的复杂性 ,项目管理开发过程存在困难和程序状态的复杂性等等。如何处理这种日益增长着的复杂性一直是困扰软件开发人员的问题之一。复用带来沉重的负担。此外 ,大型系统、分布式系统和灵活性要求较高的系统中也存在很多局限。而 供了关注点层次的抽象 2。 功地模块化了软件系统中的核心关注点却遗漏了繁琐的横切关注点 ;以模块化横切关注点为目标的新型程序设计范型 ,它是对 演化发展和补充 ,是在更高的抽象层次上 ,充分分析了软件系统 中依然存在的软件维护、复用、扩展等问题的本质后 ,提出的武汉理工大学硕士学位论文 4 一种改进方案。 然而软件固有的复杂性和抽象性使得软件的复用不可能像很多实物的复用那么容易 ,而只是较 保持了软件需求阶段的概念与实现阶段模块之间的一一映射 ,从而提高了软件的可理解性、可维护性、可复用性和可扩展性 3。 本质特征 将通用需求功能从不相关 的 类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。是这种实现分散关注的编 程方法,它将 “关注 ”封装在 “切面 ”中 4。 关注点就是一个特殊的目标、概念或实现某种特定功能的模块,常在多个模块中出现。一般而言 ,可以把关注点理解为满足用户需求、有关软件实现的多种事项 ,可以说一个关注点就是软件要解决的一个问题 5。 关注点可分成两大类 : 核心级关注点和系统级关注点 ,整个软件系统可以理解为由一系列关注点组成 。 以 动取款系统为例,其关注点包括:密码验证、取款、余额查询、打印、日志记录等等。 核心级关注点包括 取款、余额查询、打印。 而系统级关注点包括 密码验证 、 日志记录 。 系统级关注点会影响多个 模块的实现 ,比如在取款、余额查询、打印过程中,通常会交织有密码验证、日志记录的动作, 所以也被称为横切关注点。从技术上来讲 ,一个复杂的软件系统可以 被看成是多个核心级和系统级关注点的组合实现 6。 横切关注点通常横跨多个业务逻辑模块 ,与核心关注点交织在一起,正是这种混乱阻碍了软件的维护和复用。 在面向对象软件开发的需求和设计阶段 , 各个关注点往往还是彼此分离的 ,而到了实现阶段 ,提供的实现方式无法再保持核心关注点和横切关注点的分离 ,导致了代码的交织与混乱。 ,从而实现了横切关注点的模块化。 切面 是 核心 ,就是把对一个可能横切不同的多个对象的关注点模块化 ,这些模块化单元就叫 “切面 ”。 最小的耦合处理每个关注点 ,使得即使是横切关注点也是模块化的。这样的实现产生的系统 ,其代码的冗余小。模块化的实现还使得系统容易理解和维护 。 熟悉设计模式的读者都知道 23 个设计模式,为了提高设计模式的可复用性, G. 造了 23 个设计模式,对于其中的武汉理工大学硕士学位论文 5 17 个模式,他们成功地借助 除了各参与者之间的代码级依 赖部分。用面向 术重写后,不仅解决了 设计模式在应用中带来的模式框架代码与业务代码混淆时的难理解情况, 也使代码行大大缩减,并保持了大多数性能优点。 入了 切面 的概念 ,切面 是对横切关注点的抽象 ,使得可以把横切关注点从系统逻辑中抽离出来 ,从而更好地模块化。同时 切面 会通过一定的编织策略在编译或运行的某个阶段同业务逻辑结合在一起 ,形成完整的系统 7。 新引入的一些概念 (1)连接点 ( 程序执行过程中的点 ,比如调用某个类里的特定方法的地方。 (2)切入点 (: 切入点捕获、识别程序流程中的连接点 ,一旦捕获了一个连接点 ,那么就可以在这些连接点的执行之前或之后做某些动作。这些动作在建议中指定。 (3)通知 /建议 ( : 指定到达特定切入点处应执行的代码。 供了三种把建议关联到连接点的方式 : 在 前执行。 在 后执行。 替原 方法的执行。 (4)倡导 ( 通知 只是在程序运行时改变程序的行 为 ,是动态的改变。而倡导可以改变程序的静态结构 ,如类中的成员 ,或者类之间的关系。 (5)切面 ( 类似于 的 对以上几种元素的封装。它把切入点、 通知 和倡导包在一起 8。和类相似 ,切面 也可以包含方法和属性 ,从其他类或 切面 扩展以及实现接口等。与类不同的是 ,不能用 创建一个 切面 实例。 实现由以下 三个部分 组成 : ( 1) 组件语言 (负责系统的核心关注点。组件语言就是传统的程序设计语言 ,如 的组件语言就是标准 组件语言不一定是面向对象风格 ,如 但 结合最为自然和方便 ,所以大多数组件语言均采用面向对象语言。 ( 2) 切面 语言 (负责系统的横切关注点。 切面 语言是 6 中专用于处理横切关注点的语言 ,也是 它采用了面向对象的封装思想 ,将横切关注点封装在 。 ( 3) 编织器 (组件语言和 切面 语言 的并行与合作由编织器无缝编织实现 ,这样程序员可以在两个维度上对软件进行设计和实现 ,解决了横切关注点的模块化问题 9。 系统的功能由两种语言合作完成 ,即系统的主要功能由组件语言完成 ,而横切功能由 切面 语言完成。 横切关注点之所以会散乱分布在软件的多个模块中 ,是因为这些模块都需要横切关注点提供的功能。 了集中定义这些功能外 ,还必须提供一种机制让其他模块使用这些功能 ,这便是编织器 (主要工作:将 入到特定的软件关注点处。 织入器的工作原理类似于面向过程或者面向对象程序设计中的链接器(但又不等同于链接器。织入器连接的是两种不同的模块 ,它比链接器更复杂 。 织入可以发 生在预处理阶段 ,也可以发生在编译后甚至程序运行阶段 。 织入器的复杂性在于它要识别 切面 代码中指出来的带有条件的程序切入点 ,在不破坏原有程序的功能语义的前提下把通知代码织入到原有程序中去 。 目前主要有两种编织器:静态织入器和动态织入器 10。 静态织入器工作在预处理 (段 ,在源程序级织入 切面 代码 ,有时可以称其为源程序级的程序转换器 (绝大多数 比如 等 。 动态织入器是指具有可以在二进制级或者程序 运行阶段织入 切面 代码的能力的织入器 ,比如 可以在程序运行时动态织入可执行代码 。 静态织入器通常需要已有程序的源程序才能工作 ;而动态织入器则没有这方面的要求 ,它一般具有非常强大的对二进制程序或者程序运行环境的操纵能力 ;但动态织入器的效率不及静态织入器 11。 个例子 假设在一个系统中,有这样一种需求:多个访问类同时访问一个共享数据对象时,每个访问类在访问这个数据对象时,需要将数据对象上锁,访问完成后,再实行解锁,供其它并发线程访问,这是我们处理并发访问资源的方式。 为了实现这个 需求,先实现传统的编程,这里我们假定有一个写锁,对数武汉理工大学硕士学位论文 7 据对象实行写之前,首先对这个对象进行上写锁,写操作完毕后,必须释放写锁。 首先,我们需要一个锁,这个锁可以是数据对象中一个字段或其它,这里使用 写锁 )作为我们的锁资源 ; /上锁 /对 行写逻辑操作 . ); /解锁 ; /上锁 /对 行写逻辑操作 . ); /解锁 武汉理工大学硕士学位论文 8 /执行 或 假设可能存在另外一个访问类,也将对数据对象实现写操作,代码如下: ; /上锁 /对 行写逻辑操作 . ; /解锁 / 执行 . 武汉理工大学硕士学位论文 9 以上是传统编程的实现 的伪代码 ,这种锁的实现方式是在每个具体类中实现,如下图: 图 统编程中的实现方法 这种实现方式的缺点很多: 冗余:有很多重复的编码,如 等; 可 重用 性低 : 具体访问类因为也包含 “锁 ”状态之类的相关代码,只能被重用在相关有 “锁 ”的场合,重用范围很窄。 方法重用性几乎为零。 设计思想不易达成: “对 数据对象 的 写操作必须使用锁控制 ”这个目的不容易显现,如果 其它人设计了一个访问类 ,他 完全 可能编写 一段不使用锁机制就对这个数据对象 进行 写操作的代码。 以下进述如何用 念来重新实现上述需求 ,解决上述问题 。如果说上面代码在每个类中实现上锁或解锁,类似横向解决方式,那么 从纵向 切面 来解决上述问题, 如下图所示 : 武汉理工大学硕士学位论文 10 图 的实现方法 这个纵向切面 为 切面 ), 实 现 : 下面我们使用 实现之一 对上述需求改写。 现,它稍微扩展了一 下 言,增加了一些 ,语法如下: 法名: 加了 型 。 使用 何实现上图所谓切面式的编程呢?首先 ,我们将上图纵向切面称为 么我们建立一个类似 建立一个 同样,建立一个 代码如下: 武汉理工大学硕士学位论文 11 在此,我们 建立一个 为 码如下: ; . : ) | ) | ) ; : ; /上锁 : ; /解锁 . 上述代码关键点是 味切入点或触发点, 在执行 方法, 方法等时会触发 。 和即为切入点 捕获的连接点 。 明 前 所 要 执行的操作,即 要织入的 上锁。 明 后 所 要 执行的操作 :解 锁。 通过引入上述 么 码可以清洁如下: 武汉理工大学硕士学位论文 12 /对 行写逻辑操作 /对 行写逻辑操作 /执行 或 每当要对 行写操作时,即执行到 或 方法时,我们所定义的 的切入点 会捕获到 该 方法(即 并根据规则将 相应 的 入到该段代码中, 此例中 加到对 写操作之前 (该 型为 加到对 写操作之后 (该 型为 正由于此, 关于 “锁 ”的代码都不见了, 只保留了 数据操作的主要方法 ,即核心关注点 。 而锁操作(即横切关注点)会在执行到相应的代码处自动织入代码中。 通过上例 我们 已经知道 如何从切面 解决并发访问武汉理工大学硕士学位论文 13 应用需求的,其中 的关键就 是一套类似事件触发 的 机制。 似触发器,是事件 生源,一旦 触发,将会产生相应的动作 部分 为 所以 两个基本的术语: 类似于 事件机制的 述并发访问 实例 中 的 下图所示: 图 1.3 解 小结 : 真正的执行代码,或者说关注的实 现, 类似 代码中激活 执行的触发点。 一系列的 为 时代指 中 分又有: 解释器并没有在 现,在使用 态代理 现的架中使用,解释有方法调用或对象构造或者字段访问等事件,是调用者和被调用者之间的纽带,综合了 理模式甚至职责链等模式。 修改一个类,以增加字段、方法或构造或者执行新的接口 。 例如上述并发访问应用中,如果想为每个 象生成相应的 么可以在 为数据对象增加一个字段 下: 武汉理工大学硕士学位论文 14 d ) d; ,增加一字段 /造时触发 /当 象生成时,将 段赋值为 ( ; . 上述代码等于在 中加入一行: . ; . 综上所述,我们可以看出使用 以下优点: ( 1) 模块化横切关注点 : 最小的耦合处理每个关注点 ,使得即 使是横切关注点也是模块化的。 ( 2) 系统容易扩展 : 由于 切面 模块根本不知道横切关注点 ,所以很容易通过建立新的 切面 加入新的功能。 ( 3) 设计决定的迟绑定 : 使用 计师可以推迟为将来的需求作决定 ,因为他可以把这种需求作为独立的 切面 很容易地实现。设计时应当考虑的多一点还是少一点这一问题也就不复存在。 ( 4) 更好的代码重用性 : 每个 切面 实现为独立的模块 ,模块之间是松散耦合的 12。举例来说 ,你可以用另外一个日志写入器 切面 来代替当前的 ,用于把武汉理工大学硕士学位论文 15 日志写入数据库 ,以满足不同的日志写入要求。松散耦合的实现意 味着更好的代码重用性。 第二章 和欣操作系统概述 欣嵌入式操作系统 和欣嵌入式操作系统(以下简称 其 件技术, 是 863 计划“十五 ”重大软件专项、信息产业部产业发展基金、上海科教兴市第一批 29 个重大项目之一。 欣技术的由来 因特网时代以前的传统应用软件,大多是静态链接而成,由某一家公司提供,所有功能都集成在同一个软件中,一旦链接之后运行时就不可能动态替换其中的软件模块。那时的操作系统有两大功能:首先它向用户提供一个分时系统;其次是向用户提供一组函数库 13 。用 户程序从主程序起,一步一步驱动软件控制流程,最终完成计算工作。操作系统始终处于被动地位,为用户程序提供服务。这类系统的典型范例有 控制台模式下的 作系统,以及目前存在的大多数嵌入式操作系统 14。而在网络普及的时代,这种模式显然已经过时。程序作为构件自动加载,多个构件互相操作,互相通信,已经成为 中间件程序设计技术是 代技术的纲。中间件是操作系统根据元数据生成的构件, 术都是围绕中间件发展的。在软件技术的发展中,为了处理元数据 发明了新语言,为了生成中间件发明了虚拟机,为了建立软件工厂发明了构件库。语言、虚拟机、构件库三位一体形成了当今世界软件编程的主流发展趋势,而虚拟机实际上可以看成为一种特殊的操作系统 15。 科泰世纪科技有限公司基于对 代中间件技术发展的深入理解,开发出具有完全自主版权,采用先进的构件、中间件编程技术构筑的下一代高性能网络操作系统,并制定了跨操作系统的构件、中间件标准 供跨平台的 件运行环境、开发平台和构件库;提供支持 最新 准的浏览器引擎;提供全面的下 一代高性能网络操作系统应用开发环境 16。 武汉理工大学硕士学位论文 16 “和欣 ”技术体系提供了规范化、开放的接口标准,统合构件技术、操作系统内核技术、支持构件化软件开发的集成开发环境等创新技术,形成了完整的技术体系,与国际主流软件技术同步并且兼容 17。 欣嵌入式操作系统简介 一个基于微内核体系结构,支持多进程、多线程 18,具有抢占式、基于线程的多优先级任务调度的 32 位嵌入式操作系统。针对嵌入式应用而开发的 有体积小,速度快,效率高的特点,适合于各种内嵌有 32 位微电 脑芯片的智能化电子设备 19。 从应用编程的角度看, 供了一套完整的、符合 范的系统服务构件及系统 在各种嵌入式设备的硬件平台上运行 进制构件提供了统一的编程环境。 提供了一组动态链接构件库,这些构件库通常是开发嵌入式应用系统时不可缺少的: 图形系统构件库(方便开发图形用户操作界面); 设备驱动构件库(各种输入输出设备的驱动); 文件系统构件库( 容,包括对 的支持); 网络系统构件库( P 等网络协议支持)。 供的构件库,以及用户开发的应用程序构件都是通过系统接口与内核交互,从这个意义上说,它们处于同样的地位。用户可以开发性能更好或者更符合需求的文件系统、网络系统等构件库,替换由科泰世纪公司提供的构件库,也可以开发并建立自己的应用程序构件库。这就是基于构件技术的操作系统的优势之一。 此外,为了方便用户编程,在和欣 还提供了以下函数库: 与微软 容的应用程序编程接口 ( 标准 C 运行库( 和欣提供的工具类函数( 所以,在相互兼容的硬件平台上,不管运行的是 是 作系统,应用程序可以不加区分地在其上运行。 现并支持系统构件及用户构件相互调用的机制,为 件提供了运行环境。关于 件的运行环境,其描述与 “和欣构件运行平台 ”是一武汉理工大学硕士学位论文 17 样的。因此,我们可以把 成是直接运行在硬件平台上的 “和欣构件运行平台 ”。 图 欣操作系统 的系统结构图 欣灵活内核简介 和欣操作系统的实现全面贯穿了 想, 件可以运行 于不同地址空间或不同的运行环境。可以把操作系统的内核地址区看成是一段特殊的地址空间,用户可以根据运行时的需求,自主选择将操作系统的某些系统服务构件、文件系统、图形系统、设备驱动构件等运行于内核地址空间或用户地址空间 20。与传统的操作系统的 “大内核 ”、 “微内核 ”体系结构相比,和欣操作系统内核里提供的系统服务,完全可以由用户依据系统自身的需求动态决定。因此称和欣操作系统内核为 “灵活内核 ”( 21。 和欣灵活内核的体系结构,利用构件和中间件技术解决了长期以来困扰操作系统体系结构设计 者的大内核和微内核在性能、效率与稳定性、安全性之间不能两全其美的矛盾。 下图来表示和欣灵活内核及其与系统构件和应用构件的关系: 函数库 动态链接库 硬件 和欣操作系统 和欣操作系统内核 应用程序 构件运行平台 武汉理工大学硕士学位论文 18 图 和欣 ”灵活内核与系统构件和应用构件的关系 用和欣构件平台编程 对程序员来说,编写运行于和欣构件运行平台上的程序,运用 术和跨平台技术的具体方法,体现在对构件库的接口方法、通用 数的调用上。应用程序运行所需要的动态链接库,则是在程序运行时由和欣构件运行平台自动加载的 22。 下图简明地表示了编写运行于和欣构件运行 平台上的应用程序所需的相关要素之间的关系的示意。 灵活内核 内核状态 用户状态 设备驱动、 核心构件 系统安全、稳定性考虑 系统速度、效率考虑 应用构件 构件接口方法 数库 头文件 C/C+源程序 统一的接口、函数 标准 C 库函数 和欣构件运行平台 构件库 函数库 应用程 序 武汉理工大学硕士学位论文 19 图 用程序与构件平台关系图 欣的优势 别于其他商用嵌入式操作系统的最大优势就是: 全面面向构件技术,在操作系统层提供了对构件运行环境的支持; 用构件技术实现了 “灵活 ”的操作系统内核。 在新一代因特网应用中,越来越多的嵌入式产品需要支持 提供一定是基于构件的 23。在这种应用中,用户通过网络获得服务程序,这个程序一定是带有自描述信息的构件,本地系统 能够为这个程序建立运行环境,自动加载运行。这是新一代因特网应用的需要,是必然的发展方向。 是应这种需要而开发,率先在面向嵌入式系统应用的操作系统中实现了面向构件的技术。 因此 , 构件化的 以为嵌入式系统开发带来以下好处: ( 1) 在嵌入式软件开发领域,导入先进的工程化软件开发技术。嵌入式软件一般用汇编语言、 C 语言,在少数系统中已经支持了 C+开发,但是由于还没有一个嵌入式操作系统能够提供构件化的运行环境,可以说,嵌入式软件开发还是停留在手工作坊式的开发方式上 24。 得嵌入式应用的软件开发能够实现工程化、工厂化生产。 ( 2) 可以动态加载构件。动态加载构件是因特网时代嵌入式系统的必要功能。新一代 移动电话等移动电子产品,不能再像以前那样由厂家将所有的功能都做好后固定在产品里,而要允许用户从网上获得自己感兴趣的程序。 ( 3) 随时和动态地实现软件升级。动态加载构件的功能,同样可以用于产品的软件升级,开发商不必为了添加了部分功能而向用户重新发布整套软件,只需要升级个别构件 25。 ( 4) 灵活的模块化结构,便于移植和剪裁。可以很容易定制成为针对不同硬件配置的紧凑高效的嵌入 式操作系统。添加或删除某些功能模块也非常简单。 ( 5) 嵌入式软件开发商容易建立自己的构件库。在不同开发阶段开发的软件构件,其成果很容易被以后的开发所共享,保护软件开发投资。软件复用使得系列产品的开发更加容易,缩短新产品开发周期 26。 武汉理工大学硕士学位论文 20 ( 6) 容易共享第三方软件开发商的成果。面向行业的构件库的建设,社会软件的丰富,使得设备厂家不必亲自开发所有的软件,可以充分利用现有的软件资源,充分发挥自己的专长为自己的产品增色。 ( 7) 跨操作系统平台兼容,降低软件移植的风险。在和欣开发环境上开发的软件所具有的跨平台特性,使 得用户可以将同样的可执行文件不加修改地运行在和欣操作系统(嵌入式设备)与 000/。特别是对于需要将 的软件移到嵌入式系统以降低产品成本的用户,这一特点不仅可以大大节约软件移植的费用,还可以避免因移植而带来的其他隐患。 ( 8) 功能完备的开发环境和方便的开发工具,帮助嵌入式开发人员学习和掌握先进的构件化软件编程技术,提高软件开发效率。应用软件可以在开发环境下开发调试,与硬件研制工作同时进行,缩短产品研制周期。 件技术 说到构件技术 27,必 须首先提到面向对象技术。从面向对象技术一经问世即追求的目标角度来看,它支持、鼓励软件工程实践中的信息隐藏、数据抽象和封装,在一个对象内部的修改被局部隔离,从而使面向对象开发的软件易于修改、扩充和维护。面向对象技术鼓励重用,不仅是代码的重用,还包括分析、设计的模型的重用 28。更进一步,面向对象技术还支持并发、层次和复杂等一些在目前的软件系统中常见的现象。而所有这些目标,也依然是基于构件技术所追求的。因此,构件技术是基于面向对象技术的基础上发展起来的。但是,基于构件的系统开发与面向对象的开发存在着巨大的区别 ,其中,最主要也是最根本的区别在于基于构件技术拓展了传统的接口定义,它不再仅仅是某个对象的外部表现,而是一堆功能描述的接口集,它把方法型 构件 的接口和带有方法体实现的类再一次分开,使系统的开发重点从具体的功能实现转移到面向接口的系统架构上 29。 在国外,最近几年内,基于构件的系统开发技术无论在理论上还是在实践中都已相当成熟。微软的 2是一种适用于分布式 在国内,基于构件技术的理论和实际工程也己被人们普遍关注。我 国软件业对构件技术的研究主要有:北京大学软件工程研究所、中国科学院软件研究所、上海普元、互联网实验室。但从总体来看,其发展与国外相比还是存在着武汉理工大学硕士学位论文 21 较大的差距。科泰已经加入到构件技术的研究领域,开发出具有自主知识产权的构件技术 定了一组构件间相互调用的标准,使得二进制构件能够自描述,能够在运行时动态链接。 容微软的 是和微软 比, 过时的约定,禁止用户定义 非自描述接口;完备了构件及其接口的自描述功能,实现了对 扩展;对 用户界面 进行了简化包装 30。 术的由来 80 年代以来,目标指向型软件编程技术有了很大的发展,为大规模的软件协同开发以及软件标准化、软件共享、软件运行安全机制等提供了理论基础。其发展可以大致分为以下几个阶段。 ( 1) 面向对象编程 : 通过对软件模块的封装,使其相对独立,从而使复杂的问题简单化。面向对象编程强调的是对象的封装,但模块(对象)之间的关系在编译的时候被固定,模块之间的关系是静态的,在程序运行时不可改变模块之间的关系,就是说在运行时不能换用零件 31。其代表是 C+语言所代表的面向对象 编程。 图 向对象的编程模型 ( 2) 面向构件编程 : 为了解决不同软件开发商提供的构件模块(软件对象)可以相互操作使用,构件之间的连接和调用要通过标准的协议来完成。构件化编程模型强调协议标准,需要提供各厂商都能遵守的协议体系。就像公制螺丝的标准一样,所有符合标准的螺丝和螺母都可以相互装配。构件化编程模型建立在面向对象技术的基础之上,是完全面向对象的,提供了动态构造部件模块(运行中可以构造部用户程序 模块 模块 模块 模块 武汉理工大学硕士学位论文 22 件)的机制。构件在运行时动态装入,是可换的。其代表是 术 32。 图 向构件的编程模型 ( 3) 面向中间件编程 : 由于因特网的普及,构件可来自于网络,系统要解决自动下载,安全等问题。因此,系统中需要根据构件的自描述信息自动生成构件的运行环境,生成代理构件即中间件,通过系统自动生成的中间件对构件的运行状态进行干预或控制,或自动提供针对不同网络协议、输入输出设备的服务(即运行环境)。中间件编程更加强调构件的自描述和构件运行环境的透明性,是网络时代编程的重要技术。其代表是 C#语言)。 图 向中间件的编程模型 在这样的发展过程 中,人们逐步深化了对大规模软件开发所需的科学模型、网络环境下软件运行必要机制的理解,使软件技术达到了更高的境界,实现了: 构件的相互操作性。不同软件开发商开发的具有独特功能的构件,可以确保与其他人开发的构件实现互操作。 软件升级的独立性。实现在对某一个构件进行升级时不会影响到系统用户程序 零件 零件 零件 零件 零件 用户程序 零件 零件 零件 零件 零件 零件 零件 零件 构件模块 代理构件 零件 武汉理工大学硕士学位论文 23 中的其它构件。 编程语言的独立性。不同的编程语言实现的构件之间可以实现互操作。 构件运行环境的透明性。提供一个简单、统一的编程模型,使得构件可以在进程内、跨进程甚至于跨网络运行。同时提供系统运行的安全、保护机制。 术就是在总 结面向对象编程、面向构件编程技术的发展历史和经验,为更好地支持面向以 务)为代表的下一代网络应用软件开发而发明的。 大程度地借鉴了 术,保持了和 兼容性,同时对 行了重要的扩展。 件技术概要 件技术是面向构件编程的编程模型,它规定了一组构件间相互调用的标准,使得二进制构件能够自描述,能够在运行时动态链接。 容微软的 是和微软 比, 除了 过时的约定,禁止用户定义 非自描述接口;完备了构件 及其接口的自描述功能,实现了对 扩展;对 用户界面进行了简化包装,易学易用。 从上面的定义中,我们可以说 微软 一个子集。 大程度地借鉴了 术,保持了和 兼容性,同时对 行了重要的扩展。在和欣 具的支持下,使得高深难懂的构件编程技术很容易被 C/C+程序员理解并掌握。 术是在总结面向对象编程、面向构件编程技术的发展历史和经验,为更好地支持面向 务)的下一代网络应用软件开发而开发的。 编程思想是 “和欣 ”技术的精 髓,它贯穿于整个技术体系的实现中。 为了在资源有限的嵌入式系统中实现面向中间件编程技术,同时又能得到C/C+的运行效率, 有使用 基于中间代码 虚拟机的机制,而是采用了用 C+编程,用和欣 供的工具直接生成运行于和欣构件运行平台的二进制代码的机制。用 C+编程实现构件技术,使得更多的程序员能够充分运用自己熟悉的编程语言知识和开发经验,很容易掌握面向构件、中间件编程的技术。在不同操作系统上实现的和欣构件运行平台,使得 件的二进制代码可以实现跨操作系统平台兼容。 武汉理工大学硕士学位论文 24 术特性 术的不同之处: 自描述接口 口:继承 以映射 口:继承 以映射与反映射 相关运行信息 信息注册到注册表中 动封装到构件 依赖关系 件只有关于自身接口(或者功能)的自描述 构件的依赖关系进行封装 回调机制 连接对象技术来实现,需实现客户程序与构件对象的连接、事件的激发、接收器等;只支持以接口为单位注册 定义回调机制,只需由构件对象决定何时回调,客户端 在适当的时候注册或注销回调函数;可单独注册回调接口中的每一个处理函数 求必须先实现 需 持模糊指定创建 二进制继承和重载 件技术实现了构件二进制级的继承与重载,实现了构件级别的多态,不暴露基类内部结构,只要基类接口不变,其升级更新与内部结构改变,派生类无需重新编译。此外, 全遵守 范,接口定义支持 键字 注册表 要注册表来保存构件信息,导致构件运行依赖注册表;访问权限不易控制,构件依赖关系建立在完整安装的基础上 33 述构件自身及运行环境等的信息以及构件导入信息都封装在构件本身所在的 ,构件完全自描述,不需要安装与注册 从上面的定义中,我们可以说 微软 一个子集,同时又对微武汉理工大学硕士学位论文 25 软的 和欣 ”技术的精髓,它贯穿于整个 “和欣 ”技术体系的实现中。 名服务机制 命名服务机制属于 件技术的一部分,隶属于 件技术的用户接口部分。 件技术通过命名服务机制提供一种发布、获取、使用 命名服务是一种以字符串为标识的服务。服务程序可以通过操作系统 操作系统注册自己的服务接口,而服务的使用者(即客户端程序)则可以通过 数 获取指定的服务接口。 命名服务包含两个部分:服务器端和客户端。在服务器端,用户获得某个构件接口指针(可以是用户自己的构件,也可以是用户远程获得的构件指针)后,通过 数向内核注册一个命名 服务,用户选择合适的时间注销命名服务并释放资源;在客户端,其他用户可以通过 命名服务完成了将服务与字符串绑定的功能,用户可以通过相应的字符串获得该服务构件对象指针。 命名服务机制的优点 用户程序通过字符串获取相关服务,而服务则可由系统以及其它用户程序提供,这种将服务和服务使用者隔离的方式减小了代码的耦合性,极大地增强了代码的可扩展性和安全性,同时也最大地发挥了系统的功能。 从扩展性来看,一方面,用户可以通过在保持接口定义 不变的情况下修改服务程序代码,升级服务程序;而另一方面,用户也可以通过提供新的接口来扩展新的功能。新用户可以利用新的接口而不影响到旧用户,旧用户代码就可以不经修改和重新编译而正常地运行。 从安全性来看,用户可以将信任度不高的服务放在一个单独的进程中启动,并通过命名服务机制去获取。这样就利用了进程地址空间机制隔离了服务与用户,同时服务和用户之间的数据交换也可以通过系统的构件平台数据交互机制进行检测。 命名服务机制以简单的三个 数向用户提供了对服务构件和字符串从绑定到获取,注销的整套机制,其操作方 法为:调用 数将字符串绑定到服务构件,客户程序通过 数获取服务构件所绑定武汉理工大学硕士学位论文 26 的字符串,调用 数将命名服务注销。 通过命名服务机制,用户可以很方便地获取到 态装载的网络系统、文件系统和图形构件。利用命名服务机制, 以传递共享内存指针以及一些同步对象指针,从而实现了跨进程的进程间通讯。 术的 优点及特殊意义 件技术使先启动应用后启动服务的软件模型成为现实, 为 和欣操作系统的精髓,对原有嵌入式操作系统
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年能量系统优化合作协议书
- 2025年三维编织型材织物合作协议书
- 2025年年3D效果图制作合作协议书
- 职业历程与岗位说明工作证明(6篇)
- 专业摄影师图片授权协议
- 个人向公司无偿借款合同
- 生物制药技术相关试题库建设方案
- 广告投放合作框架合同
- 中央空调采购安装合同
- 农村畜牧业防疫与管理合作协议
- 中华优秀传统文化智慧树知到答案章节测试2023年青岛黄海学院
- 图书馆回溯建库方案
- GB/T 34891-2017滚动轴承高碳铬轴承钢零件热处理技术条件
- 2020年广东省中小学生 天文知识竞赛试题(低年组)
- 2023年安顺市(中小学、幼儿园)教师招聘考试《教育综合知识》模拟试题及答案解析
- GB/T 24573-2009金库和档案室门耐火性能试验方法
- 2023年西门子杯中国智能制造挑战赛
- FZ/T 81007-2012单、夹服装
- 国家开放大学电大《课程与教学论》形考任务3试题及答案
- 国际机票基础知识培训课件
- 蒸汽疏水器原理及简介课件
评论
0/150
提交评论