<十>面向对象分析之UML核心元素之关系

关系
        --->在UML中关系是非常重要的语义,它抽象出对象之间的联系,让对象构成特定的结构。
        
一,关联关系(association)

        --->关联关系是用一条直线表示的。
        --->描述不同类的对象之间的结构关系。它在一段时间内将多个类的实例链接在一起,这与依赖关系是不同的。依赖关系通常表示两个实例之间的临时关联关系。
        --->单行关联关系,A知道B的存在,B不知道A的存在。比如UML建模中,参与者知道用例的存在,用例不知道参与者的存在。
        
二,依赖关系(dependency)

        ---->依赖关系是用一条带箭头的虚线表示的。它描述一个对象的修改会导致另一个对象的修改这样的关系。
        --->与关联关系不同的是,依赖关系除了“知道”其他对象的存在,还会“使用”其他对象的属性或方法。从这个角度讲,以来关系是一种特殊的关联关系。
        --->举例,A对象保存了B对象的ID,但A对象对B对象没有操作,这时A仅仅是“知道”B对象,应当用关联关系;如果A对象使用了B对象的属性或方法,则B的修改会导致A的修改,这时A依赖于B。
        --->以来关系也有单向依赖和双向依赖之分。但是双向依赖关系是一种非常不好的结构,我们总是应当保持单向依赖,杜绝双向依赖的产生。

三,扩展关系(extends)

        ---->扩展关系是用一条带箭头的虚线加版型《extends》来表示
        ---->它特别用于在用例模型中说明向基本用例中的某个扩展点插入扩展用例。
        ---->一般来说,扩展用例是带有抽象性质的。它表示用例场景中某个“支流”,由特定的扩展点触发而被启动。所以严格来说扩展用例应当用在概念用例模型中,通过分析业务用例场景抽象出关键的可选核心业务而形成扩展用例。不过,在业务模型当中使用也是可以接受的,它可以更显示地表示出一个复杂业务用例的各个“分支”
        ---->与包含关系不同的是,扩展表示的是“可选”而不是“必需”,这意味着即使没有扩展用例,基本用例也是完整的。如果没有基本用例,扩展用例是不能单独存在的。如果有多个扩展用例,则同一时间用例实例也只会使用其中一个。
        ---->在建模过程中,我们使用扩展关系可能基于以下理由
                (1)表明用例的某一部分是可选(或可能可选)的系统行为,这样就可以将模型中的可选行为和必选行为分开。
                (2)表明只有在特定条件(有时是例外条件)下才执行分支流,如触发警报。
                (3)表示可能有一组行为段,其中的一个或多个段可以在基本用例的扩展点处插入,所插入的行为段(以及插入的顺序)将取决于在执行基本用例时与主角进行的交互。
                (4)表明多个基本用例中都有可能触发一个可选的分支流,从这个意义上说,扩展用例也代表了多个用例的可复用部分。
        ---->举例子:在打电话时,如果在通话过程中收到另一个呼叫,我们可以将当前通话保留而接听另一个通话。在这个场景中,保留通话用例就是打电话用例的一个扩展用例。我们可以看到,是否需要保留通话取决于打电话人的决定,而不是必需的,即使没有我们没有使用保留通话功能,也不影响打电话的完整性。但是如果没有之前的打电话用例,也就不可能单独启动所谓的保留通话用例了。

四,包含关系(include)

        --->包含关系是用一个带箭头的虚线加版型《include》来标示的,它特别用于用例模型,说明在执行基本用例的用例实例过程中插入的行为段。
        --->包含用例总是带有抽象性质的,基本用例可控制与包含用例的关系,并可依赖于执行包含用例所得到的结果,但基本用例和包含用例都不能访问对方的属性。从这种意义上讲,包含用例是被封装的,它代表可在各种不同基本用例中复用的行为。因此,与扩展用例一样,包含用例也应当用在概念用例模型中,通过分析业务用例场景而抽象出关键的必选的核心业务而形成包含用例。同样,在业务模型中使用也是可以接受的。它可以显式地表示出那些可复用的业务过程。
        ---->与扩展用例不同的是,包含用例表示的是“必需”而不是“可选”,这意味着如果没有包含用例,基本用例是不完整的,同时如果没有基本用例,包含用例是不能单独存在的。
        ---->在建模过程中使用包含用例可能基于以下理由:
                (1)从基本用例中分解出这样的行为,它对于了解基本用例的主要目的并不是必需的,只有它的结果才是比较重要的。
                (2)分解出两个或更多个用例共有的行为。
        ---->为了理解包含关系,让我们看一个例子。去银行办业务,不论是取钱,转帐,还是修改密码,我们都需要首先核对帐号和密码,因此可以将可对帐号作为上述业务用例的共有行为提取出来,形成一个包含用例,我们可以看到这个包含用例就带有可复用的意义,如果没有包含用例,取钱,转帐业务是不完整的。同时,核对帐号也不能脱离取钱,转帐等业务用例而单独存在。

