UML类图符号简介
- 格式:doc
- 大小:276.00 KB
- 文档页数:7
UML中类图的⼀些基本知识⼀.类类(class)封装了数据和⾏为,是⾯向对象的重要组成部分,他是具有相同操作、属性、关系的对象集合的总称。
在软件运⾏时,类被实例化成对象(object),对象对应某个具体的事物,是类的实例(instance)类图(class diagram)使⽤出现在系统中的不同类来描述系统的静态结构,它⽤来描述不同的类以及它们之间的关系。
在系统分析和设计阶段,类通常可以分为三种,分别是实体类(Entity class)、控制类(Control Class)和边界类(Boundary Class)。
1)实体类:对应系统中的每个实体,它们通常需要保存在永久存储体中,⼀般使⽤数据库或⽂件表来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。
实体类来源于需求说明中的名词,如学⽣、商品等。
2)控制类:⽤于体现应⽤程序的执⾏逻辑,提供相应的业务操作,将控制类抽象出来可以降低界⾯和数据库之间的耦合度。
控制类⼀般是由动宾结构的短语(动词加名词)转化来的名词,⽐如增加商品类,⽤户注册类。
3)边界类:⽤于对外部⽤户和系统之间的交互对象进⾏抽象,主要包括界⾯类,如对话框、窗⼝、菜单。
⼆.类的UML表⽰⼀般是长⽅形(分三格),类名在最上⾯那格,中间是成员变量(属性),最下⾯是成员函数(⾏为)。
属性格式:可见性名称:类型 [ = 缺省值]⾏为格式:可见性名词(参数列表) [ : 返回类型]关于可见性: + public,- private,# protected例如:三.类与类之间的关系在软件系统中,类表⽰孤⽴存在的,类与类之间存在各种关系,UML提供不提供表⽰⽅式。
1.关联关系(Association):最常⽤的⼀种关系,它是⼀种结构化关系,⽤于表⽰⼀类对象和另⼀对象之间有联系。
在UML类图中,⽤实线连接有关联关系的对象所对应的类。
实际的场景:class A有⼀个成员对象b,b的类型是class B。
类图当中各个符号的含义
1 虚线加箭头,表⽰的依赖关系,⼀个类的实现需要借助另⼀个类当中的⽅法。
------->
2 实线加箭头表⽰的是⼀种关联的关系,表⽰两个类都需要调⽤对⽅的⽅法。
———>
3 实线加△,表⽰的泛化的关系,即⼦类继承的⽗类,虚线加△,表⽰实线的关系,⼦类对⽗类的纯虚函数进⾏了实现。
4 空⼼◇加实线表⽰的是⼀种聚合关系,但是聚合类可以单独的存在。
5 实⼼的◇加实线表⽰的是⼀种组合的关系,组合关系下其中的类不能够单独的存在。
总结:箭头表⽰关联的关系,三⾓形表⽰的是继承的关系,菱形表⽰的是包含的关系,即⼀个类当中包含另⼀个类。
UML类图,常用符号小计UML类图,常用符号小计1、首先看该图中的动物矩形框,它代表的是一个类,类图分三层,第一层是类名(动物),第二层是特性(通常我们说的属性或是字段),第三层是操作(通常我们说的方法或行为),注意特性和操作前面的+,“+”代表public,“-“代表private,“#”代表protected。
在这里需要注意一下,动物类的名称是斜体,这就表示该类是抽象类。
同样的鸟类也是抽象类。
2、再看左下角的飞翔,它是一个接口图,与类图的不同就在于,顶部有一个<<interface>>,第一行是接口名称,第二行是接口方法。
接口还有一种表示方法是棒棒糖表示法,如图中的唐老鸭实现讲人话的接口。
3、鸟继承自动物类,鸭继承自鸟类,唐老鸭又继承自鸭类,继承的关系用空心三角形+实线来表示。
4、大雁实现了飞行的接口,接口用虚线+空心三角来实现5、企鹅需要了解天气情况,气候的变化,那么如果一个类“知道”另一个类时,可以用关联(association)。
关联关系要用实线箭头来表示6、一个雁群可以包括很多只雁,但雁并不是雁群的一部分,像这样的关系就满足聚合(aggregation)关系,聚合是一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。
聚合关系用空心菱形+实线表示。
7、合成(composition)是一种强的拥有关系,体现的严格的部分与整的关系,部分和整的生命周期一样。
上图中鸟和翅膀就是合成的关系,其中图中标注的1,2被称为基数。
表明这一端的类可以有多个实例,鸟肯定是两个翅膀喽,一个是没法飞的,哈哈。
8、动物与氧气、水之间是依赖的关系,没有氧气和水,动物(当然也包括人)根本是无法生存的,所以嘛。
不管是动物还是植物还是高级动物人也好,都要依赖于氧气和水的,依赖(dependency)关系,用虚线箭头来表示。
或许还有好多好多其他的常用符号,欢迎朋友们和我一起沟通。
父用例通常是抽象的。
1一个类和一个接口不同:一个类可以有它形态的真实实例,然而一个接口必须至少有一个类来实现它。
在 UML 2 中,一个接口被认为是类建模元素的特殊化。
因此,接口就象类那样绘制,但是长方形的顶部区域也有文本“interface”。
2》UML 支持的可见性类型的标志3》多重值和它们的表示4》类图之间的关系有:泛化(继承),依赖,关联,聚合/组合。
1.聚合/组合聚合是一种特别类型的关联,用于描述“总体到局部”的关系。
在基本的聚合关系中,部分类的生命周期独立于整体类的生命周期。
举例来说,我们可以想象,车是一个整体实体,而车轮轮胎是整辆车的一部分。
轮胎可以在安置到车时的前几个星期被制造,并放置于仓库中。
在这个实例中,Wheel类实例清楚地独立地Car类实例而存在。
然而,有些情况下,部分类的生命周期并不独立于整体类的生命周期-- 这称为合成聚合。
举例来说,考虑公司与部门的关系。
公司和部门都建模成类,在公司存在之前,部门不能存在。
这里Department类的实例依赖于Company类的实例而存在。
·基本聚合(聚合)有聚合关系的关联指出,某个类是另外某个类的一部分。
在一个聚合关系中,子类实例可以比父类存在更长的时间。
为了表现一个聚合关系,你画一条从父类到部分类的实线,并在父类的关联末端画一个未填充棱形。
图中清楚的表明了类Car对象包含了另一类Wheel的4个实例,这两者在概念上是密不可分的,其中的一个类是另一个类的构成成分。
菱形表示“包含”,箭头表示被包含的对象,数字4表示包含的数目。
·组合聚合(组合)组合聚合关系是聚合关系的另一种形式,但是子类实例的生命周期依赖于父类实例的生命周期。
注意:组合关系如聚合关系一样绘制,不过这次菱形是被填充的。
2.依赖依赖可以说是要完成C5里的所有功能,一定要有C6的方法协助才行3.关联可以分为单向关联,双向关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。
UML类图基本元素符号1. 类(Classes)类包含3个组成部分。
第⼀个是Java中定义的类名。
第⼆个是属性(attributes)。
第三个是该类提供的⽅法。
属性和操作之前可附加⼀个可见性修饰符。
加号(+)表⽰具有公共可见性。
减号(-)表⽰私有可见性。
#号表⽰受保护的可见性。
省略这些修饰符表⽰具有package(包)级别的可见性。
如果属性或操作具有下划线,表明它是静态的。
在操作中,可同时列出它接受的参数,以及返回类型,如下图所⽰: 2. 包(Package)包是⼀种常规⽤途的组合机制。
UML中的⼀个包直接对应于Java中的⼀个包。
在Java中,⼀个包可能含有其他包、类或者同时含有这两者。
进⾏建模时,你通常拥有逻辑性的包,它主要⽤于对你的模型进⾏组织。
你还会拥有物理性的包,它直接转换成系统中的Java包。
每个包的名称对这个包进⾏了惟⼀性的标识。
3. 接⼝(Interface)接⼝是⼀系列操作的集合,它指定了⼀个类所提供的服务。
它直接对应于Java中的⼀个接⼝类型。
接⼝既可⽤下⾯的那个图标来表⽰(上⾯⼀个圆圈符号,圆圈符号下⾯是接⼝名,中间是直线,直线下⾯是⽅法名),也可由附加了<<interface>>的⼀个标准类来表⽰。
通常,根据接⼝在类图上的样⼦,就能知道与其他类的关系。
关 系:1. 依赖(Dependency)实体之间⼀个“使⽤”关系暗⽰⼀个实体的规范发⽣变化后,可能影响依赖于它的其他实例。
更具体地说,它可转换为对不在实例作⽤域内的⼀个类或对象的任何类型的引⽤。
其中包括⼀个局部变量,对通过⽅法调⽤⽽获得的⼀个对象的引⽤(如下例所⽰),或者对⼀个类的静态⽅法的引⽤(同时不存在那个类的⼀个实例)。
也可利⽤“依赖”来表⽰包和包之间的关系。
由于包中含有类,所以你可根据那些包中的各个类之间的关系,表⽰出包和包的关系。
2. 关联(Association)实体之间的⼀个结构化关系表明对象是相互连接的。
UML类图类图类图⽤于表⽰类的静态内容以及它们之间的关系,在其中可以显⽰出类的成员变量和成员函数,以及类之间的继承和引⽤关系。
类的UML表⽰是⼀个长⽅形,垂直地分为三个区,顶部区域显⽰类的名字,中间的区域列出类的属性,底部的区域列出类的操作。
分类类interfaceutilityabstract(斜体表⽰)可见性+ public# protected- private~ package类的属性类的属性节在分隔线上列出每⼀个类的属性。
属性节是可选择的,要是⼀⽤它,就包含类的列表显⽰的每个属性。
在业务类图中,属性类型通常与单位相符,这对于图的可能读者是有意义的。
然⽽⽤于⽣成代码的类图,要求类的属性类型必须限制在由程序语⾔提供的类型之中,或包含于在系统中实现的模型的类型之中。
name : attribute typeflightNumber : Integer属性关联类型属性名称属性类型flightNumber IntegerdepartureTime DateflightDuration Minutes属性默认值name : attribute type = default value类的操作类的操作记录在类图长⽅形的第三个区域中,它也是可选择的。
和属性⼀样,类的操作以列表格式显⽰,每个操作在它⾃⼰线上。
操作使⽤下列记号表现name(parameter list) : type of value returned操作名称返回参数值类型N/AdelayFlightName TypenumberOfMinutes MinutesgetArrivalTime N/A Date继承关系继承指的是⼀个⼦类继承⼀个⽗类的功能,并增加它⾃⼰的新功能。
为了在⼀个类图上建模继承,从⼦类拉出⼀条闭合的单键头(或三⾓形)的实线指向⽗类。
在上图中,继承关系由每个⽗类的单独的线画出,这是在IBM Rational Rose和IBM Rational XDE中使⽤的⽅法。
UML图--类图统⼀建模语⾔(Unified Modeling Language)分为:⽤例图,类图,对象图,组合结构图,活动图,顺序图,通信图,定时图,组件图,部署图类图在UML类图中,类⼀般由三部分组成:•类名:每个类都必须有⼀个名字,类名是⼀个字符串。
•属性(Attributes):属性是指类的性质,即类的成员变量。
类可以有任意多个属性,也可以没有属性。
•操作(Operations):操作是类的任意⼀个实例对象都可以使⽤的⾏为,操作是类的成员⽅法。
关联关系•关联关系(Association)是类与类之间最常⽤的⼀种关系,它是⼀种结构化关系,⽤于表⽰⼀类对象与另⼀类对象之间有联系。
•在UML类图中,⽤实线连接有关联的对象所对应的类,在使⽤Java、C#和C++等编程语⾔实现关联关系时,通常将⼀个类的对象作为另⼀个类的属性。
•在使⽤类图表⽰关联关系时可以在关联线上标注⾓⾊名。
双向关联单向关联⾃关联•在系统中可能会存在⼀些类的属性对象类型为该类本⾝,这种特殊的关联关系称为⾃关联。
public class Node{private Node subNode;……}ü重数性关联•重数性关联关系⼜称为多重性关联关系(Multiplicity),表⽰⼀个类的对象与另⼀个类的对象连接的个数。
在UML中多重性关系可以直接在关联直线上增加⼀个数字表⽰与之对应的另⼀个类的对象的个数。
表⽰⽅式多重性说明1..1表⽰另⼀个类的⼀个对象只与⼀个该类对象有关系1..*表⽰另⼀个类的⼀个对象与⼀个或多个该类对象有关系0..1表⽰另⼀个类的⼀个对象没有或只与⼀个该类对象有关系m..n表⽰另⼀个类的⼀个对象与最少m、最多n个该类对象有关系 (m<=n)聚合关系•聚合关系(Aggregation)表⽰⼀个整体与部分的关系。
通常在定义⼀个整体类后,再去分析这个整体类的组成结构,从⽽找出⼀些成员类,该整体类和成员类之间就形成了聚合关系。
UML类图中的符号解释在UML的定义中,描述类和对象之间的关系,包括以下⼏种⽅式:依赖(Dependency)、关联(Association)、聚合(Aggregation)、组合(Composition)、泛化(Generalization)和实现(Realization)。
现分别说明如下:1. 依赖(Dependency)在uml中,“依赖”表⽰为带箭头的虚线,箭头指向被依赖的元素。
是类与类之间的连接,表⽰为⼀个类依赖于另⼀个类的定义,其中⼀个类的变化将影响另⼀个类。
依赖总是单向的,不应该存在双向依赖,这⼀点要特别注意。
更具体的说,依赖可以理解为:⼀个类(A)对不在其实例作⽤域内的另⼀个类或对象(B)的任何类型的引⽤。
⼤致包含以下⼏种情况:(1)局部变量;(2)⽅法的参数;(3)静态⽅法的调⽤;下⾯是依赖关系的uml⽰意图:2. 关联(Association)在uml中,关联表⽰为带箭头的实线。
关联可以是单向的,也可以是双向的。
如果是双向关联,则可以表⽰为双向箭头,或者没有箭头。
⼀般来说,系统设计应表现为单向关联,这样利于维护。
⼀个关联可以附加“多重性”的修饰符,表⽰两个类之间的数量关系。
关联可以理解为:⼀个类(A)持有另⼀个类或对象(B)。
具体表现为:(1)成员变量下⾯是关联关系的uml⽰例图:上⾯的关联表⽰,⼀个Employee持有(has)0个或多个TimeCard。
3. 聚合(Aggregation)在uml中,聚合关系表⽰为空⼼的菱形箭头线。
聚合关系是关联关系的⼀种,表⽰⼀种“强”关联关系。
对⽐与关联关系,两个类是处于同⼀个层次的。
⽽聚合关系,两个类处于不同的层次,强调了⼀个整体/局部的关系。
例如⼀辆汽车有⼀个引擎,4个轮胎。
在聚合关系中,体现了⼀种“弱拥有”的概念。
也就是说,对象A拥有对象B,但B并不是A的组成部分。
更具体的表现为,如果A由B聚合⽽成,则A包含B的全局对象,但B对象可以不在A对象创建时创建。
UML各种图例——用例图、类图、状态图、包图、协作图、顺序图面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML的精彩之处.UML中有九种建模的图标,即:∙用例图∙类图∙对象图∙顺序图∙协作图∙状态图∙活动图∙组件图∙配置图本课程中的某些部分包含了这些图的细节信息的页面链接.而且每个部分都有一个小问题,测试一下你对这个部分的理解.为什么UML很重要?为了回答这个问题,我们看看建筑行业.设计师设计出房子.施工人员使用这个设计来建造房子.建筑越复杂,设计师和施工人员之间的交流就越重要.蓝图就成为了这个行业中的设计师和施工人员的必修课.写软件就好像建造建筑物一样.系统越复杂,参与编写与配置软件的人员之间的交流也就越重要.在过去十年里UML就成为分析师,设计师和程序员之间的“建筑蓝图”.现在它已经成为了软件行业的一部分了.UML提供了分析师,设计师和程序员之间在软件设计时的通用语言.UML被应用到面向对象的问题的解决上.想要学习UML必须熟悉面向对象解决问题的根本原则――都是从模型的建造开始的.一个模型model就是根本问题的抽象.域domain就是问题所处的真实世界.模型是由对象objects组成的,它们之间通过相互发送消息messages来相互作用的.记住把一个对象想象成“活着的”.对象有他们知道的事(属性attributes)和他们可以做的事(行为或操作behaviors or operations).对象的属性的值决定了它的状态state.类Classes是对象的“蓝图”.一个类在一个单独的实体中封装了属性(数据)和行为(方法或函数).对象是类的实例instances.用例图用例图Use case diagrams描述了作为一个外部的观察者的视角对系统的印象.强调这个系统是什么而不是这个系统怎么工作.用例图与情节紧紧相关的.情节scenario是指当某个人与系统进行互动时发生的情况.下面是一个医院门诊部的情节.“一个病人打电话给门诊部预约一年一次的身体检查.接待员找出在预约记录本上找出最近的没有预约过的时间,并记上那个时间的预约记录.”用例Use case是为了完成一个工作或者达到一个目的的一系列情节的总和.角色actor是发动与这个工作有关的事件的人或者事情.角色简单的扮演着人或者对象的作用.下面的图是一个门诊部Make Appointment用例.角色是病人.角色与用例的联系是通讯联系communication association(或简称通讯communication)角色是人状的图标,用例是一个椭圆,通讯是连接角色和用例的线.一个用例图是角色,用例,和它们之间的联系的集合.我们已经把Make Appointment作为一个含有四个角色和四个用例的图的一部分.注意一个单独的用例可以有多个角色.用例图在三个领域很有作用.∙决定特征(需求).当系统已经分析好并且设计成型时,新的用例产生新的需求∙客户通讯.使用用例图很容易表示开发者与客户之间的联系.∙产生测试用例.一个用例的情节可能产生这些情节的一批测试用例.类图类图Class diagram通过显示出系统的类以及这些类之间的关系来表示系统.类图是静态的-它们显示出什么可以产生影响但不会告诉你什么时候产生影响.下面是一个顾客从零售商处预定商品的模型的类图.中心的类是Order.连接它的是购买货物的Customer和Payment.Payment有三种形式:Cash,Check,或者Credit.订单包括OrderDetails(line item),每个这种类都连着Item.每个类图包括类,关联和多样性表示.方向性和角色是为了使图示得更清楚时可选的项目.包和对象图为了简单地表示出复杂的类图,可以把类组合成包packages.一个包是UML上有逻辑关系的元件的集合.下面这个图是是一个把类组合成包的一个商业模型. dependencies关系.如果另一个的包B改变可能会导致一个包A改变,则包A依赖包B.包是用一个在上方带有小标签的矩形表示的.包名写在标签上或者在矩形里面.点化线箭头表示依赖对象图Object diagrams用来表示类的实例.他们在解释复杂关系的细小问题时(特别是递归关系时)很有用.这个类图示一个大学的Department可以包括其他很多的Departments.这个对象图示上面类图的实例.用了很多具体的例子.UML中实例名带有下划线.只要意思清楚,类或实例名可以在对象图中被省略.每个类图的矩形对应了一个单独的实例.实例名称中所强调的UML图表.类或实例的名称可能是省略对象图表只要图的意义仍然是明确的.顺序图类图和对象图是静态模型的视图.交互图是动态的.他们描述了对象间的交互作用.顺序图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线.消息用从一个对象的生命线到另一个对象生命线的箭头表示.箭头以时间顺序在图中从上到下排列.协作图协作图也是互动的图表.他们像序列图一样也传递相同的信息,但他们不关心什么时候消息被传递,只关心对象的角色.在序列图中,对象的角色放在上面而消息则是连接线.对象角色矩形上标有类或对象名(或者都有).类名前面有个冒号(:).协作图的每个消息都有一个序列号.顶层消息的数字是1.同一个等级的消息(也就是同一个调用中的消息)有同样的数字前缀,再根据他们出现的顺序增加一个后缀1,2等等.状态图对象拥有行为和状态.对象的状态是由对象当前的行动和条件决定的.状态图statechart diagram显示出了对象可能的状态以及由状态改变而导致的转移.我们的模型例图建立了一个银行的在线登录系统.登录过程包括输入合法的密码和个人账号,再提交给系统验证信息.登录系统可以被划分为四种不重叠的状态:Getting SSN, Getting PIN, Validating, 以及Rejecting.每个状态都有一套完整的转移transitions来决定状态的顺序.状态是用圆角矩形来表示的.转移则是使用带箭头的连线表示.触发转移的事件或者条件写在箭头的旁边.我们的图上有两个自转移.一个是在Getting SSN,另一个则在上Getting PIN.初始状态(黑色圆圈)是开始动作的虚拟开始.结束状态也是动作的虚拟结束.事件或条件触发动作时用(/动作)表示.当进入Validating状态时,对象并不等外部事件触发转移.取而代之,它产生一个动作.动作的结果决定了下一步的状态.活动图活动图activity diagram是一个很特别的流程图.活动图和状态图之间是有关系的.状态图把焦点集中在过程中的对象身上,而活动图则集中在一个单独过程动作流程.活动图告诉了我们活动之间的依赖关系.对我们的例子来说,我们使用如下的过程.“通过ATM来取钱.”这个活动有三个类Customer, ATM和Bank.整个过程从黑色圆圈开始到黑白的同心圆结束.活动用圆角矩形表示.。
1UML 的9种图例的总结一、 用例图1、 定义用例定义:用例是对包括变量在内的一组动作序列的描述,系统执行这些动作,并产生传递特定参与者的价值的可观察结果。
(这是UML 对用例的正式定义,可以这样去理解,用例是参与者想要系统做的事情,用例在画图中用椭圆来表示,椭圆下面附上用例名称)。
用例图定义:由参与者(Actor )、用例(Use Case )以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图。
2、 用途用例图(User Case )是被称为参与者的外部用户所能观察到的系统功能的模型图,呈现了一些参与者和一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。
用例图主要的作用有三个:(1)获取需求;(2)指导测试;(3)还可在整个过程中的其它工作流起到指导作用。
3、 组成元素以及元素之间的关系说明用例图由参与者(Actor )、用例(Use Case )、系统边界(用矩形表示—注明系统名称)、箭头组成,用画图的方法来完成。
参与者不是特指人,是指系统以外的,在使用系统或与系统交互中所扮演的角色。
因此参与者可以是人,可以是事物,也可以是时间或其他系统等等。
还有一点要注意的是,参与者不是指人或事物本身,而是表示人或事物当时所扮演的角色。
系统边界是用来表示正在建模系统的边界。
边界内表示系统的组成部分,边界外表示系统外部。
系统边界在画图中用方框来表示,同时附上系统的名称,参与者画在边界的外面,用例画在边界里面。
因为系统边界的作用有时候不是很明显,所以我个人理解,在画图时可省略。
箭头用来表示参与者和系统通过相互发送信号或消息进行交互的关联关系。
箭头尾部用来表示启动交互的一方,箭头头部用来表示被启动的一方,其中用例总是要由参与者来启动。
元素之间的关系:用例图中包含的元素除了系统边界、角色和用例,另外就是关系。
关系包括用例之间的关系,角色之间的关系,用例和角色之间的关系。
角色之间的关系:角色之间的关系。
UML类图符号简介
1. 类(Class):使用三层矩形框表示。
第一层显示类的名称,如果是抽象类,则就用斜体显示。
第二层是字段和属性。
第三层是类的方法。
注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected。
2. 接口:使用两层矩形框表示,与类图的区别主要是顶端有<<interface>>显示。
第一行是接口名称。
第二行是接口方法。
3. 继承类(extends):用空心三角形+实线来表示。
4. 实现接口(implements):用空心三角形+虚线来表示
5. 关联(Association):用实线箭头来表示,例如:燕子与气候
6. 聚合(Aggregation):用空心的菱形+实线箭头来表示
聚合:表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分,例如:公司和员工
组合(Composition):用实心的菱形+实线箭头来表示
组合:部分和整体的关系,并且生命周期是相同的。
例如:人与手
7. 依赖(Dependency):用虚线箭头来表示,例如:动物与氧气
8. 基数:连线两端的数字表明这一端的类可以有几个实例,比如:一个鸟应该有两只翅膀。
如果一个类可能有无数个实例,则就用‘n’来表示。
关联、聚合、组合是有基数的
类之间的关系
UML把类之间的关系分为以下5种.
● 关联:类A与类B的实例之间存在特定的对应关系
● 依赖:类A访问类B提供的服务
● 聚集:类A为整体类,类B为局部类,类A的对象由类B的对象组合而成
● 泛化:类A继承类B
● 实现:类A实现了B接口
关联(Association)
关联指的是类之间的特定对应关系,在UML中用带实线的箭头表示。
按照类之间的数量对比,关联
可以分为以下三种:
● 一对一关联
● 一对多关联
● 多对多关联
注意:关联还要以分为单向关联和双向关联
依赖(Dependency)
依赖指的是类之间的调用关系,在UML中用带虚线的箭头表示。
如果类A访问类B 的属性或者方法,
或者类A负责实例化类B,那么可以说类A依赖类B。
和关联关系不同,无须在类A 中定义类B类型的属性。
聚集(Aggregation)
聚集指的是整体与部分之间的关系,在UML中用带实线的菱形箭头表示。
聚集关系还可以分为两种类型:
● 被聚集的子系统允许被拆卸和替换,这是普通聚集关系。
● 被聚集的子系统不允许被拆卸和替换,这种聚集称为强聚集关系,或者组成关系。
注:强聚集(组成)可用带实线的实心菱形箭头表示。
泛化(Generalization)
泛化指的是类之间的继承关系,在UML中用带实线的三角形箭头表示。
实现(Realization)
实现指的是类与接口之间的关系,在UML中用带虚线的三角形箭头表示。
以下是GOF设计模式中的描述:
箭头和三角表示子类关系。
虚箭头线表示一个类实例化另一个类的对象,箭头指向被实例化的对象的类。
普通的箭头线表示相识(acquaintance也叫关联或者引用),意味着一个对象仅仅知道另一个对象。
相识的对象可能请求彼此的操作,但他们不为对方负责,它只标示了对象间较松散的耦合关系。
尾部带有菱形的箭头线表示聚合(aggregation),意味着一个对象拥有另一个对象或者对另一个对象负责。
一般我们称一个对象包含另一个对象,或者是另一个对象的一部分。
聚合意味着聚合对象和其所有者具有相同的生命周期。
抽象类名以斜体表示,抽象操作也以斜体表示。
图中可以包括实现操作的伪代码,代码将出现在带有褶角的框中,并用虚线将该褶角框与代码所实现的操作相连。
图一:
此实线箭头表示, 继承, 从一个非接口类的继承.
图二:
那条连线表示双向关联:
看左边, Flight扮演assignedFights角色, 有0到1个Plane跟他关联(一个航班要么取消了没有飞机,要么只能对应一架飞机)
看右边, Plane扮演着assignedPlane角色, 有0到多个Flight跟他关联(一个飞机可以参与多个航班, 也可以停在仓库里面烂掉)
图三:
那条连线表示单向关联:
基本的意义跟上面的是一样的, 唯一不同的是, 右边的类对左边的类是一无所知的. 图四:
那个大的包围的框叫软件包, 名字为Account, 就一些可以归类的类包装起来.
图五:
如此虚线的箭头表示实现一个接口.
图六:
水平的连线还是表示上面所说的关联, 但从关联连线中引伸出来的虚线, 这意味当Flight类的一个实例关联到FrequentFlyer 类的一个实例时,将会产生MileageCredit 类的一个实例.
图七:
带菱形的箭头表示基本聚合, 由上图知道, Wheel类扮演wheels角色, 聚合4个到Car对象里面去,
空心的菱形表示Wheel对象并不随Car的创建而创建,销毁而销毁.
图八:
意义和上面类似, 唯一不同的是, 实心菱形表示Department对象随Company对象的创建而创建,销毁而销毁.
图九:。