第3章UML的关系Home3.1依赖关系依赖指出两个或多个模型元素之间语义上的关系。它表示被依赖元素的变化会要求或指示依赖元素的改变。依赖关系用一个虚线箭头表示,箭头上可附加含关键字的版型,关键字用来指明依赖的种类。在UML2.0中的依赖种类如下:Access(访问),bind(绑定),call(调用),create(创建),derive(派生),instantiate(实例化),permit(允许),realize(实现),refine(精化),send(发送),substitute(替换),trace(追踪依赖),use(使用)SchedulingEngine依赖关系BoxOffice《use》3.2类属关系关系功能符号关联类实例间连接的描述依赖二个模型元素之间的一种关系泛化更特殊描述与更一般描述之间的一种关系,用于继承和多态性类型声明实现规约(specification)与它的实现之间的关系泛化•泛化指出类间的“一般—特殊关系”(is-a)•一般类定义了它的特殊类的公共属性和操作•对一般类扩展一些属性和/或操作后,可以特化(specialize)成特殊类•一般类是特殊类的父类,特殊类是一般类的子类•特殊类可以继承一般类的属性和操作•子类可以定义自己的属性和操作,也可重新定义父类中的操作,但重新定义的操作必须与父类具有相同的操作特征(signature)显示计算面积四边形泛化和继承显示六边形显示三角形多边形显示边数顶角座标长宽矩形计算面积泛化是一种分类学关系,一个一般类可以从不同的维或方面将其特化(specialization)成不同的特殊类集合,用一个类元(用作分类符)来表示一个维或方面,由一个类元特化而成的特殊类组成一个泛化集(generalizationset)。在泛化集中可对其元素应用约束,在UML中提供以下约束,见下表。泛化集的约束符号含义disjoint(不相交)该类元在泛化集中是互斥的overlapping(交迭)该类元在泛化集中不是互斥的complete(完全的)该类元在泛化集中完全覆盖特化的维incomplete(不完全的)该类元在泛化集中不完全覆盖特化的维泛化集的约束医生人男人工人女人教师{overlapping,incomplete}{disjoint,complete}:职业:职业:职业:性别:性别3.3关联关系关联描述了系统中对象之间或其它实例之间的连接。关联的种类主要有二元关联,多元关联,受限关联,聚集(aggregation)和组合(composition)。3.3.1角色与阶元A.二元关联二元关联表示为在两个类之间用一条直线连接,直线上可写上关联名。有首都国家城市工作于公司员工雇佣关联通常是双向的关联的两端可加上重数(multiplicity),表示该类有多少个对象可与对方的一个对象关联驾驶人轿车驾驶员公车工作于公司员工雇佣*1工作于公司员工雇佣**关联的两端还可加上角色名(role)允许一个类与自身关联*雇佣*工作于工人1..*老板0..1管理公司员工雇佣关联的链公司A张三公司B李四公司A王五公司C张三链是关联的实例一个类的对象在不同的关联中扮演不同的角色保险公司人保险合同保险单0..11表示为表达0..*1有涉及婚姻丈夫妻子0..*1..*涉及有保险客户B.多元关联三个或三个以上的类之间可以互相关联项目程序语言程序员CAD程序:项目C:语言记账系统:项目COBOL:语言张三:开发人员三重关联对象图3.3.2导航(navigability)导航*选课*学生课程(a)*选课*学生课程(c)*选课*学生课程(b)导航性符号明确的含义隐含的含义未指明双向可导航右边可导航左边未指明只有右边可导航只有右边可导航只有右边可导航右边未指明左边不可导航只有右边可导航双向可导航双向可导航双向不可导航双向不可导航符号种类语义+Public(公共的)任何能看到这个类的类都能看到该属性#Protected(受保护的)这个类或者它的任何子孙类都能看到该属性Private(私有的)只有这个类自身能看到该属性Package(包的)在同一个包中的任何类能看到该属性3.3.3可见性3.3.4限定符C.受限关联(qualifiedassociation):受限关联用于一对多或多对多的关联。限定符(qualifier)用来区分关联“多”端的对象集合,它指明了在关联“多”端的某个特殊对象目录文件0..*{ordered}有序关联目录文件文件名受限关联3.3.6聚合关系聚集(aggregation)是表示整体一部分关系的一种关联,它的“部分”对象可以是任意“整体”对象的一部分。聚集成员**组个人3.3.7组合关系组合(composition):组合是一种更强形式的关联,代表整体的组合对象有管理它的部分对象的特有责任,如部分对象的分配和解除分配。组合关联具有强的物主身份,即“整体”对象拥有“部分”对象,“部分”对象生存在“整体”对象中。*窗口正文对话框按钮菜单***E.关联类:UML中可以把关联定义成类,该关联的每个链都是这个类的实例。关联类用户工作站授权优先级特权开始一个时间片*授权*3.4实现关系实现关系将一个模型元素(如类)连接到另一个模型元素(如接口),后者(如接口)是行为的规约(specification),而不是结构,前者(如类)必须至少支持(通过继承或直接声明)后者的所有操作。可以认为前者是后者的实现。泛化和实现都可以将一般描述与具体描述联系起来。其区别是,泛化是同一语义层上的元素之间的连接,通常在同一模型内;而实现是不同语义层中的元素之间的连接,它通常建立在不同的模型内,如设计类到分析类是一种实现关系。实现关系《interface》choiceBlocksetDefault(choice:Choice)getChoice():ChoiceRadioButtonArraysetDefault(choice:Button)getChoice():ButtonPopUpMenusetDefault(choice:String)getChoice():StringButtonChoiceString1..*1..*1..*choicechoicechoice5)约束和派生(constraint&derivation)约束是用自然语言或特定的形式语言正文表示的语义条件或限制,它用“{正文字符串}”形式表示。约束可以附加到任何模型元素上,如前面有关泛化的约束有:不相交、交迭、完全的、不完全的。***保险公司人公司保险合同{xor}***保险公司人公司保险合同目录文件0..*{ordered}1..*成员11党派领袖1{subset}政治家党派关联的约束关系{self.employer=self.boss.employer}0..1工人*老板0..1公司员工*雇员雇主Cost-priceSales-price/profitArticle{profit=Sales-price-Cost-price}Invoice+amount:Real+date:Date=Currentdate+customer:String+specification:String-administrator:String=“unspecified”-numberofinvoices:Integer+status:Status=unpaid{unpaid,paid}关联也可以被派生或约束1*{person.employer=person.department.employer}*1employeremployerdepartmentworksForDepartment/worksForCompany1*公司部门人6)模板(Templates)模板是一个参数化的模型元素,使用它时参数必须在建模时绑定到实际值。模板的同义词是参数化元素。模板类不是一个直接可用的类,因为它有未绑定的参数,必须将它的参数绑定到实际值,以生成实际的类。《bind》T→color,n→50Arrayelement:T[n]T,n:integerExpression=2Arrayelement:T[n]T,n:integerExpression=2ArrayT→Car,n→100colorArray模板(a)(c)(b)一个模板类可以是一个一般类的子类,这意味着由绑定该模板而形成的所有类都是给定类(一般类)的子类。作为子类的模板在使用模板生成实际类时,还可在绑定的类中附加特征(feature)。TopTenListArrayelement:T[n]T,n:integerExpression=2show:Datehost:person对绑定的类添加属性《bind》T→Joke,n→10UML为每一个模型元素规定了独特的图形表示符号,称为图标(Icon)。在UML的核心包中定义的分类符,如对象类、接口、数据类型、节点、组件、信号、UseCase、子系统等,它们的图标如图3.9所示。UML定义的联系,如依赖、关联、泛化、实现(Realization)等,它们的图标如图3.10所示。消息的图标如图3.11(a)所示。状态机所涉及的模型元素有状态、转移、事件、活动等。状态与活动的图标分别如图3.11(b)和图3.11(c)所示。注释的图标如图3.12所示。第4章UML的符号HomeUML的符号Home分类符图标示例图3.10联系图标示例UML的符号Home消息、状态和活动图标示例注释图标示例模型元素与通用机制模型元素指模型中的实体以及实体间相互连接的关系部分模型元素注解类属性操作对象:类属性操作状态用况结点供应接口包依赖关联泛化主动类属性操作请求接口构件实现第5章视与图主题域视图(view)图(diagram)结构化(静态的)静态视图类图(class)设计视图内部结构(internalstructure)协作图(collaboration)构件图(component)用况视图用况图(usecase)动态的状态机视图状态机图(statemachine)活动视图活动图(activity)交互视图顺序图(sequence)通信图(communication)物理的部署视图部署图(deployment)模型管理模型管理视图包图(package)