




已阅读5页,还剩63页未读, 继续免费阅读
(计算机应用技术专业论文)基于xml的类结构完整性和一致性研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西南交通大学硕士研究生学位论文第1 页 摘要 面向对象是一种新兴的程序设计方法,其基本思想是使用对象、类、 继承、封装、消息等基本概念来进行程序设计。面向对象方法包括分析、 设计和实现活动,分析的主要任务是通过分析问题域建立系统的类结构。 合理的类结构对面向对象设计阶段起着非常重要的作用。 类是类结构的基本元素,本文研究了良好的类应当具备的四个基本特 征:完整性和充分性、原子性、高内聚、低耦合。并给出定量的指标对类 进行度量,度量的指标包括:类的加权方法数、继承树的深度、子女的数 目、方法继承因子、属性继承因子、耦合因子和多态因子,通过这些指标 了解各个类的复杂程度等一些重要的特性。 类结构中类之间的关系包括:一般一特殊关系,整体一部分关系,对象 之间的静态关系,对象之间的动态关系。本文重点研究了建立一般一特殊 关系所必须服从的抗变性、协变形原则和闭合行为原则。这些原则保证了 一般特殊结构中父类和子类在行为和状态上的一致性,从而使用户可以安 全的使用一般特殊结构给设计带来的好处。另外参考关系数据库中引用完 整性概念,即要求不允许引用不存在的元组,提出类结构的引用完整性原 则,即如果一个类结构是引用完整的,那么它所对应的图应该是连通图。 最后提出以y d v l l 来表示类结构,并结合上述的理论完成了一个类结构 检验工具的分析与设计。 关键词类结构;类度量;致性;完整性 西南交通大学硕士研究生学位论文第1 i 页 a b s t r a c t o b j e c t o r i e n t e dm e t h o di san e wp r o g r a md e s i g nm e t h o d p r o g r a m i sd e s i g n e dt h r o u g ho b j e c t , i n h e r i t ,e n c a p s u l a t i o n ,m e s s a g e , e t c i st h eh a s i ct h i n k i n go fo b j e c t o r i e n t e dm e t h o d o b j e c t o r i e n t e d m e t h o di n c l u d e s a n a l y s i s ,d e s i g n a n dp r o g r a m t h et a s ko f o b j e c t o r i e n t e da n a l y s i s i sb u i l dac l a s ss t r u c t u r e t h r o u g h a n a l y z i n gp r o b l e md o m a i n l o g i c c l a s ss t r u c t u r ei s h i g h l y i m p o r t a n t t oo b j e c t o r i e n t e dd e s i g n c l a s si st h eb a s i ce l e m e n to fc l a s ss t r u c t u r e i ti sr e s e a r c h t h a tc l a s ss h o u l dh o l df o u r b a s i c f e a t u r e :i n t e g r a l i t y a n d s u f f i c i e n c y ,p r i m i t i v e n e s s ,h i g hc o h e s i o n ,l o wc o u p l i n gi nt h i s p a p e r t h e nq u a n t i t a t i v ei n d i c a t o r sa r eg i v e nt o m e a s u r ec l a s s , t h e ya r ew e i g h t e dm e t h o d sf o rp e rc l a s s ,d e p t ho ft h ei n h e r i t a n c e t r e e ,n u m b e ro fc h i l d r e n ,m e t h o di n h e r i t a n c ef a c t o r ,a t t r i b u t e i n h e r i t a n c ef a c t o r ,c o u p l i n gf a c t o ra n dp o l y m o r p h i s mf a c t o r u s e a b o v es e v e nm e t h o dc a nk n o wt h ed e g r e eo fc o m p le xa n do t h e rc h a r a c t e r o fe a c hc l a s s t h e r ea r ef o u rk i n do fr e l a t i o nb e t w e e n c l a s s t h e y a r e g e n e r i c - s p e c i a lr e l a t i o n ,c o m p r e h e n s i v e p a r t i t i r er e l a t i o n , s t a t i cr e l a t i o n ,d y n a m i cr e l a t i o n i ti se m p h a s i so nc o n t r a v a r i a n c e r u l e ,c o v a r i a n c er u l ea n dc l o s e d b e h a v i o rr u l et h a tg e n e r i c - s p e c i a l r e l a t i o nm u s ta b i d ei nt h i sp a p e r t h e s er u l em a ye n s u r ec o n s i s t e n c y o nb e h a v i o ra n ds t a t eb e t w e e ns u b c l a s sa n ds u p e r e l a s s ,s ou s e rc a n u s et h eg e n e r i c s p e c i a lr e l a t i o n sb e n e f i ti ns e c u r i t y r e f e rt o r e f e r e n c e i n t e g r i t yo fr e l a t i o nd a t a b a s em o d u l e ( n o ta l l o wu s i n g m e t a d a t at h a tn o te x i s t ) ,g i v e n c o n c e p tt or e f e r e n c ei n t e g r i t yo f c l a s ss t r u c t u r e t h e c o n c e p t i st h a t i fac l a s ss t r u c t u r ei s r e f e r e n c ei n t e g r i t yt h e nt h eg r a p hm u s tb ec o n n e c t i v e a t l a s t ,p r o p o s e s t od e s c r i b ec l a s s s t r u c t u r eu s e ) 【 i l a n d c o m p l e t ea n a l y s i sa n dd e s i g no fc l a s ss t r u c t u r ev e r i f yt 0 0 1 k e y w o r d s c l a s ss t r u c t u r e :c l a s s m e t r i c ;c o n s i s t e n c y :i n t e g r i t y 西南交通大学硕士研究生学位论文第1 页 1 1 问题的提出 第1 章绪论 软件开发方法是软件开发过程所遵循的办法和步骤,其目的在于有效 地得到一些工作产物,也就是一个运行的系统及其支持文档,并满足有关 质量的要求。一般软件开发方法有以下四种: ( 1 ) 模块化方法。把一个待开发的软件分解成若干较为简单的部分, 称为模块,每个模块分别独立地开发、测试,最后再组装出整个软件。模 块化方法的优点是明显的,难点在于如何处理大型复杂的问题,往往会出 现难以下手之处。 ( 2 ) 结构化方法。结构是指系统内各组成要素之间的相互联系、相互 作用的框架。结构化方法就是强调结构的合理性以及开发软件的结构合理 性,因此提一组提高软件结构合理性的准则,如分解和抽象、模块的独立 性、信息隐藏等。 ( 3 ) 面向数据结构方法。可以说面向数据结构方法是结构化方法的变 形,它着重数据结构而不是数据流。结构化方法以分析信息流为主,用数 据流图来表示信息流;面向数据结构方法,是从数据结构方面分析,即分 析信息结构,并用数据结构图来表示,再在此基础上进行需求分析,导出 软件结构。 ( 4 ) 面向对象方法。面向对象方法起源于面向对象编程语言。自2 0 世纪8 0 年代中期到9 0 年代,面向对象的研究重点已从语言转移到设计方 法学上来,其中代表性的工作有:b h e n d e r s o n s e l l e r s 和j m e d w a r d s 提出的面向对象软件生存周期的喷泉模型,以及面向对象系统开发方法: g b o o c h 提出面向对象开发方法等:p c o a d 和e y o u r d o n 提出面向对象分 析( o o a ) 和面向对象设计( o o d ) # j r u m b a u g h 等人提出的面向对象建模技术 ( o m t ) ;j a c o b s o n 提出的面向对象软件工程( o o s e ) ;由g g o o c h ,j r u m b o u g h 和j a c o b s o n 等人发起,在b o o c h 方法、o m t 方法加o o s e 方法的基础上推 出了统的建模语言( u m l ) : 面向对象方法包括分析、设计和实现活动。它是一种面向对象的思想 运用于软件开发过程,指导开发活动的系统方法,建立在“对象”概念基 础上的方法学基于对象概念,以对象为中心,以类和继承为构造机制来认 西南交通大学硕士研究生学位论文第2 页 识、理解、刻画客观世界和设计、构建相应的软件系统。 面向对象分析的任务就是通过分析问题域建立系统的概念模型,并用 相应的符号系统表示。模型一般由五个层次构成,即主题层、类及对象层、 结构层、属性层和服务层。面向对象设计是在面向对象分析的基础上进行 系统设计,包括交互过程和用户接口、任务管理、全局资源协调并确定边 界、各个类的存储和数据格式。面向对象实现就是用面向对象程序设计语 言来实现面向对象设计,因为该类语言支持对象、运行多态性和继承,因 此比较容易。 用面向对象方法开发的软件,其结构基于客观世界界定的对象结构, 因此与传统的软件相比较,软件本身的内容结构发生了质的变化,因而易 复用性和易扩展性都得到提高,而且能支持需求的变化。 面向对象的软件开发一般都采用喷泉模型,它具有迭代和无间歇的特 性。软件的某个部分经常被重复工作多次,相关对象在每次迭代中随之加 入渐进的软件成分。无间歇指在各项活动之间无明显边界,如分析和设计 活动之间没有明显的界限。由于对象概念的引入,表达分析、设计、实现 等活动只用对象类和关系,从而可以较为容易地实现活动的迭代和无间 隙,使其开发自然地包括复用。作为面向对象分析的产物“概念模型”, 是问题域在面向对象软件的映射,保证其正确性是很关键的。虽然说面向 对象的软件开发是迭代进行的,错误的或不完善的设计可以在以后的迭代 过程中修改或完善,但是起初分析阶段所产生的错误对以后迭代的工作量 有很大的影响,特别是概念模型的错误对以后迭代的工作量影响更大。如 何保证概念模型即分析阶段的类结构的正确性就变得很重要了。本文的目 的就是以分析阶段的类结构图为对象,分析其类的特性,类关系的完整和 一致,从而保证类结构的正确性,为以后迭代工作的顺利进行做一些工作。 1 2 国内外研究现状 对类的特性的分析,现在普遍的方法是对类进行度量,包括每个类的 加权方法数、继承树的深度、子女的数目、继承性度量的方法继承因和属 性继承因子、耦台性度量、多态性度量等。1 9 9 4 年c h i d a m b e r 和k e m e r e r 发 表论文阐述了面向对象设计中软件度量学理论基础,提出了基于继承树的 一套面向对象度量方法被称为c & k 度量方法。1 9 9 5 年a b r e u 提出了面向对象 软件度量方法m o o d 。随后有很多学者对c k 度量方法和m o o d 方法进行了评 西南交通大学硕士研究生学位论文第3 页 价分析。 p r i c es y s t e m s 开发了一种新的度量方法预测性对象点( p o p s ) 。 预测性对象点是特意为面向对象软件设计的,是通过系统计算面向对象的 特征进行度量。不像传统的度量方法基于结构分析的数据和过程模型, p o p s 是基于对象和他们的特征。p o p s 综合了文献中几种流行的度量方法, 建立一种适合预测工作量和跟踪生产力的方法。p o p s 方法的核心是每类加 权方法数( w m c ) 。这种方法测量每个顶层类( 或者说,每个在用户的视野中 清楚的对象) 并且根据类的行为( 方法) 类型不同进行加权。一旦得n w m c 的 值,p o p s 方法将把它和有关按类分对象组的信息和对象类之间的关系进行 联合计算。 m e i l i rp a g e j o n e s 在 3 中提出了类的状态空间和其约束条件类不变 式的概念,指出子类必须服从父类的不变式。并提出建立健壮的类层次结 构应遵循的两项重要原则:类型一致性原则和闭合行为原则。这两大原则 以类及其子类的类不变式、每个操作的运算的前置条件和后置条件为基础 来验证类层次结构的一致性。这两个原则时常会限制甚至改变健壮的类层 次结构的设计方案。 形式化方法提供了规约环境的基础,它使得其生成的分析模型比用传 统方法生成的模型更完整、一致和无二义性。文献 1 中对形式化方法的 定义如下:用于开发计算机系统的形式化方法是基于数学的用于描述系统 性质的技术。这样的形式化方法提供了一个框架,人们可以在该框架中以 系统的而不是特别的方式刻画、开发和验证系统。一个方法是形式化的, 如果它有良好的数学基础,典型地,由形式化规约语言给出。这个基础提 供种工具,可用精确的符号定义一致性和完整性,以及更进一步定义规 约、实现和正确性。 一个形式化规约的希望性质( 一致性、完整性和无二义性) 是所有规约 方法的目标。但是完整性是难于达到的,当规约被创建的时候,系统的某 些方面可能未被定义,某些特性可能被有意识地省略以允许设计者在选择 实现方法时具有一定的自由度,而且,在一个大型复杂系统中考虑每一个 操作场景是不可能的。 1 3 本文研究的主要内容、目标和方法 本文研究的主要目的是总结和寻求一些方法来检验面向对象分析阶 西南交通大学硕士研究生学位论文第4 页 段的类结构,看其是否符合类结构的一些基本的要求,比如完整性和一致 性。主要的内容包括以下几个方面: ( 1 ) 类及类之间关系的概要介绍,包括了类和类之间关系的基本概 念;类之间关系的内容,包括一般一特殊结构、整体一部分结构、实例连接 和消息连接。 ( 2 ) 类结构一致性和完整性研究,包括四方面的内容,一是设计良好 的类应遵守的原则,比如完整性、充分性、原子性、高内聚和低耦合原则 等;二是类的度量及其在o o a 阶段类度量中的应用,比如c & k 和m o o d 度 量方法;三是建立类的一般一特殊结构所遵循的抗变性与协变性原则及其 对o o a 阶段类结构检验的意义;四是反映类之间关系的引用完整性原则的 定义和应用。 ( 3 ) 基于上面的理论,设计了一个简单的工具来检验类及类结构,包 括类的度量、类结构的完整性和一致性的检验。其中采用x m l 作为类及类 结构的表示方法。 西南交通大学硕士研究生学位论文第5 页 第2 章类及类之间的关系 2 1 类的基本概念 从一般意义上讲,现实世界中的任何事物均可称为对象,但面向对象 方法只注意那些与问题域和系统责任有关的对象。通过分析、认识这些对 象,抽象出它们的主要特征,用系统中的对象来表示它们。从这个意义上 讲,对象的定义是: 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基 本单位,由一组属性和对这组属性进行操作的一组服务构成。 我们认识现实世界的思维活动并不是逐个地认识和描述每一个对象个 体,而是通过抽象把具有共同特征的对象归结为一类,形成一般的概念。 在面向对象的软件开发中,是用类作为对象的抽象描述。类的定义是: 类是具有相同属性和相同服务的一组对象的集合,它为属于该类的全 部对象提供了统的抽象描述,其中包括属性和服务两个主要部分。属性 和服务的关系如图2 - 1 所示: 图2 - 1 类中属性和操作的关系 从图2 - 1 中可以看出,属性处于类的最中心部位,而服务环绕在属性 的四周。这看起来好象在属性和类的边界之间砌上了一堵墙。使外界无法 进入到属性中去。服务必须有操作属性数据的能力。这样外界访问类的属 性的唯一方法就是通过类的服务。因而服务成了类与外界的接口。 类的属性赋予类状态保持的能力,这就使得类能够“生存下去”,同时 类的服务使类能够主动变化,实现状态变迁。这样类就又获得了“发展” 西南交通大学硕士研究生学位论文第6 页 的能力。正因为有这样的两大功能。类才能够胜任描述客观世界中的有机 实体。 2 2 设计良好的类 形成良好的类应当具备四个基本特征:完整性和充分性、原子性、高 内聚、低耦合。1 。 2 2 1 完整性和充分性 类的公共方法定义了类和类客户之间的契约。就像商业契约一样,清 晰的、定义明确的、能被所有用户接受的契约是非常重要的。 完整性就是要提供类客户可能预期的所有功能。客户将会从类名称中 作出假定类应该能够提供的方法集合。比如,如果买了一辆新车,会理所 当然地认为它应该有车轮。对类来说也同样的道理,当命名一个类并且描 述了它的语义,类客户将会获得这个信息并且会推断它应该提供什么样的 方法。例如,如果类b a n k a c c o u n t 提供了方法w i t h d r a w ( ) ,那么我们也 会设想它会有方法d e p o s i t ( ) 。再比如,假设设计了一个名为 p r o d u c t c a t a l o g 的类,那么任何客户都会理所当然地认为他们应该可以添 加、删除和寻找目录中的产品。类的名称清楚地暗示了类的这些语义。完 整性就是类必须做到满足客户所有合理的期望。 另一方面,充分性就是要保证类的所有方法注重实现隐藏在类背后的 意图。类应当永远都不会使客户感到惊讶,它应当恰好包含所需要的方法 的集合并且没有多余的任务。例如,在制作了像上述b a n k h c c o u n t 这样简 单而充分的类后,添加处理信用卡或管理保险率的方法。这些添加的方法 就是多余的,它们和银行帐户没有什么充分的联系。充分性就是要保持设 计类尽可能简单和专注。 完整性和充分性就是要求类做用户期望它们做的不多也不少。 2 2 2 原子性 方法应当设计成提供单一的原子服务。类不应提供各种方法傲同一件 西南交通大学硕士研究生学位论文第7 页 争隋,这样容易使客户混淆,并且会导致维护负担和一致性问题。 例如,类b a n k a c c o u n t 有一个执行单一储蓄的原始方法,那么它就不 应该还有更加复杂的可以执行两个或多个储蓄的方法。这是因为可以通过 重复使用原始方法达到相同的效果。我们的目标是类通常应当提供尽可能 小而简单的方法集合。 尽管原始性是个很好的原则,但有时也需要放松,通常放松原始性约 束的原因是为了提高性能。例如,如果银行储蓄批处理要比一个处理的性 能提高很多,那么就可能会放松原始性约束以允许类b a n k a c c o u n t 拥有更 加复杂的d e p o s i t ( ) 方法来一次性处理几个事务。然而,设计出发点往 往应该是可能的、原始的方法集合。如果以前存在真实的,被证实过的类 似情况,才能放松原始性约束,增加操作的复杂性。 2 2 3 高内聚 每个类都应当创建唯一的抽象概念模型,并且具有支持类意图的方法 集合这就叫内聚。如果类要实现许多不用的职责,那么就需要“辅助” 类来实现其中的一部分职责,主类将职责委托给“辅助”类。内聚性是类 最理想的特征之一,内聚的类通常容易理解,复用和维护。内聚的类具有 一小组紧密联系的职责。每个方法、属性和类关联都被特别设计用以实现 这个小而专注的职责集合。 2 2 4 低耦合 特定的类应当与那些仅仅足以帮助它实现职责的类产生关联,并且应 该是关联那些存在真正语义链接的类这就是低耦合性。 事实上,耦合是对象建模中最可怕的敌人,所以必须事先尽量限制类 间的关系,目的是尽可能最小化耦合。高耦合度的对象模型会导致系统不 可理解和不可维护。 不要仅仅因为类中有一段可复用的代码而在两个类之间创建连接。这 是最差的复用方式,因为只为节约一点点开发时间而牺牲了整个系统构架 的完整性。事实上,我们必须仔细考虑所有类之间的关联。 当然,一些耦合是良好的和需要的。包内部的高度耦合通常很好,因 为它显示了包的高内聚。当包与包之间产生耦合时,只有对框架妥协了, 西南交通大学硕士研究生学位论文第8 页 但是必须积极地寻找方法来消减这类耦合。 为了创建0 0 系统,对象不能孤立的存在。需要把它们联系起来,以 便它们执行有用的工作使得用户从系统中受益。这些类间的联系也被称 为关系。对象以及定义它们的类与外部的关系有以下几种:对象之间的分 类关系,即一般一特殊关系:对象之间的组成关系,即整体一部分关系:对 象之间的静态关系,即通过对象属性反映的联系;对象之间的动态关系, 即对象行为之间的依赖关系。下面分别介绍这几种关系。 2 3 一般一特殊结构 一般一特殊结构又称为分类结构,是由组具有一般一特殊关系( 继承 关系) 的类所组成的结构。其定义为:如果类a 具有类b 的全部属性和全 部服务,而且具有自己特有的莱些属性或服务,则a 叫做b 的特殊类,b 叫做a 的一般类“。 一般类之所以称为“一般”,是因为它的属性与服务具有一般性,这 个类以及它的所有特殊类的对象都应该具有这些属性与服务,所有这些对 象都属于一般类,使一般类成为一个较为一般的概念。特殊类之所以成为 “特殊”,是因为它具有独特的属性与服务,一般类的某些对象不符台这 些条件,使特殊类成为一个较为特殊的概念。从集合论的观点看,特殊类 的对象实例集合是一般类对象实铡集合的真子集:而一般类的特征集合则 是特殊类特征集合的真子集,如图2 2 所示: 对象实例集合特征集合 图2 - 2 一般类与特殊类 为了简化特殊类的描述,o o 方法通过种继承机制使一般类中已定义 的属性与服务不必再在特殊类中显示地定义,只要指明一个类是另一个类 的特殊类,继承机制将保证特殊类自动拥有一般类的全部属性和服务。 西南交通大学硕士研究生学位论文第9 页 一般与特殊类之间的关系叫做一般一特殊关系,又称继承关系或“i s a k i d e o f ”关系。这种关系是传递的,即若类a 继承类b ,类b 继承类c , 则a 也继承了c 的全部属性与服务。继承分为单继承和多继承。如果每个 特殊类只直接地继承一个一般类,则这种继承称为单继承;如果一个特殊 类直接继承两个或两个以上的一般类,则称为多继承。也可以说一般一特 殊结构是把组有一般一特殊关系的类组织在一起而得到的结构,它是一 个以类为结点,以一般一特殊关系为边的连通有向图。 如果在一般一特殊结构中仅存在单继承,则它是一个以最上层一般类 为根的树,称为层结构;如果结构中存在多继承,则它是一个半序的连通 有向图,称为网格结构。 一般一特殊结构是问题域的事物之间存在的一种关系。在o o a 模型中 建立一般一特殊结构,是为了使系统模型更清楚地映射问题域中事物的分 类。它把具有一般一特殊结构关系的类组织在一起,可以简化我们对复杂 系统的认识,它清楚地表达了一般类和特殊类之间的关系,使我们对系统 的认识和描述更接近日常思维中对一般一特殊概念的处理方式。 在o o a 中,一般一特殊结构使我们简化了类的定义对象的共同特 征仅在一般类中给出,特殊类通过继承而拥有这些特征,从而不必重复地 加以定义。只有通过一般一特殊结构给出类之间的继承关系,才可以简化 特殊类的定义,也只有通过一般一特殊结构,才能在阅读o o a 文档时除看 到特殊类中显示定义的属性与服务之外,还能清楚地了解它继承类哪些属 性与服务。 o o a 模型中的一般一特殊结构将为编程阶段用一种o o p l 实现类之间的 继承提供依据。程序中类之间的继承关系,应该与模型中给出的一般特 殊结构相对应。所以一般一特殊结构不但简化了o o a 文档,最终它还将导 致一个结构清晰的、较简练的程序。而且,当软件维护人员从程序追溯到 o o a 文档时,他们将看到一个如实地映射问题域中对象分类关系的结构。 2 4 整体一部分结构 2 4 1 整体一部分结构的概念 整体一部分结构又称组装结构,用于描述系统中类对象之间的组成关 系,通过它可以看出某个类的对象以另外一些类的对象作为其组成部分。 为了给出整体一部分结构的定义,让我们先定义整体对象、部分对象和整 西南交通大学硕士研究生学位论文 第1 0 页 体一部分关系。 如果对象a 是对象b 的一个组成部分,则称b 为a 的整体对象,a 为 b 的部分对象。并把b 和a 之间的关系称作整体一部分关系。 上述是对象的整体一部分关系,而类与类之间的整体一部分关系指的是 一个类的对象实例,以另一个类的对象实例作为其组成部分,也可以理解 为,一个类定义引用另一个类定义。 由上述的对象和类的整体一部分关系可得出整体一部分结构的定义为: 整体一部分结构是把一组具有整体一部分关系的类组织在一起的结构。 它是一个以类为结点,以整体一部分关系为边的连通有向图。3 。 整体一部分结构体现了o o 方法的聚合原则,它和体现分类及继承原则 的一般一特殊结构同样重要,是o o a 表示复杂事物的另一个重要手段。 首先,整体一部分结构可以清晰地表达事物之间的组成情况。客观世 界中,事物之间的组成关系是大量的,表现为多种形式,例如: ( 1 ) 物理上的整体事物和它的一个部分,如汽车和发动机、人体和消化 系统; ( 2 ) 组织机构与它的下级组织部门,如公司与子公司、公司与市场部; ( 3 ) 团体与成员,如班级与学生; ( 4 ) 空间上的包容关系,如教室和桌椅; ( 5 ) 抽象事物的整体与部分,如学科与分支学科、法律与法律条款、文 章与段落、工程方案与方案细则; ( 5 ) 具体事物和它的某个抽象方面,如人员和人员的身份。 在客观世界中事物之间的整体一部分关系处处可见。我们平常认识这 些事物时,并不是孤立地看待它们。比如认识一辆汽车。并不是看作“这 是一部发动机、一个车身和四个轮子”。也不是把整体和部分放在同一级 别来看待,说“这是一辆汽车、一部发动机、一个车身和四个轮子”。按 我们日常的思维方式,一般是这样来看:“这是一辆汽车、它是由一部发 动机、一个车身和四个轮子构成的”。整体一部分结构正是按这样的认识方 法,确切地反映了事物之间的组成情况,包括一些较复杂的情况,如:一 个整体由属于不同类的多个部分对象构成,一个部分对象又由更小的部分 对象构成。这样一些多部分、多层次的组成关系均可通过整体一部分结构 恰如其分地表示出来。因此,整体一部分结构可使o o a 模型清晰地表达问 题域中事物的复杂构成关系。 在o o a 中表示整体一部分结构的方法是在整体对象的类中增设一个表 西南交通大学硕士研究生学位论文第1 1 页 示部分对象的属性。这个属性既然设在整体对象中,它表示的对象当然就 是整体对象的一个部分了。在用o o p l 编程时,有两种实现整体一部分结构 的方式,一种是用部分对象的类作为数据类型,静态地声明为整体对象中 这个代表部分对象的属性变量。这样,部分对象就被嵌入到整体对象的属 性空间,形成嵌套对象( 见图2 3 ( a ) ) 。另一种方式是把整体对象中的这个 属性变量定义成指向部分对象的指针,或定义成部分对象的对象标识,运 行时动态创建部分对象,并使整体对象中的指针或对象标识指向它( 见图 2 - 3 ( b ) ) 。 ( a )嵌套对象( b ) 对象指针或对象标识 图2 3 整体一部分结构的两种实现方式啪 这两种实现方式都能表达对象之间的整体一部分关系,但效果有所不 同。采用嵌套对象方式时,一个部分对象成为整体对象不可分割的一部分, 其数据空间包含在整体对象之中,从生存时间看它与整体对象同生同灭。 这种方式适合于表达紧密的、固定不变的整体一部分关系,如飞机和发动 机、人体和消化系统等等。采用对象指针或对象标识方式时,整体对象和 部分对象是各自独立创建的。刚刚创建一个整体对象时,其指向部分对象 的属性值为空。只有创建了部分对象,并为该属性赋值,整体对象才开始 拥有这个部分。而且,在运行中可以动态地切断或恢复这种关系。部分对 象的数据空间与整体对象相分离,只需在整体对象中留个指针或对象标 识位置。这种方式适合于表达松散的、动态变化的整体一部分关系,并可 西南交通大学硕士研究生学位论文第1 2 页 表达一个部分对象能够同时属于多个整体对象的情况。例如,一个企业与 它的法律顾问就是这种松散的关系,双方可动态地建立或解除聘约,一个 法律顾问也可同时属于多个企业。 一般一特殊结构和整体一部分结构是两种迥然不同的结构,一个用于描 述对象之间的组成关系,一个用于描述对象类之间的继承关系。o o a 同时 需要这两种结构以解决不同的问题。但在有些情况下,二者之间是可以互 相变通的,或者说,它们可以达到殊途同归的效果。两种结构在概念上的 差别是很明显的,一个体现了“i s - a - k i n d o f ”关系,一个体现了“h a s a ” 关系。概念上如此不同的两种结构,为何在有些情况下尽可变通使用,并 达到相同的实际效果? 这是由于,一般一特殊结构是使特殊类通过继承而 拥有一般类的特征,整体一部分结构是使整体对象通过组装而拥有部分对 象的特征。尽管途径不同,着眼点不同,结果却是一样的:一些对象拥有 另一些对象的特征。 在o o a 中选用哪种结构,要看其实际问题用哪种结构表达最为自然。 比如说:“汽车是一种特殊的运输工具”最为自然,而说“汽车的一部分 是运输工具”就不太自然,此时宜用一般一特殊结构。反之,说“省是国 家的一部分”很自然,而说“国家是一种特殊的省”就很荒谬,此时宜用 整体一部分结构。 2 4 2 整体一部分结构的作用 ( 1 ) 简化对象的定义。在实际系统中,某些对象的内部构成可能是相 当复杂的,其表现为:对象含有大量的属性和服务,某些属性是较为复杂 的数据结构,或服务中包含较为复杂的功能。这种对象的类定义将会很庞 大。我们知道,任何一种好的软件开发方法或软件评估标准都不希望系统 的组成单位过于庞大,因为这样的系统单位将难以理解并增加隐藏错误的 机会。所以,在o o a 模型中,如果某些对象的定义过于复杂,应想法把它 简化,方法是:在一个复杂对象的内部进行“再分析”,看它的某些属性 与服务是不是描述了该对象的某个独立的部分。如果是,则用它们组成一 个部分对象,从整体对象中分离出来,建立整体一部分结构。例如,在一 个空运管理系统中,“飞机”对象类的定义有很多属性与服务,而其中一 部分是描述飞机发动机的,还有一部分是描述导航仪的。由于该系统特定 的问题域中没有脱离飞机而存在的发动机和导航仪。所以分析员开始没想 西南交通大学硕士研究生学位论文第1 3 页 到建立这两个对象类:但是关于它们的信息都是描述一架飞机所必需的, 所以就造就了“飞机”对象的类定义过于复杂的情况。为了简化“飞机” 对象的定义。可把它们分离出来,组成“发动机”对象和“导航仪”对象, 建立整体一部分结构。改造之后“飞机”对象类中减少了大量的属性和服 务,代替他们的是一个“发动机”属性和一个“导航仪”属性。 ( 2 ) 支持软件复用。在一般一特殊结构中通过继承而支持软件复用是 o o 方法颇受重视的优点之一。实际上,在整体一部分结构中通过组装而支 持软件复用其效果也毫不逊色。在以下几种情况下都可以运用整体一部分 结构而实现或支持复用。 一种情况是系统中已定义了某种对象,在定义其他对象时,发现其中 一组属性和服务与已定义的对象是相同的。此时不必再重复地定义这些属 性和服务,只需建立它与前一类对象之间的整体一部分结构。 另一种情况是在两个或更多的对象类中都有一组属性和服务描述这 些对象的一个相同的组成部分。把它们分离出来作为部分对象,建立整体 一部分结构,这些属性和服务就被多个类所复用,从而简化了它们的描述。 最后一种情况通过整体一部分结构提取可复用构件,以支持领域范围 的复用问题。如果一个对象类中有一组属性和服务描述了该对象的一个独 立部分,即使从本系统看并不需要这样一个部分对象,只要它是一种在本 领域经常使用的对象,就可把它从整体中分离出来作为部分对象,使它的 类定义成为一个应用范围较广的可复用构件。例如,即使当前系统只有一 个类对象含有电动机部件,也可以考虑把它分离出来,构成一个领域复用 构件。 、 ( 3 ) 表示数量不定的组成部分。一个对象中若含有某种数量不定而内 容相同的组成部分,则会给实现带来困难。例如“书”这种对象,含有描 述其每一章的属性,假如每一章都用三个属性来描述,一本书可能只有四 五章,也可能多达三十几章:那么,“书”的对象类应怎样定义? 定义几组 描述其各章的属性? 太少了对于某些对象可能不够用,按最多的数量定义 又使大部分对象空间浪费。在这种情况下可用整体一部分结构解决。建立 一种松散的整体一部分结构,实现时可以按最大数量在整体对象中设立对 象指针( 空缺时只浪费一个指针位置) 。 2 5 实例连接 西南交通大学硕士研究生学位论文第1 4 页 实例连接又称为链,用于表达对象之间的静态联系。所谓静态联系是 指最终可通过对象属性来表示的一个对象对另一个对象的依赖关系。这种 关系在现实世界中是大量存在的,并常与系统责任有关。实例连接通常是 对象实例之间的一种二元关系,在实现之后的关系中它将落实到每一对具 有这种关系的对象实例之间。在某些情况下,仅仅指出两类对象的实例之 间有或者没有联系是不够的,系统可能要求给出更多的消息。对于这样的 系统要求,一种解决方法是采用复杂的实例连接,扩充实例连接的表达能 力,使它可以带有属性。另一种方法是采用较纯的、形式单一的o o 概念, 用普通的对象来描述这种复杂性。 关联是类间的关系。就像实例连接对象,关联连接类。如果两个对象 问存在实例连接,这些对象的类间必定存在关联。这是因为实例连接是关 联的实例,就像对象是类的实例一样。下面是关联也是实例连接的一些属 性: ( 1 ) 多重性。多重性是一种约束,也是最普遍的约束类型。多重性在 任何时刻设计特定关系的类对象数目。考虑圈2 4 可以看到,在任意时刻 一个p e r s o n 对象恰好被一个c o m p a n y 对象所雇佣。然而,从时间轴上看, 对象可以被一系列c o m p a n y 所雇佣。 图2 4 关联的多重性 从图2 4 可能发现p e r s o n 对象永远不能被另外c o m p a n y 对象所雇佣 它总是恰好被一个c o m p a n y 对象所雇佣。因此多重性约束嵌入了模型 两个业务规则:一是p e r s o n 对象某个时刻只能被一个c o m p a n y 对象所雇 佣。二是p e r s o n 对象必定总是被雇佣。 这些约束是否合理完全依赖于建模的系统需求。我们可以看到多重约 西南交通大学硕士研究生学位论文第1 5 厦 束是很重要的它们在模型中编码业务规则。然而,这些规则被“深埋” 在模型的细节之中。 ( 2 ) 自反关联。类具有到自身的关联非常普遍。这称为自反关联,它 表示该类的对象可以具有到该类的其他对象的链接。图2 - 5 是自反关联的 示例。每个d i r e c t o r y 对象能够具有零个或多个扮演s u b d i r e c t o r y 角色 的d i r e c t o r y 对象的链接。而且,每个s u b d i r e c t o r y 对象关联零个或多 个f i l e 对象。 图2 - 5 自反关联 ( 3 ) 关联类。当类间具有多对多关系时,有时存在一些属性不能容易 地放入任何一个类中。我们可以通过图2 - 6 的简单事例来演示这些: 图2 - 6 类之间的多对多关系 初看起来,这似乎是很好的模型,每个p e r s o n 对象能够为很多c o m p a n y 对象工作,而且每个c o m p a n y 对象能够雇佣p e r s o n 对象。 然而,如果添加业务规则,每个p e r s o n 与雇佣它的c o m p a n y 间存在 薪水属性时会发生什么呢? 薪水属性记录在何处呢? 记录在p e r s o n 类中还 是c o m p a n y 类中? 我们不能使薪水成为p e r s o n 类的属性,因为每个p e r s o n 实例可能为 很多c o m p a n y 工作,可能具有不同的薪水。与此相似,我们不能使薪水成 为c o m p a n y 类的属性,因为每个c o m p a n y 实例雇佣很多p e r s o n ,每个 p e r s o n 都有潜在的不同薪水。 答案是薪水实际上是关联本身的特性,对于p e r s o n 对象和c o m p a n y 亘堂奎鋈盔兰亟塑窒圭堂焦鲨塞 箜! ! 夏 对象之间的每个雇佣链接都存在特定雇佣的特定薪水。我们使用关联类来 建模这种情况。如图2 7 所示。 i f 司j 、 | l 蛐 i 1 is m 叫咖n - 。i j 口犁 睡j li 图2 7 关联类 实际上,关联类既是关联又是类。它像关联那样连接两个类,而且定 义一组属于关系本身的特征。关联类能够具有属性、操作和其他关联。关 联类的实例是具有属性和操作的链接。这些链接的唯一标识由任何一端上 对象的标识所专门确定。这个因素约束关联类的语义当两个对象间在 任意时刻存在唯一的链接时,才能使用关联类。这是因为每个链接是关联 类的实例,必须具有它自身唯一标识。在上图中使用关联意味着约束模型: 对于给定p e r s o n 对象和给定c o m p a n y 对象,才有一个j o b 对象。换言之, 每个p e r s o n 与给定c o m p a n y 对象之间只有一个j o b 对象。然而,如果给 定p e r s o n 对象和给定c o m p a n y 对象之间具有多于一个的j o b ,那么不能使 用关联类。 2 6 消息连接 在一般的软件系统中,消息这个术语较多的应用于进程之间的通信。 广义地理解,一个软件成分向其它软件发出的控制消息或数据信息,都可 称为消息。一个消息具有发送者和接收者共同约定的语法和语义,接收者 在接收到消息之后,将按照其要求作出某种反应。 在0 0 方法中,按严格封装的要求,消息是对象之间在行为上的唯一 联系方式。即对象以外的成分不能直接地存取该对象的属性,只能向这个 对象发消息,由该对象的一个服务对收到的消息作出响应,完成发送者要 求做的事。 西南交通大学硕士研究生学位论文第1 7 页 消息连接是o o 模型中对对象之间行为依赖关系的表示。即:若类a 的对象在它的服务执行时需要向类b 的对象发送消息,则称存在着从a 到 b 的消息连接。 一般消息有以下几种用途: ( i ) 向接收者发出一个服务请求。例如在客户n 务器结构的应用系 统中,客户端请求服务器为它检索数据库中的某些信息。 ( 2 ) 向接收者提供一些数据。例如向接收者传送一个文件,或向它发 一个电子邮件。 ( 3 ) 向接收者发布一个通知或事件信息。例如,一个用户进程通知其 它进程该用户已在系统中登陆。 ( 4 ) 向接收者传送一个同步控制信号。例如,一个进程在释放某种资 源时唤醒正在等待这种资源的其它进程。 接收者可以有以下几种对消息的不同接受与处理方式: ( 1 ) 在消息产生之前,处理这个消息的进程或线程并不存在;仅当发 送者发出这个消息时才立刻创建个进程或线程来响应这个消息,完成它 所要求的服务。 ( 2 ) 处理消息的进程或线程已经存在,并且与发送者同步地接收消 息。接到消息时立即处理。 ( 3 ) 接收者异步的接收和处理消息,即在消息发出之后的某个时刻才 接收和处理该消息。 ( 4 ) 某些消息所指出的接收者可能并不关心这种消息,它可能不作任 何响应。 西南交通大学硕士研究生学位论文第1 8 页 第3 章类结构完整性与一致性 3 1 类的度量 3 1 1 软件度量理论 自1 9 5 8 年r u b e y 年d h u r t w i c k 首次提出软件度量学概念以来,软件 度量理论和方法研究不断发展。早期的软件度量学和当时的面向功能分解 的设计方法相联系,大多以模块度量为主。针对面向过程的程序设计, y o u r d o n 和c o n s t a n t i n e 提出了影响软件质量的主要因素:耦合性、内聚 性、复杂性、模块化及规模大小。f r o y 和z w e b e n 利用软件模块结构图进行 分析,从中提取2 1 个特性作为度量依据,它们是模块间传递数据量的最大 值、平均值、总数、公用数据数目、扇入、扇出平均值和最大值、条件调 用、循环调用数目及最大深度( 层数) 等n “。面向对象技术采用数据抽象、 封装、继承、多态性、信息隐藏、重用等机制,增强了软件可维护性、可 靠性,提高了生产
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 20483-2025土地荒漠化监测方法
- 限制手术管理办法
- 高档宾馆管理办法
- 煤矿科队级人事管理课件
- 研发部产品管理办法
- 陕西肥料管理办法
- 附属机构管理办法
- 疗休养收费管理办法
- 乘用车销售管理办法
- 石家庄快递管理办法
- 旅行社安全培训课件
- 住房和城乡建设领域施工现场专业人员职业培训机构申报表
- 保安服务投标书范文
- 【MOOC】逻辑学导论-西北大学 中国大学慕课MOOC答案
- 松材线虫病防控宣传
- Web应用系统安全开发课件:PHP弱数据类型的编码安全
- 2024年保安员证考试题库及答案(共240题)
- 传感器技术-武汉大学
- 建筑施工中的混凝土浇筑与养护考核试卷
- 联通技能竞赛考试题库(5G核心网知识部分)
- NBT 31021-2012风力发电企业科技文件规档规范
评论
0/150
提交评论