(计算机应用技术专业论文)基于uml扩展机制的面向方面建模方法研究与应用.pdf_第1页
(计算机应用技术专业论文)基于uml扩展机制的面向方面建模方法研究与应用.pdf_第2页
(计算机应用技术专业论文)基于uml扩展机制的面向方面建模方法研究与应用.pdf_第3页
(计算机应用技术专业论文)基于uml扩展机制的面向方面建模方法研究与应用.pdf_第4页
(计算机应用技术专业论文)基于uml扩展机制的面向方面建模方法研究与应用.pdf_第5页
已阅读5页,还剩52页未读 继续免费阅读

(计算机应用技术专业论文)基于uml扩展机制的面向方面建模方法研究与应用.pdf.pdf 免费下载

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

文档简介

i 摘 要 随着面向方面编程技术的日渐成熟,面向方面建模已成为软件工程学界研究 的热点。面向方面建模利用建模语言对系统进行面向方面的分析和表示,允许设 计人员在系统设计的初始阶段就将问题分解为核心组件和公共组件,并将公共组 件抽象为独立的方面,这可以使软件系统的结构更加清晰、合理,提升了软件系 统的可复用性和可扩展性。 本文介绍了面向方面技术的基本概念、核心思想、面向方面建模领域的研究 现状,分析了 uml 扩展机制、面向方面建模的过程。本文采用基于 uml 的扩展 机制进行建模,对 aspectj 语言的核心概念进行分析,如:横切关注点、连接点、 切入点、通知、类型间声明、方面,分别定义这些核心概念的构造型来扩展其适 合各自语义的元模型,探讨了核心概念之间的关系,并将这些核心概念进行了关 联。本文定义了一个 aspectj 的用户配置文件包,该用户配置文件包采用了扩展 uml 元模型,可以在多个建模工具之间共享,不受限于特定建模工具,方便了建 模人员的同步交流。 结合实际项目“江西省宽带网络综合服务系统”的开发,本文介绍了在需求 分析和设计阶段,采用 uml 扩展机制对该系统中“日志记录” 、 “权限控制”两个 横切关注点进行面向方面建模的详细过程。 结果验证了基于 uml 扩展机制的面向 方面建模方法的可行性、实用性。 关键词:面向方面;建模;uml 扩展机制;aspectj ii abstract with the maturity of aspect oriented programming technology, aspect oriented modeling attracts more and more attention. aspect oriented modeling takes modeling language to analyze and express system in the way of aspect oriented. it allows designer to decompose problem to core components and common components at the beginning of system design. furthermore, common components are abstracted to independent aspect so as to make system architecture clearer and more reasonable, and reusability and scalability of system are better. the thesis introduces concepts of aspect oriented technology, current research status of aspect oriented modeling. it analyzes uml extension mechanism and process of aspect oriented modeling. it employs uml-based extension mechanism to model, and it analyzes concepts of aspectj language, such as crosscutting concern, jointpoint, pointcut, advice, type declaration, and aspect. these concepts are defined to extend meta-model fitting to its semantics. the relationship of concepts is discussed. the thesis defines an aspectj user configure packet, which takes extension uml meta-model, and can be shared by modeling tools so that modeling designer can be easy to communicate synchronized. taking a project as an example, the thesis addresses the process of aspect oriented modeling of two crosscutting concerns in logging sub module and permission control sub module. the results show that aspect oriented modeling based on uml extension mechanism is feasible and practicable. keywords: aspect oriented;modeling;extension mechanism of uml;aspectj 南昌航空大学硕士学位论文原创性声明 本人郑重声明:所呈交的硕士学位论文,是我个人在导师指导下, 在南昌航空大学攻读硕士学位期间独立进行研究工作所取得的成果。 尽我所知,论文中除已注明部分外不包含他人已发表或撰写过的研究 成果。对本文的研究工作做出重要贡献的个人和集体,均已在文中作 了明确地说明并表示了谢意。本声明的法律结果将完全由本人承担。 签名: 日期: 南昌航空大学硕士学位论文使用授权书 本论文的研究成果归南昌航空大学所有,本论文的研究内容不得 以其它单位的名义发表。本人完全了解南昌航空大学关于保存、使用 学位论文的规定,同意学校保留并向有关部门送交论文的复印件和电 子版本,允许论文被查阅和借阅。本人授权南昌航空大学,可以采用 影印、缩印或其他复制手段保存论文,可以公布论文的全部或部分内 容。同时授权中国科学技术信息研究所将本学位论文收录到中国学 位论文全文数据库 ,并通过网络向社会公众提供信息服务。 (保密的学位论文在解密后适用本授权书) 签名: 导师签名: 日期: 南昌航空大学硕士学位论文 第 1 章 绪论 1 第 1 章 绪论 1.1 研究的背景及意义 在计算机科学早期阶段,开发人员使用直接的机器级代码来编程,程序员要 花费很多时间来考虑一种特定机器的指令集而不是手中需要解决的问题本身。结 构化语言的出现摆脱这一问题,它把程序员从必须熟记底层硬件的指令集中解脱 出来。但是,随着软件代码量的迅速膨胀、复杂程度的增加,结构化语言逐渐暴 露出其过程单一、不能大规模复用等缺点。 面向对象编程(oop)可以把系统看作是一批相互合作的对象。类把实现细 节隐藏在接口下,多态性为相关概念提供公共的行为和接口,并允许特定的组件 在无需访问基础实现的前提下改变特定行为1。通过设计模式,最大程度利用面向 对象的特性,诸如利用继承、多态,对责任进行分离、对依赖进行倒置,面向抽 象,面向接口,最终设计出灵活、可扩展、可重用的类库、组件,乃至于整个系 统的架构。然而,面向对象不能很好地解决跨越多个模块的行为,比如一个记录 系统日志的操作分布在系统的几十个类中,面向对象方法一般创建一个基类(或接 口),所有需要记录日志的类都从这个类继承。这种方法使得代码呈现互相交织和 分散的特点,其后果是: (1)代码重用度低:由于一个模块要引用多个关注点实现,对有类似的功能 需求的系统不能很方便的重用该模块。 (2)代码质量差:交织在一起的代码含有隐含的问题,且不易发现问题所在。 (3)维护困难:系统更难升级,如果客户有新的需求很难满足。 虽然目前可以通过多重继承、拦截器模式或应用服务器(如 java ejb 等)解 决这个问题,但这些方法或者不能完全解决横切混合问题,或者实现起来太重量 级,不符合当今轻量级开发的潮流。 面向方面编程(aspect-oriented programming,aop) 2 是施乐公司帕洛阿 尔托研究中心(xerox parc)在 20 世纪 90 年代提出的一种编程规范,它给人们提 供了一个崭新的视角分析和设计软件系统,能很好的解决上述那些模块横切的问 题。它允许开发者动态地修改静态的面向对象模型,构造出一个能够不断增长以 满足新增需求的系统,就象现实世界中的对象会在其生命周期中不断改变自身, 应用程序也可以在发展中拥有新的功能。自 aop 技术提出以来,围绕着 aop 已 南昌航空大学硕士学位论文 第 1 章 绪论 2 经有许多的研究。 (1)面向方面编程语言的研究。一个好的编程方法首先要有好的编程语言支 持,尽管现在一些主流的编程语言都有相应的 aop 支持语言,但都存在使用难度 大,速度慢,且无相应集成开发环境支持等问题,无法广泛使用,有待进一步改 善和优化。 (2) 面向方面编程的理论有待进一步研究。如用什么理论能最好地描述方 面与组件之间的交互等。 (3) 方面的可重用性研究。可重用性是衡量软件质量的一个很重要的因素, 并且 aop 技术的提出目的就是为了降低软件的复杂度,提高软件的复用性,所以 aop 技术同样也存在如何提高软件重用性的问题。 (4) aop 在软件工程方面的应用研究。软件工程通常可分为系统分析、设 计、编码、测试和维护过程。各个工程阶段都需要相应的支持工具,若各个阶段 的工具都能支持 aop 的话,可以在很大程度上降低软件开发过程的复杂度,从而 提高软件质量。 (5) 面向方面建模的研究。利用现有的建模语言和建模工具为 aop 系统建 模。 目前,对面向方面编程语言和面向方面编程理论研究相对比较成熟,而在面 向方面建模方面,不像面向对象建模有一个统一的建模标准,并且拥有众多建模 工具的支持,面向方面建模的研究目前还处于探索阶段,也没有得到建模工具的 支持。但是,正如面向对象建模对面向对象编程的重要性一样,面向方面建模对 面向方面编程的可视化、详述、构造和文档化起到至关重要的作用,尤其是现如 今随着越来越多的项目采用了 aspectj、spring aop 等 aop 语言,面向方面建模 的滞后发展已经严重阻碍了 aop 的应用。 1.2 研究现状 aop 并不是要替代 oop,而是解决一些 oop 难以解决的问题,是 oop 的补 充和发展, 因此作为面向对象建模的标准语言 uml 己被多数研究者作为面向方面 建模语言的首选。然而,uml 标准在设计的时候并没有考虑面向方面的技术,所 以还不能完全表达 aop 的概念。尽管如此,随着 aop 的大规模应用,国内外学 者也对面向方面建模进行了大量研究,以下是研究成果中的一部分: 文献3采用了 uml 的扩展机制,对 aspectj 的 aspect、joinpoint、pointcut 和 advice 设计了 uml 的表示方法和相应的表现方式,并自定义了各自的图形化 南昌航空大学硕士学位论文 第 1 章 绪论 3 符号。 文献4用扩展 uml 表示了 aspectj 的概念, 并提出了一个面向方面特征文件, 但其通过配置文件扩展的 rational rose 工具对面向方面建模时,也和文献3一样 自定义了 aspect 等图标化表示,这样只能局限于 rose 工具建模。 文献5在 uml 扩展机制基础上, 提出面向方面建模语言 auml, 为 pointcut、 advice、 intertype declaration 和 aspect 定义了各自的构造型, 并开发了一种 eclipse 的插件工具来支持面向方面建模,但由于开发的插件工具仍然是自定义了 pointcut、aspect 等图标,因此只能在其开发的插件工具中建模。 文献6和7同样采用了 uml 的扩展机制,也定义了相应的构造型,但他们 对一些构造型采用文本的形式说明其含义,而不是扩展自 uml 元模型。 文献8未采用扩展 uml 的方法, 而是对 aspectj 的 aspect 等概念用增加相应 的 uml 元模型来支持面向方面建模。 文献9提出了不基于扩展 uml 进行建模的方法, 用 uml 的模型图对 aspectj 进行动态和静态横切建模。 文献10利用状态图和类图为代表不同关注点的子模块进行建模和内部联结, 在系统设计阶段区别开主要组件和相关的横切组件,并利用引入的方法来联结它 们。其不足之处在于需要引入额外的方法,增加了系统分析的复杂性。 文献11根据aspectj和aspectc+中元素的语义通过继承相应uml中元素的 方法扩展了 uml 的元模型, 并用相应的扩展机制来表示这些支持面向方面建模的 元素。但其只对 pointcut、advice、intertype declaration 和 aspect 定义了构造型, 而未对 joinpoint 和 crosscut 定义相应的构造型,因此不能全面支持面向方面的概 念。 综观已有的研究成果,大致分为两种方法: (1) 采用不扩展 uml 的方法, 增加新的元模型或 uml 模型图来表示 aspectj 的概念,这不但破坏了 uml 的标准性,还会导致 uml 语言复杂性和表达复杂性 的增加。 (2)采用了基于 uml 的扩展机制来对面向方面建模,通过用 uml 的构造 型、标记值和约束来表示 aspectj 的概念。但以往的研究成果或者采用文本形式来 表示相应的概念,或者自定义了一些图形化的符号来描述,这会使建模局限于特 定的建模工具,一旦更换别的建模工具则需要重新建模。 其中方法(2)不会改变现有的语法和语义,保证了 uml 标准的兼容性,本 文也采用这种方法对面向方面建模。并且,本文在已有研究基础上,对 aspectj 的 核心概念定义各自的构造型,并把它们扩展自适合各自语义的 uml 元模型,在研 南昌航空大学硕士学位论文 第 1 章 绪论 4 究它们之间的关系后,提出一个 aspectj 的用户配置文件包,以达到建模工具间共 享的目的。 1.3 研究的内容 本文主要对面向方面的建模方法进行研究,包括以下几点内容: (1) 找出适合 aspectj 核心概念的语义的 uml 元模型, 定义这些概念的构造 型来扩展自相应语义的元模型。 (2)根据 aspectj 核心概念的语义,建立它们之间的关系并提出一个 aspectj 的用户配置文件包。 (3)把面向方面建模的方法应用到江西省宽带网络综合服务系统中,以验证 其可行性。 1.4 论文结构安排 论文的结构安排如下: 第 1 章介绍论文的研究背景、意义、面向方面建模的国内外研究现状以及论 文的研究内容。 第 2 章介绍 aspectj 语言的基本思想、发展现状,以及 aspectj 的核心概念。 第 3 章介绍 uml 的视图和面向对象的建模过程,分析 uml 的扩展机制。 第 4 章首先对面向方面建模过程进行阐述, 其次通过对 aspectj 语言的相关概 念的分析,定义各自的构造型并扩展自适合自己语义的 uml 元模型,分析这些概 念之间的关系,给出 aspectj 的用户配置文件包。 第 5 章通过运用此方法对江西省宽带网络综合服务系统进行面向方面的建模, 来验证方法的可行性。 第 6 章对所做的工作进行总结,并对下一步的工作进行展望。 南昌航空大学硕士学位论文 第 2 章 面向方面编程以及相关理论的研究 5 第 2 章 面向方面编程以及相关理论的研究 oop 引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公 共行为的一个集合。但当需要在多个模块中加入一个公共功能的时候,用 oop 处 理则会导致代码分散以及代码紧耦合。例如日志功能代码往往水平地散布在所有 业务代码中,而与它所散布到的核心业务功能毫无关系。对于其他类型的代码, 如权限控制、异常处理等也是如此12。这种散布在各处的无关的代码被称为横切 代码, 与业务无关的这些关注点如日志等被称为横切关注点1314。 在 oop 设计中, 它导致了大量代码的重复,而不利于各个模块的重用。虽然可以采用设计模式等 手段间接解决这个问题,但可以采用 aop 技术来更好解决。 2.1 面向方面编程的基本思想 关注点是一个为了满足系统整体目标而必须被处理的特定需求或考虑15。以 关注点的角度来看,软件系统分为两个部分:核心关注点和横切关注点。oop 主 要解决的是核心关注点,而 aop 的作用则在于分离系统中的各种关注点,将核心 关注点和横切关注点分离开来。无论是静态织入的 aspectj 还是动态代理技术的 spring aop,它们都是利用一种称为“横切”的技术,剖解开封装的对象内部,并 将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“aspect” , 即方面16。通过这种横切技术,业务编码人员就可以专心的写业务核心功能代码, 而不用再关心这个业务是否要加入权限控制、是否要记录日志等非业务功能代码, 这便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和 可维护性。 2.2 面向方面编程的发展现状 目前,aop 的发展已经日益成熟了,如果前几年还有人质疑因 aop 的性能等 问题导致其不能大规模采用的话,现在的 aop 技术的成熟以及大量项目的应用已 经让我们可以放心大胆的采用它。正因为 aop 的快速发展,涌现出了很多 aop 技术的实现,既包括基于 java 平台和.net 平台的,也包括基于静态织入机制的和 动态代理技术的。表 2-1 列出目前主要的 aop 技术: 南昌航空大学硕士学位论文 第 2 章 面向方面编程以及相关理论的研究 6 表 2-1 目前主要的 aop 技术一览 平台 aop 技术 实现方式 aspectj 静态织入 aspectwerkz 静态织入 jboss aop 动态代理 java spring aop 动态代理 spring.net 动态代理 .net aspect# 动态代理 在 java 平台上, 最早的 aop 技术则当属 aspectj17。 aspectj 是在 java 语言基 础上进行扩充的一门语言,扩充了自定义的关键字,并提供了自己的编译器 ajc。 施乐公司在 20 世纪 90 年代提出了 aop 后,在得到美国国防先进技术研究计划署 提供了科研经费后,定义了一套 java 语言的扩展系统,取名为 aspectj,并于 2002 年被转让给eclipse foundation, 后者开发了一套基于eclipse的aspectj插件ajdt, 使得编写 aspectj 语言变得非常方便18。随着 eclipse 版本的更新,相应的 ajdt 版本也更新到了 1.5.2,以支持 eclipse 3.3 下 aop 的开发。 aspectwerkz 是另一个基于 java 平台静态织入的 aop 技术19。aspectwerkz 早期由 bea system 提供赞助, 开发者是 bea 的两名员工 jonas bon r 和 alexandre vasseur。2005 年 1 月,aspectj 和 aspectwerkz 达成协议,同意将二者的成果综合 到一起,取其精华创建一个单一的工具。他们合作的第一个发布版本为 aspectj 5, 它扩展了 aspectj 语言,以支持基于 annotation 开发风格而又支持类似 aspectj 代 码风格。aspectj 5 也为 java 5 的语言特性提供完全的 aop 支持。 在 java 阵营中,商用软件制造商 jboss 在其 2004 年推出的 jboss 4.0 中,引 入了 aop 框架和组件。在 jboss 4.0 中,用户可以在 jboss 应用服务器外部单独使 用 jboss aop20, 该版本为 jboss aop 1.0, 是在 2004 年 10 月发布的。 现在的 jboss 最新版本为 4.3,其 aop 框架最新版本为 2.0。 spring 是一个非常流行的轻型的 framework,它通过 ioc 模式来实现 aop, 通常被称为 spring aop。在 2005 年,原 aspectj 领导人 adrian colyer 离开工作了 13 年的 ibm 公司, 加入到 spring 的发明者 rod johnson 等人开的 springframework 咨询公司 interface21,担任 interface21 公司的首席科学家。由此,在 spring 更新到 2.0 版本后,加入了 aspectj5 的支持, 使得 spring 的开发者不再受只能捕获方法的 限制,也可以得到捕获类的属性等静态横切的功能21。 在.net 的阵营中,aop 技术的应用远不如 java 阵营对 aop 的关注,由于使 用 aop 能够给.net 的人员不使用 com+的选择,所以微软公司对 aop 的积极性 南昌航空大学硕士学位论文 第 2 章 面向方面编程以及相关理论的研究 7 并不高,相反倒是开源的一些.net 框架下涌现出一些 aop 技术,spring.net 和 aspect#是其中的代表。 spring.net 是 spring 在.net 企业应用开发的应用程序框架22。它能够提供宽 广范围的功能, 例如依赖注入、 面向方面编程(aop)、 数据访问抽象, 以及 asp.net 集成等。spring.net 1.0 包含一个完全功能的依赖注入容器和 aop 库。aop 库提 供对业务对象的面向方面编程(aop) 的支持,可为声明性地建立企业应用和为业 务对象提供服务提供坚实的基础。 aspect#是基于 castle 动态代理技术来实现的23。 castle 源于 apache avalon 项 目, 其目的在于实现一个轻量级的 ioc 容器。 aspect#于 2005 年 6 月被收录为 castle 的其中一个子项目。它是针对 cli(.net 和 mono)实现的 aop 框架,利用了反 射、代理等机制。 从 aop 技术的整体发展来看,高性能、稳定、可扩展、易用的 aop 框架是 其趋势与目标。从上述对各种 aop 技术的分析来看,aop 技术无疑是具有共同特 点的,而各种实现技术就是围绕着这些共性深入与延伸。在下面 2.3 节,本文概要 介绍 aop 的本质,以及它的核心概念。 2.3 aspectj 语言及核心概念 任何一种编程思想都需要通过编程语言来实现,面向方面编程也不例外。目 前, 相对成熟的面向方面编程语言是 aspectj。 该语言部分定义了 aop 语言的结构 和语法,通过语言规范来验证代码的正确性,并将其转变为目标机器能够执行的 状态。aspectj 语言构造是从 java 语言中扩展而来的,因此所有合法的 java 程序 都是合法的 aspectj 程序,aspectj 编译器生成的是符合 java 字节码规范的.class 文件,这使得所有符合规范的 java 虚拟机都可以解释并执行其所生成的代码。接 下来本文逐一分析 aspectj 的核心概念。 2.3.1 横切关注点(crosscutting concern) 很多系统在处理核心业务之外,还要处理一些非核心需求,如权限管理、日 志记录、性能、存储管理、数据保持、安全保密、多线程安全、事务完整性、错 误检验、策略实施等。这些非核心需求一般都会横切许多核心模块,使得编码人 员在编写核心业务代码之外,还要编写这些与业务无关的非核心代码,这些用于 完成非核心需求的关注点被称为横切关注点。例如在进行收费、报停核心业务时, 南昌航空大学硕士学位论文 第 2 章 面向方面编程以及相关理论的研究 8 在操作之前需要检查当前登录者是否具有权限,不使用 aop 的代码如下: public void charge()/收费 if(dao.hasfunction()=true) dao.charge(); public void pause ()/报停 if(dao.hasfunction()=true) dao.pause(); 可以看出这些验证权限的代码 if(dao.hasfunction()=true)与核心业务无关,并 且在多个模块中重复出现,因此这个权限验证就是横切关注点。 2.3.2 连接点(joinpoint) 连接点是程序执行中的特定的点,用以表明可以插入的横切行为的位置24。 在连接点处,包括之前、之后和自身,可以根据编织规则进行代码的插入或修改。 从技术的角度讲, 可以将程序执行中的任何可以识别的点定义做连接点, 在 aspectj 中主要有以下几个可用连接点25: 方法连接点(method join points):包括调用连接点(call)和执行连接点 (execute) ,前者发生在对类方法调用时,后者发生在调用类方法并且控制转移到 方法内时。在上面代码中的 dao.charge()和 dao.pause()便是其中的 call 连接点。 构造函数连接点:类似于方法连接点,但仅仅限于构造函数方法; 字段读取连接点:发生在对类成员或类实例的读取时; 异常处理执行连接点:发生在异常处理块执行时; 类初始化连接点:发生在类装载时; 对象初始化连接点:发生在对象初始化时。 2.3.3 切入点(pointcut) 用以捕捉程序执行中的特定连接点,并搜集该连接点上下文的程序结构26。 可以通过它来确定一个连接点集合,并且捕获连接点的上下文。切点可以匿名, 南昌航空大学硕士学位论文 第 2 章 面向方面编程以及相关理论的研究 9 也可以命名,无论是匿名切点还是命名切点,都允许使用|, 该切入点捕获了收费和报停这两个方法连接点。 2.3.4 通知(advice) 通知是定义的切入点的执行过程,即对连接点捕获的具体代码26。它对连接 点的捕获方式有 before、after,和 around 三种,分别对应通知体在连接点之前、之 后、前后三种插入方式参与到程序的执行流程,其中对应 after 类型通知的连接点 可以是正常执行返回,也可能是异常返回。在 2.3.3 节定义切入点之后,就可以在 通知里写出对连接点捕获的代码: void around():catchop() if(dao.hasfunction()=true) proceed(dao); else /转到提示没有权限页面 这段代码的含义是如果当前用户具有权限,则执行 proceed(dao)即继续运行连 接点后面的代码,也就是说可以执行收费和报停的操作;如果没有权限则会转到 提示没有权限页面。 2.3.5 类型间声明(intertype declaration) 连接点、切入点和通知机制体现了 aspectj 动态横切的能力,类型间声明则体 现了 aspectj 的静态横切能力,它声明了对类层次静态结构的横切特性27。类型间 声明赋予了 aspect 从外部改变类结构的能力。 类型间声明的对类结构的几种改变形式26: (1)添加成员到类型中; (2)添加具体的实现到接口中; 南昌航空大学硕士学位论文 第 2 章 面向方面编程以及相关理论的研究 10 (3)声明类型将扩展新类型或者实现新接口; (4)声明 aspect 的优先级; (5)声明自定义的编译错误或警告; 可以看出类型间声明的威力是很大的,尤其是当开发应用系统时,如果需要 在不修改原有代码的前提下,引入第三方产品和 api 库,则类型间声明将发挥巨 大的作用。 2.3.6 方面(aspect) 方面包含了切入点、通知和类型间声明,它们组合起来就是方面,但不要求 一个方面中包括所有这些元素,可以是其中一个,也可以是其中的几个组合28。 如上面的切入点和通知的组合就是一个方面,只要定义一个方面的名称,把 切入点和通知的代码放入这个方面就可以了: public aspect opaspect pointcut catchop():call(* dao.charge()|call(* dao.pause(); void around():catchop() if(dao.hasfunction()=true) proceed(dao); else /转到提示没有权限页面 可以看出它类似于 oop 中定义的类,但它代表的更多是对象间横向的关系。 2.4 本章小结 本章介绍了面向方面编程的基本思想和发展现状,对其核心概念如横切关注 点、连接点、切入点、通知、类型间声明、方面等进行了详细的分析。 南昌航空大学硕士学位论文 第 3 章 uml 及其扩展机制 11 第 3 章 uml 及其扩展机制 3.1 uml 的简介 信息系统和技术工业界的三位卓越的方法学家 grady booch, james rumbaugh 和 ivar jacobson 合作创造并发展了 uml 之后, uml 将过去 40 年来软件开发者应 用过的最有效的模型图和实践方法相结合,成为了一种用于现代软件系统的面向 对象的建模语言。它溶入了软件工程领域的新思想、新方法和新技术,使它的作 用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全 过程29。 uml 标准并没有定义一种标准的开发过程, 但它支持任何迭代式的开发过程。 uml 定义了一套面向对象的建模符号、表示法和术语,这些符号为系统的分析、 建模、开发提供了可视化的图形表示30。在进行实际的分析、设计和开发的过程 中,可以根据需要来对系统进行建模和描述,它提供的可视化元素构件可以设计 和表达出复杂的软件体系结构。从诞生以来,uml 就在不断的发展和完善,并且 吸取了软件工程领域里最新的方法和成果,已经在各个领域都得到了广泛的应用。 3.2 uml 的视图和建模过程 3.2.1 uml 的视图 客观世界是一个复杂的系统,需要从不同的角度来考察,才能真正理解这个 系统。为了能支持从不同角度来考察系统,标准建模语言 uml 定义了下列 5 种大 视图以及 10 种小视图。 (1)用例图(use case diagram) :从用户的角度出发描述系统的功能、需求, 展示系统外部的各类活动者与系统内部的各种用例之间的关系,主要元素是用例 和活动者。 (2)静态图(static diagram) :包括类图、对象图和包图。类图描述系统所包 含的类、类的内部结构及类之间的关系;对象图是类图的一个具体实例,表示在 某一时刻系统对象的状态、对象间的联系状态以及对象行为的静态方面的状态; 包图由功能相似的包或类组成,主要表示包之间的关系。 南昌航空大学硕士学位论文 第 3 章 uml 及其扩展机制 12 (3)交互图(interactive diagram) :描述对象间的交互关系,包括顺序图和协 作图。顺序图着重描述对象按照时间顺序的消息交换;协作图着重描述系统成分 如何协同工作。顺序图和协作图从不同的角度表达了系统中的交互和系统的行为, 它们之间可以相互转化。 (4)行为图(behavior diagram) :描述系统的动态模型和组成对象间的交互 关系,包括状态图和活动图。状态图描述一类对象所有可能的状态以及事件发生 时状态的转移条件,适合于描述一个对象穿越多个用例的行为;活动图描述系统 中各种活动的执行顺序,它实质上也是一种流程图,只不过表现的是从一个活动 到另一个活动的控制流。 (5) 实现图 (implementation diagram) : 包括组件图和配置图。 组件图由组件、 接口和组件之间的联系构成,其中的组件可以是源码、二进制码或可执行程序, 组件图表示系统中的不同物理部件及其联系,它表达的是系统代码本身的结构; 配置图定义系统中软硬件的物理体系结构。 3.2.2 uml 的建模过程 当采用面向对象技术设计系统时,首先在需求分析阶段根据对系统的分析, 找出系统的参与者、用例以及两者之间的联系,建立系统用例模型即用例图;其 次在系统的设计阶段,根据需求建立系统的静态模型和动态模型,以构造系统的 结构以及描述系统的行为。其中用例模型与静态模型都是静态的,包括用例图、 类图、包图、对象图、组件图和配置图等六种图形,它们是 uml 的静态建模机制。 动态模型中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。 它包括顺序图、活动图、状态图和协作图等四种图形,是 uml 的动态建模机制。 3.3 uml 的四层元建模体系结构 uml 由图和元模型组成,元模型定义 uml 对象模型的语义,图形表达对象 的结构和行为。uml 元模型的概念框架是一个基于四层的体系结构31,见图 3-1。 图 3-1 uml 模型体系结构图31 南昌航空大学硕士学位论文 第 3 章 uml 及其扩展机制 13 其各个层的含义如下: 用户对象(user objects) :模型的一个实例,用来描述特定问题领域的原型和 规则。任何软件系统在用户看来都是相互通信的具体对象。排除 oo 语言表示的 细节,这些具体对象构成一个对象体系结构,并完成具体的相互通信,其目的是 实现软件系统的功能和性能。因此表示法系统必须能表达的第一个层次是用户对 象层,即对象实例及其交互32。 模型(model) :元模型的一个实例,用来描述特定问题领域的原则和规则。 模型规定了对象的属性、操作以及聚集、结合和通信,保证用户对象层的语义正 确描述。 元模型(meta-model) :元-元模型的一个实例,用来定义模型的原则和规则。 它允许处于某个层次上的类继承在它上面一层的各种类。上层的模型有很强的内 聚性,可以松散耦合地支持泛化的应用。 元-元模型(meta-meta-model) :元模型的基础体系结构,用来定义元模型的 原型和规则。它比元模型具有更高的抽象层次,为准确定义元模型的元素和各种 机制提供最基本的概念和机制33。 以常见的“类”为例,这个“类”就是一个 uml 元模型,它的元-元模型定 义了这个 “类” 的原型和规则。 而如果定义了一个名为 “person” 的类, 这个 “person” 就是“类”的实例,是一个模型。至于“张三” 、 “tom”等则是用户对象,他们 是“person”的实例。 3.4 uml 的扩展机制 为了避免使 uml 变得过于复杂, uml 的设计者们在设计 uml 时有意省略了 一些在其他建模语言中可以找到的细节信息。当然,他们也采取了一个“补救措 施”将 uml 设计成是可扩展的。这样,uml 就能够被扩展和调整,以便满 足某个特定的方法、组织或用户。通过 uml 的扩展机制,用户可以定义和使用新 的元素来正确地解决当前问题。在实际使用中,有三种主要的扩展元素,它们分 别是构造型、标记值和约束。 3.4.1 构造型 构造型是建模元素的一种类型,扩展 uml 的语义。构造型必须以 uml 中已 经定义的元素为基础,可以扩展语义但不能扩展已存在的元素结构。构造型不是 南昌航空大学硕士学位论文 第 3 章 uml 及其扩展机制 14 给元素增加新的属性或约束,而是直接在已有元素中增加新的语义,这种机制可 以看作是已有元素进行专有化。构造型的表示方法是在模型元素的旁边添加一个 构造型的名称,构造型名称使用双括号括起来,如构造型名 。构造型是一种非 常好的扩展机制,它避免了 uml 语义过于复杂化,同时也使得 uml 能够适应各 种需求。 例如, 在一个 web 应用中, 可以定义一个构造型, 让它扩展 uml 元模型 componet。然后,可以通过应用这个构造型,并使用任意已有的 针对这种类定义的链接规则来显示一个 jsp 类34。 图 3-2 jsp 的构造型34 通常人们在特定方法或特定的应用领域中使用 uml 时,会使用构造型。有些 概念、方法或特定领域特有标注 uml 不支持,用户就可以自定义。自定义构造型 时需要作以下工作:描述自定义构造型的基础是哪个元素;对该元素语义的影响; 给出使用该构造型的例子。 3.4.2 标记值 标记值是一对字符串包括标记字符串和值字符串也就是一个键值对,它存储 着有关元素的一些信息。标记值可以与任何元素相关联,包括模型元素和表达元 素。标记表示建模者想要记录的名字,值是给定元素的值。通常使用类似下面的 方式表示: name=tom 。 如果标记是个布尔类型,可以省略其值,默认为真。除了布尔类型以外其它 的类型都必须明确写出值。 3.4.3 约束 约束是用文字表达式表示的语义限制,它应用于元素。约束显示在内, 可以直接放在图中或者独立出来。 约束可以是 uml 预定义的, 也可以是自定义的。 描述约束的语言可以是正式的数学符号、ocl 语言、伪代码或自然语言。如果这 南昌航空大学硕士学位论文 第 3 章 uml 及其扩展机制 15 种语言是非正式的,那么它的解释也是非正式的,并且要由人来解释。即使约束 由一种正式语言来表示,也不意味着它自动为有效约束。 比如公司雇用工人, 但要求工人年龄必须大于 30 岁, 那么就要定义一个约束, 如图 3-3 所示: company person person.age30 -employer0.* -employee* 图 3-3 公司雇用工人的约束 3.4.4 用户配置文件包 用户配置文件包定义了一个构造型化的包, 通过 uml 的扩展机制定义了一个 元模型子集而使 uml 具有描述某个特定领域的丰富语义。 架构师们使用这个用户 配置文件包内的元素来扩展模型,换句话说,当被某个建模人员使用时,用户配 置文件包中包含了那些 uml 元模型元素针对某一特殊需要的变体。 另外,uml 的用户可能不必定义他们自己的用户配置文件包。其他人可能已 经花费了大量时间和精力对这些用户配置文件包进行了测试,它们将能够有效地 运转,并且工具开发商把这些用户配置文件包中一些较常用的都封装到了他们的 uml 工具中。因为待建模的系统形态各异,所以用户必须对 uml 元模型进行修 改以使其适用于不同情况,uml 用户配置文件包就是一种管理这种不可避免的适 应性改变的有效方法,同时也提供一致的自动化支持。由于系统平台的不断增生, 以及技术变革的日新月异,没有一种建模语言能够提供可以应用所有平台的详尽 语义。 用户配置文件包作为一种完备定义的高层包大大促进了 uml 中的扩展机制, 使得建模人员能够更容易地与那些同步模型进行交流35。下图显示了一个局部的 ejb 用户配置文件包36: 南昌航空大学硕士学位论文 第 3 章 uml 及其扩展机制 16 图 3-4 ejb 部分用户配置文件包36 3.5 本章小结 软件的发展速度日新月异,每一种技术出现后不可能也没必要把这些技术概 念都加入到 uml 标准中,只需要用 uml 的扩展机制通过扩展的方式就可以支持 这些技术概念。本章在介绍了 uml 视图以及面向对象建模过程基础上,详细探讨 了 uml 扩展机制的三种扩展元素:构造型、标记值和约束。用户配置文件包是包 含这三种扩展元素的包,本章最后介绍了这个包的概念和用途。 南昌航空大学硕士学位论文 第 4 章 基于 uml 扩展机制的面向方面建模 17 第 4 章 基于 uml 扩展机制的面向方面建模 与面向对象建模一样,面向方面建模是在软件开发的需求分析和设计阶段对 方面进行建模,它利用 uml 建模语言标识、分析、管理和表示软件设计和构架中 的横切关注点,使所设计的软件具有更好的模块化设计,保持需求、设计和实施 间的连续性,有利于面向方面软件开发过程的顺利进行。 4.1 面向方面的建模过程 aop 解决了 oop 中存在的横切关注点问题,把系统非核心功能如日志、权限 控制等抽取出来放在一个单独的 aspect 里,从而实现了系统的解耦。但 aop 并不 是要替代 oop,它们之间也不是竞争的关系,对于系统的基础框架以及各个模块 的核心功能仍然需要 oop 来完成,因此 aop 可以看作是 oop 的补充和发展。 同样,面向方面建模不能孤立的进行,也是在面向对象建模的基础上,对系 统中的面向方面部分进行建模,在软件系统开发的需求分析与设计阶段把分散于 整个系统的横切关注点用方面封装起来。即对采用 aop 的系统进行建模时,以面 向对象建模为主,以面向方面建模为辅。因此,面向方面建模与面向对象建模是 同时进行的,两者一起构成了对系统核心功能和非核心功能需求的建模。下面分 别从需求分析阶段和设计阶段来对面向方面建模进行研究。 4.1.1 需求分析阶段建模 在系统需求分析阶段主要的工作是建立用例模型,即画出系统的用例图。在 uml 中用例图用于对系统、子系统或类的行为的可视化,以便使系统的用户更容 易理解这些元素的用途,也便于软件开发人员最终实现这些元素37。在前面章节 已阐述了面向对象建模时的用例模型建立过程,通过结合面向方面建模,系统的 用例模型建立过程如下: (1)识别参与者,并找出参与者之间的关系,如泛化关系等。 (2)寻找用例,并找出用例之间的关系,如泛化、扩展、包含关系等。 (3)通过对已有用例的分析,找出其中的横切关注点,并进行标注。 (4)找出参与者与用例之间的关系,建立用例模型。 上述第三步是面向方面建模特有的,其中的标注横切关注点可以是利用现有 南昌航空大学硕士学位论文 第 4 章 基于 uml 扩展机制的面向方面建模 18 的 uml 视图加注释来描述,也可以是采用 uml 扩展机制来标注。 4.1.2 设计阶段建模 在对面向

温馨提示

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

评论

0/150

提交评论