五,实现关系(realize)

        --->实现关系是用一个带空心箭头的虚线表示的。它特别用于在用例模型中链接用例和用例实现,说明基本用例的一个实现方式。
        --->实现所代表的含义是,基本用例描述一个业务目标,但是该业务目标有多种可能的实现途径,每一种实现途径可以用用例实现(或称用例实例)来表示,而用例实现与基本用例之间就构成了实现关系。换言之,每个实现途径都实现了基本用例的业务目标。

六,精化关系(refine)

        --->精化关系是用一条带箭头的虚线加版型《refine》来表示的。它特别用于用例模型,一个基本用例可以分解出许多更小的关键精化用例,这些更小的精化用例更细致地展示基本用例的核心业务。精化关系用来连接基本用例和精化用例,说明精化用例是由基本用例精化得来的。
        --->精化关系也可以用于模型与模型之间,表示某个模型是通过精化另一个模型而得来的。比如说,我们认为设计类是通过精化分析类而得来的,我们可以用XX设计类《refine》XX分析类来表示他们之间的关系。
        --->与泛化关系不同的是,精化关系表示由基本对象可以分解为更明确,精细的子对象,这些子对象并没有增加,减少,改变基本对象的行为和属性。仅仅是更加细致和明确化了。在泛化关系中,基本对象被泛化成为子对象后,子对象继承了基本对象的所有特征,并且子对象可以增加,改变基本对象的行为和属性。
        --->另一方面精化关系仅仅用于建模阶段,在实现语言中是没有精化这一语义的。泛化则等同于实现语言中的继承语义。
        ---->我们讲到概念模型是用于获取业务模型中的关键概念的,从业务模型中分析出实现业务目标的那些核心行为和实体,从而描述出一个关键的业务结构以得到一个易于理解的业务框架。这些关键概念就是对业务用例的精化。他们表示为概念用例到业务用例的精化关系。
                作为例子,图展示预存话费业务用例被精化成为四个核心的概念用例,这些概念用例合在一起就满足了实现业务目标的所有关键过程,我们可以根据这精化结果建立业务框架。

七,泛化关系(generalization)
        
        ---->泛化关系是用一条带空心箭头的直线表示。泛化关系可用于建模过程任意一个阶段,说明两个对象之间的继承关系。
        ---->泛化关系表示一个类对另一个类的继承。继承而得的类称为后代。被继承的类称为祖先。继承意味着祖先的定义(包括任何特征,如属性,关系或对其对象执行的操作)对于后代的对象也是有效的。
        ---->泛化关系是从后代类到其祖先类的关系。
        ---->特别需要说明的是,作者并不赞同在用例之间使用泛化关系,尽管UML认为它是合法的。原因是用来带有原子特征,每个用例都应当是独一无二的。用例描述了参与者完成一个目标的整个过程,如果采用泛化关系,很难描述子用例继承了基本用例什么。过程?还是业务实体?如果仅仅为了将用例之间的可复用部份或用例的可扩展部分描述出来,那么使用包含关系和扩展关系就足够了。

八,聚合关系(aggregation)

        ---->聚合关系是用一条带空心菱形箭头的直线表示
        ---->聚合关系用于类图,特别用于表示实体对象之间的关系,表达整体由部分构成的语义。例如一个部门由许多人员构成
        ---->与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。例如部门撤销以后,人员不会因此而消失,他们依然存在。

九,组合关系(composition)

        ---->组合关系是用一条带实心菱形箭头的直线表示。
        ---->需要特别说明的是,在Rose中没有采用实心菱形箭头这一标准的UML图形,而采用了带箭头的空心菱形。箭头指向组合的子对象,表示子对象属于母对象。
        ---->组合关系用于类图,特别用于表示实体对象关系,表达整体拥有部分的语义。例如母公司拥有许多子公司。
        ---->组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部门也将消亡。例如:母公司解体了,子公司将不存在。

时间: 2024-07-31 19:37:50

<十>面向对象分析之UML核心元素之关系的相关文章

&lt;十二&gt;面向对象分析之UML核心元素之节点和设备

节点,设备 一:概念        ---->是带有至少一个处理器,内存以及可能还带有其他设备的处理元素.在实际工作中,一般说来服务器,工作站或者客户机都可以称为一个节点.        ---->节点就是应用程序的部署单元.        ---->节点元素特别用于部署图,描述应用程序在物理结构上是如何部署在应用环境中的,是一种包括软,硬件环境在内的拓扑结构描述.        --->在笔者看来,UML中定义的节点所能表达的信息并不够充分,对于应用环境的拓扑结构来说仅仅描述节点

&lt;四&gt;面向对象分析之UML核心元素之用例

一:基本概念        --->用例定义了一组用例实例,其中每个实例都是系统所执行一系列操作,这些操作生成特定主角可以观测的值.        --->所谓用例,就是一件事情,要完成这件事情,需要一系列活动,而做一件事情可以有很多不同的办法和步骤,也可能遇到各种各样意外情况.因此这件事情是由很多不同情况的集合构成的.在UML中称之为用例场景.一个场景就是一个用例的实例.               --->一个系统的功能性是由一些对系统有愿望的参与者要做的一些事情构成的,事情完成后就

&lt;五&gt;面向对象分析之UML核心元素之边界

一:基本概念        ---->边界在UML图符里的定义只是一个简单的矩形,四个边决定了边界的内外.参与者,用例和边界相生相克.        ---->边界是一个很重要的概念,和封装的概念师出同门.面向对象,任何一个对象都有一个边界.        --->在收集需求时,我们总要先假定一个范围边界.在这个边界内寻找需求,而找到的需求集合又决定了最终边界的大小.在需求出来之前,我们必须先设想一个边界,这个边界的大小是不确定的,随着需求的明确,边界也逐步变得明朗.但是问题出在确定需求

&lt;三&gt;面向对象分析之UML核心元素之参与者

一:版型        --->在UML里有一个概念叫版型.有些书里也称类型,构造型.        --->这个概念是对一个UML元素基础定义的扩展.在同一个元素基础定义的基础上赋予特别的含义,使得这个元素适用于特定的场合.        --->例如(1)用例:的版型有:"业务用例","业务用例实现"                      (2)类:的版型有:"接口","边界类","实体类&

&lt;六&gt;面向对象分析之UML核心元素之业务实体

一:基本概念          ---->业务实体类(class)的一种版型.特别用于在业务建模阶段建立领域模型.业务实体是业务模型中非常重要的一个因素,它为问题领域中的关键概念建立概念化的理解.是人们认识问题领域的重要手段.如果说参与者和用例描述了我们在这个问题领域中达到的什么样的目标,那么业务实体就描述了我们使用什么来达到业务目标以及通过什么记录这个业务目标.        ---->官方定义:业务实体代表业务角色执行业务用例处理或使用的"事物".        ---

&lt;七&gt;面向对象分析之UML核心元素之包

一:基本概念         ---->包是一种容器,如同文件夹一样.它将某些信息分类.形成逻辑单元        ---->包是UML非常常用的一个元素,它最主要的作用就是容纳并为其他元素分类.包可以容纳任何UML元素,例如用例,业务实体,类图等,也包括子包.        ----->UML认为好的分包具有高内聚,低耦合的性质.        ----->分包好坏手有包之间的依赖关系来评判的.事实上在UML里,包之间的关系定义也只有依赖关系.        ----->什

&lt;十一&gt;面向对象分析之UML核心元素之组件

组件一:概念        --->组件是系统中实际存在的可更换部分,它实现特定的功能,符合一套接口标准并实现一组接口.        --->组件代表系统中的一部分物理实施.包括软件代码(源代码,二进制代码或可执行代码)或其等价物(如脚本或命令文件)        --->在UML的定义中,组件之间唯一的关系就是依赖.在Rose中,组件视图中允许的唯一链接也是依赖关系,而依赖意味着一个组件的修改会导致依赖于它的其他组件的修改.        --->在笔者看来,一个组件应当是一个

UML标准元素

标准元素是为约束,构造型和标签而预定义的关键字.它们代表通用效用的概念,这些通用效用没有足够的重要性或者与核心概念存在足够的差异用以包含在UML 核心概念中.它们和UML 核心概念的关系就如同内建的子例程库和一种编程语言的关系.它们不是核心语言的一部分,但它们是用户在使用这种语言时可以依赖的环境的一部分.列表中也包括了表示法关键字--出现在别的模型元素的符号上但代表的是内建模型元素而不是构造型的关键字.为关键字列出了表示法符号.1. 访问(access)(授权依赖的构造型)两个包之间的构造型依赖

《面向对象分析与设计》一1.6关于统一建模语言UML

1.6关于统一建模语言UML UML最初是在多种面向对象分析与设计方法相互融合的基础上形成的,后来发展成为也可以用于业务建模以及其他非软件系统建模的语言.它于1997年11月被对象管理组织(Object Management Group)采纳为建模语言规范,随后被产业界和学术界广泛接受. UML定义了建立系统模型所需要的概念并给出了表示法,但它并不涉及如何进行系统建模.因此它只是一种建模语言,而不是一种建模方法.UML是独立于开发过程的,也就是说它可以适用于不同的开发过程. UML 2.4规范由