UML类图画法及其之间的几种关系
- 格式:docx
- 大小:116.59 KB
- 文档页数:4
UML类图中关联关系的导航方式和选择原则在软件开发中,UML类图是一种常用的建模工具,用于描述系统中的类和它们之间的关系。
其中,关联关系是类图中最基本的关系之一,用于表示类之间的连接。
关联关系可以分为双向关联和单向关联两种。
双向关联表示两个类之间的连接是相互的,而单向关联表示连接只是单向的。
在类图中,关联关系通常用带箭头的实线表示。
在使用关联关系时,我们需要考虑如何进行导航,即如何通过一个类的实例找到与之相关联的其他类的实例。
导航方式的选择取决于系统的需求和设计的目标。
一种常见的导航方式是使用关联类的引用。
在这种情况下,一个类的实例可以通过它与其他类的关联关系中的引用来访问相关联的实例。
例如,考虑一个订单管理系统,订单类和客户类之间存在关联关系。
通过订单类的一个引用,我们可以访问与该订单相关联的客户实例。
另一种导航方式是使用关联类的操作。
在这种情况下,一个类的实例可以通过调用关联类中定义的操作来访问相关联的实例。
例如,在一个电子商务系统中,订单类和商品类之间存在关联关系。
通过调用订单类中的一个操作,我们可以获取与该订单相关联的商品实例的信息。
在选择导航方式时,我们应该考虑以下几个原则:1. 一致性原则:在整个系统中,应该保持一致的导航方式。
如果在一个关联关系中使用了引用导航,那么在其他关联关系中也应该使用引用导航,以保持一致性和统一性。
2. 依赖性原则:导航方式应该尽量减少类之间的依赖性。
如果一个类的实例通过关联类的引用或操作来访问其他类的实例,那么这个类就会对关联类产生依赖。
为了降低类之间的耦合度,我们应该尽量避免过多的依赖关系。
3. 效率原则:导航方式应该尽量高效。
在设计关联关系时,我们应该考虑到系统的性能需求和实际运行环境,选择合适的导航方式以提高系统的响应速度和效率。
4. 安全性原则:导航方式应该保证系统的安全性。
在设计关联关系时,我们应该考虑到数据的隐私和安全性要求,选择适当的导航方式以保护系统中的敏感信息。
UML类图中关联关系的三种导航方式在软件开发中,UML(统一建模语言)类图是一种常用的建模工具,用于描述系统中的类和它们之间的关系。
其中,关联关系是类图中最基本的一种关系,描述了类之间的连接。
在关联关系中,导航方式是指一个类如何访问与之相关联的其他类的对象。
在UML类图中,有三种常见的导航方式:单向导航、双向导航和自关联导航。
1. 单向导航单向导航是指一个类可以访问与之关联的其他类的对象,而被关联的类不能直接访问该类的对象。
这种导航方式常见于一对多的关联关系,其中一个类是主导类,而另一个类是从属类。
举个例子,考虑一个图书馆管理系统,图书馆类与图书类之间存在一种关联关系,一个图书馆可以管理多本图书。
在这种情况下,图书馆类可以通过关联关系访问图书类的对象,但是图书类无法直接访问图书馆类的对象。
2. 双向导航双向导航是指两个类可以互相访问对方的对象。
这种导航方式常见于一对一或多对多的关联关系,其中两个类都可以主动访问对方的对象。
继续以图书馆管理系统为例,考虑一个借阅记录类与读者类之间的关联关系。
一个借阅记录可以关联一个读者,同时一个读者也可以关联多个借阅记录。
在这种情况下,借阅记录类和读者类可以通过关联关系互相访问对方的对象。
双向导航可以提供更灵活的访问方式,但也需要注意双向关联的管理和维护。
在设计时,需要考虑到两个类之间的依赖关系和业务逻辑,避免出现循环依赖或不一致的情况。
3. 自关联导航自关联导航是指一个类与自身存在关联关系,可以访问自身的对象。
这种导航方式常见于树状结构或层级结构的模型。
举个例子,考虑一个组织机构管理系统,组织类与自身存在一种关联关系,一个组织可以包含多个子组织。
在这种情况下,组织类可以通过关联关系访问自身的对象,实现对组织结构的层级管理。
自关联导航可以用于描述递归结构或层级结构,提供了一种方便的方式来处理复杂的关系。
但是,在使用自关联导航时需要注意循环引用的问题,避免出现无限循环或死循环的情况。
UML类关系图(泛化,实现,依赖,关联(聚合,组合))UML的构造快包含3种:(1) 事物(4种):结构事物,⾏为事物,分组事物,注释事物(2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系(3) 图(10种):⽤例图,类图,对象图,包图,组件图,部署图,状态图,活动图,序列图,协作图事物是对模型中最具代表性的成分的抽象;关系把事物结合在⼀起;图聚集了相关的事物。
(2) 关系(4种)UML 中类与类, 类与接⼝, 接⼝与接⼝这间的关系有: 泛化(generalization) 关系, 关联(association)关系( 关联, 聚合, 合成), 依赖(dependency)关系,实现(realization)关系.泛化(generalization)关系是⼀个类(称为⼦类、⼦接⼝)继承另外的⼀个类(称为⽗类、⽗接⼝)的功能,并可以增加它⾃⼰的新功能的能⼒,继承是类与类或者接⼝与接⼝之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时⼀般没有争议性。
实现(realization)关系指的是⼀个class类实现interface接⼝(可以是多个)的功能;实现是类与接⼝之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时⼀般没有争议性;依赖(dependency)关系: 也是类与类之间的连接. 表⽰⼀个类依赖于另⼀个类的定义. 依赖关系总是单向的。
可以简单的理解,就是⼀个类A 使⽤到了另⼀个类B,⽽这种使⽤关系是具有偶然性的、、临时性的、⾮常弱的,但是B类的变化会影响到A;⽐如某⼈要过河,需要借⽤⼀条船,此时⼈与船之间的关系就是依赖;表现在代码层⾯,为类B作为参数被类A在某个method⽅法中使⽤。
(A use B)在java 中. 依赖关系体现为: 局部变量, ⽅法中的参数, 和对静态⽅法的调⽤.关联(association)关系:表⽰类与类之间的联接, 它使⼀个类知道另⼀个类的属性和⽅法.关联可以使⽤单箭头表⽰单向关联, 使⽤双箭头或不使⽤箭头表⽰双向关联, 不建议使⽤双向关联. 关联有两个端点, 在每个端点可以有⼀个基数, 表⽰这个关联的类可以有⼏个实例.常见的基数及含义:0..1:0 或1 个实例.0..*: 对实例的数⽬没有限制.1: 只能有⼀个实例.1..*: ⾄少有⼀个实例.他体现的是两个类、或者类与接⼝之间语义级别的⼀种强依赖关系,⽐如我和我的朋友;这种关系⽐依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,⼀般是长期性的,⽽且双⽅的关系⼀般是平等的,表现在代码层⾯,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引⽤了⼀个类型为被关联类B的全局变量;在java 语⾔中关联关系是使⽤实例变量实现的.关联关系还包括:聚合,组合关系。
1UML用例图中包含(include)、扩展(extend)和泛化(generalization)三种关系详解共性:都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通后过不同的方法来重用这个公共的用例,以减少模型维护的工作量。
1、包含(include)包含关系:使用包含(Inclusion)用例来封装一组跨越多个用例的相似动作(行为片断),以便多个基(Base)用例复用。
基用例控制与包含用例的关系,以及被包含用例的事件流是否会插入到基用例的事件流中。
基用例可以依赖包含用例执行的结果,但是双方都不能访问对方的属性。
包含关系对典型的应用就是复用,也就是定义中说的情景。
但是有时当某用例的事件流过于复杂时,为了简化用例的描述,我们也可以把某一段事件流抽象成为一个被包含的用例;相反,用例划分太细时,也可以抽象出一个基用例,来包含这些细颗粒的用例。
这种情况类似于在过程设计语言中,将程序的某一段算法封装成一个子过程,然后再从主程序中调用这一子过程。
例如:业务中,总是存在着维护某某信息的功能,如果将它作为一个用例,那新建、编辑以及修改都要在用例详述中描述,过于复杂;如果分成新建用例、编辑用例和删除用例,则划分太细。
这时包含关系可以用来理清关系。
2、扩展(extend)扩展关系:将基用例中一段相对独立并且可选的动作,用扩展(Extension)用例加以封装,再让它从基用例中声明的扩展点(Extension Point)上进行扩展,从而使基用例行为更简练和目标更集中。
扩展用例为基用例添加新的行为。
扩展用例可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。
但是扩展用例对基用例不可见。
对于一个扩展用例,可以在基用例上有几个扩展点。
例如,系统中允许用户对查询的结果进行导出、打印。
对于查询而言,能不能导出、打印查询都是一样的,导出、打印是不可见的。
导入、打印和查询相对独立,而且为查询添加了新行为。
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现1.2.3.4.5.6.类与类图1 类(Class封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
2 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。
一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。
3 类的属性即类的数据职责,类的操作即类的行为职责一、依赖关系(Dependence依赖关系(Dependence):假设A类的变化引起了B 类的变化,则说名B类依赖于A类。
• 依赖关系(Dependency 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
• 在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
[java] view plaincopyprint?1. public class Driver2. {3. public void drive(Car car4. {5. car.move(;6. }7. ……8. }9. public class Car10. {11. public void move(12. {13. ......14. }15. ……16. }{car.move(;}……}public class Car{public void move({......}……}依赖关系有如下三种情况:1、A类是B类中的(某中方法的)局部变量;2、A类是B类方法当中的一个参数;3、A类向B类发送消息,从而影响B类发生变化;GeneralizationGeneralization A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化)• 泛化关系(Generalization也就是继承关系,也称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。
UML类图画法全程解析本节向⼤家介绍⼀下UML类图画法,主要包括UML类图元素和关系画法,希望通过本⽂的介绍,你对UML类图画法有⼀定的认识。
软件设计起步:UML类图画法学习设计模式,画UML类图是基础,通过UML类图,能更好地和⼤家交流,也能很容易就表达出⾃⼰的设计想法,它就好⽐普通话,是⼀种标准语⾔。
现在流⾏的主要⼯具有两种:RationalRose和MicrosoftVisio,这两种⼯具都⽐较易⽤,选择哪种⼯具就看个⼈的喜好了。
本⼈对Microsoft 的软件⽐较有好感,所以⾃然MicrosoftVisio2003是我的⾸选。
UML类图常⽤元素。
类:类是⼀种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在⼀起的集合体。
CPerson是⼀个抽象类,它是不能被实例化的,⽽CFamily可以被实例化。
接⼝:接⼝是被调⽤者调⽤的⼀组操作⽅法。
其实CPerson也可以作为接⼝。
UML类图中常见的⼏种关系。
泛化(Generalization):⼀句话,就是继承的表⽰。
是is-a的关系。
依赖(Dependency):UML类图画法中依赖是⼀种使⽤关系,它说明⼀个事物规范的变化可能影响到使⽤它的另⼀个事务,但反之则不然。
依赖关系的表⽰法是虚线箭头,箭头尾部的元素依赖箭头头部的元素,是use-a的关系。
关联(Association):⽤于描述类与类之间的连接,是has-a的关系。
聚合(Aggregation):聚合是关联的特例。
如果类与类之间的关系具有“整体和局部”的特点,则把这样的关联称为聚合。
它往往有“包含”,“由……组成”的意思。
我这⾥举的都是平时UML类图画法常⽤的⼏种情况,当然UML还有很多知识我没有了解,⽐如关联就有许多种。
本节向⼤家介绍⼀下UML类图符号,只有掌握了UML符号的意义,你才能很好的使⽤,本节从⼋个⽅⾯向⼤家介绍UML类图符号,希望通过本节的学习你对UML类图符号有初步的认识。
UML类图及类与类之间的关系原⽂地址:类图⽤于描述系统中所包含的类以及它们之间的相互关系,帮助⼈们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。
1. 类类(Class)封装了数据和⾏为,是⾯向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
在系统中,每个类都具有⼀定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。
⼀个类可以有多种职责,设计得好的类⼀般只有⼀种职责。
在定义类的时候,将类的职责分解成为类的属性和操作(即⽅法)。
类的属性即类的数据职责,类的操作即类的⾏为职责。
设计类是⾯向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。
在软件系统运⾏时,类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)。
类图(Class Diagram)使⽤出现在系统中的不同类来描述系统的静态结构,它⽤来描述不同的类以及它们之间的关系。
在系统分析与设计阶段,类通常可以分为三种,分别是实体类(Entity Class)、控制类(Control Class)和边界类(Boundary Class),下⾯对这三种类加以简要说明:(1) 实体类:实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,⼀般使⽤数据库表或⽂件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。
实体类来源于需求说明中的名词,如学⽣、商品等。
(2) 控制类:控制类⽤于体现应⽤程序的执⾏逻辑,提供相应的业务操作,将控制类抽象出来可以降低界⾯和数据库之间的耦合度。
控制类⼀般是由动宾结构的短语(动词+名词)转化来的名词,如增加商品对应有⼀个商品增加类,注册对应有⼀个⽤户注册类等(3) 边界类:边界类⽤于对外部⽤户与系统之间的交互对象进⾏抽象,主要包括界⾯类,如对话框、窗⼝、菜单等。
在⾯向对象分析和设计的初级阶段,通常⾸先识别出实体类,绘制初始类图,此时的类图也可称为领域模型,包括实体类及其它们之间的相互关系。
1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。
在 GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。
对象引用本身就是有向的,更适合表达我们所讨论的那种关系。
所以这种关系在设计的时候比较少用到,关联一般都是有向的。
使用ROSE 生成的代码是这样的:class C1...{public:C2* theC2;};class C2...{public:C1* theC1;};双向关联在代码的表现为双方都拥有对方的一个指针,当然也可以是引用或者是值。
单向关联:C3->C4:表示相识关系,指C3知道C4,C3可以调用C4的公共属性和方法。
没有生命期的依赖。
一般是表示为一种引用。
生成代码如下:class C3...{public:C4* theC4;};class C4...{};单向关联的代码就表现为C3有C4的指针,而C4对C3一无所知。
自身关联(反身关联):自己引用自己,带着一个自己的引用。
代码如下:class C14...{public:C14* theC14;};就是在自己的内部有着一个自身的引用。
2、聚合/组合当类之间有整体-部分关系的时候,我们就可以使用组合或者聚合。
聚合:表示C9聚合C10,但是C10可以离开C9而独立存在(独立存在的意思是在某个应用的问题域中这个类的存在有意义。
这句话怎么解,请看下面组合里的解释)。
代码如下:class C9...{public:C10 theC10;};class C10...{};组合(也有人称为包容):一般是实心菱形加实线箭头表示,如上图所示,表示的是C8被C7包容,而且C8不能离开C7而独立存在。
但这是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。
UML中各种图的画法(全)UML中各种图的画法(全)一、UML中基本的图范畴:在 UML 2 中有二种基本的图范畴:结构图和行为图。
每个 UML 图都属于这二个图范畴。
结构图的目的是显示建模系统的静态结构。
它们包括类,组件和(或)对象图。
另一方面,行为图显示系统中的对象的动态行为,包括如对象的方法,协作和活动之类的内容。
行为图的实例是活动图,用例图和序列图。
二、UML中的类图:1.类图的表示:类的 UML 表示是一个长方形,垂直地分为三个区,如图 1 所示。
顶部区域显示类的名字。
中间的区域列出类的属性。
底部的区域列出类的操作。
在一个类图上画一个类元素时,你必须要有顶端的区域,下面的二个区域是可选择的(当图描述仅仅用于显示分类器间关系的高层细节时,下面的两个区域是不必要的)。
描述:顶部区域显示类的名字。
中间的区域列出类的属性。
底部的区域列出类的操作。
当在一个类图上画一个类元素时,你必须要有顶端的区域,下面的二个区域是可选择的(当图描述仅仅用于显示分类器间关系的高层细节时,下面的两个区域是不必要的)。
·类名:如果是抽象类,则采用斜体·类属性列表:name : attribute type 如 flightNumber : Integer,这是最常见的表达形式n ame : attribute type = default value 如balance : Dollars = 0,这是带有默认值的表达形式·类方法列表:name(parameter list) : type of value returned注意:在业务类图中,属性类型通常与单位相符,这对于图的可能读者是有意义的(例如,分钟,美元,等等)。
然而,用于生成代码的类图,要求类的属性类型必须限制在由程序语言提供的类型之中,或包含于在系统中实现的、模型的类型之中。
2.继承的表示:为了在一个类图上建模继承,从子类(要继承行为的类)拉出一条闭合的,单键头(或三角形)的实线指向超类。
UML九种图之⽤例图和类图前⾔近期写UML⽂档,看视频的时候感觉掌握的还能够,当真正写⽂档的时候才发现不是⼀件easy的事。
写⽂档⾃⼰⼜翻开⾃⼰的笔记看了⼀遍⼜⼀遍。
以下就给⼤家介绍⼀下我画的⼏张图:⽤例图1. ⽤例图的构成(⽤例,⾓⾊,关系)⽤例:指功能的描写叙述⾓⾊:触发起某种事件关系:⽤例图的关系(依赖,泛化,关联)2. ⽤例图的作⽤(1)⽤例视图是整个UML设计的关键,影响到整个UML设计的过程(2)⽤例模型驱动了需求分析后各个阶段的开发(3)⽤例模型⽤于需求分析阶段,表明了开发⼈员和⽤户针对需求达成的某种共识注意⼏个keyword:开发⼈员,⽤户,共同商讨达成某种共识3.设计原则将系统看做⿊盒⼦,从⽤户⾓度理解系统,不须要考虑某个功能是怎样实现的。
仅仅须要考虑系统由谁来运⾏和怎样交互和运⾏。
以下是我画的⽤例图:以⽤户的权限为基础画出来的。
类图1.类图的构成类、接⼝、协作、关系、包2.类的构成2.类图的作⽤类图⼀般在具体设计过程中出现,主要⽤来描写叙述系统中各个模块中类之间的关系,包含类或者类与接⼝的继承关系,类之间的依赖、聚合等关系。
通过类图,就能实际的把系统中的各个类,即对象描写叙述清楚,下⼀步就是依照这个具体的设计编码了。
3.类图的设计Use case——>class(要点,抽象名词得到类)——>确定类的属性和⽅法——>属性是静态⾏为描写叙述,⽅法是动态⾏为的描写叙述——>正确表达类与类之间的关系以下是我对机房收费系统设计的类图,理解的不是⾮常清楚,可定存在诸多问题,希望⼤家积极指正。
以上是我看完UML之后对⽤例图和类图的理解,感觉理解的不是⾮常清楚,若有什么问题希望⼤家积极指正。
UML类图说明1:⽰例这是⼀个使⽤UML表⽰的类图的结构,通过箭头,菱形,实线以及虚线来代表⼀些类之间的关系,后⾯将按照上⾯的例⼦⼀⼀介绍说明。
上图中,abstract 车是⼀个抽象类。
⼩汽车和⾃⾏车是继承了车的抽象类,实现了抽象类的⼀些抽象⽅法,他们之间是实现关系。
SUV继承⼩汽车,SUV和⼩汽车之间是泛化关系!轮胎,发动机和⼩汽车之间是组合关系。
学⽣和班级之间是聚会关系。
学⽣和⾝份证之间是关联关系。
学⽣和⾃⾏车之间是依赖关系。
2:具体分析2.1:泛化关系上⾯UML图中,SUV和⼩汽车之间是⼀种泛化关系,SUV is a ⼩汽车,泛化关系⽤⼀种带有空⼼的箭头来表⽰。
在代码中表现的⽅式就是继承⾮抽象类的⽅式。
2.2:实现关系上⾯UML图中,⼩汽车,⾃⾏车与抽象类车,之间是⼀种实现关系。
重要的是要继承抽象类,或者实现接⼝这种关系是实现关系,在UML类图中使⽤虚线带箭头。
在代码中表现的⽅式就是继承抽象类。
2.3:聚合关系上⾯UML图中,学⽣和班级之间是⼀种聚合关系,表⽰班级有学⽣聚合⽽来,采⽤实线空⼼菱形箭头表⽰。
与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在;例如,班级撤销了,学⽣不会消失,他们依然存在。
2.4:组合关系上⾯UML图中,轮胎,发动机和⼩汽车之间是⼀种组合关系,采⽤实线实⼼菱形箭头表⽰。
与聚合关系不同的是,整体和部分是强依赖的,即使整体不存在了,组合部分也不存在;例如,⼩汽车没有,⾃然轮胎和发动起,也不会存在了。
2.5:关联关系上⾯UML图中,学⽣和⾝份证是⼀种关联关系。
关联关系是⽤⼀条直线表⽰的;它描述不同类的对象之间的结构关系;它是⼀种静态关系,通常与运⾏状态⽆关,⼀般由常识等因素决定的;它⼀般⽤来定义对象之间静态的、天然的结构;所以,关联关系是⼀种“强关联”的关系;⽐如,乘车⼈和车票之间就是⼀种关联关系;学⽣和学校就是⼀种关联关系;2.6:依赖关系上⾯UML图中,学⽣和⾃⾏车之间是⼀种依赖关系。
一.用例图用例模型是把应满足用户需求的基本功能(集) 聚合起来表示的强大工具。
用例模型的基本组成部件是用例角色和系统。
引入用例的主要目的是:确定系统应具备哪些功能这些功能是否满足系统的需求开发者与用户协商达成共识的东西为系统的功能提供清晰一致的描述,以便为后续的开发工作打下良好的交流基础,方便开发人员传递需求的功能为系统验证工作打下基础通过验证最终实现的系统能够执行的功能是否与最初需求的功能相一致保证系统的实用性从需求的功能用例出发提供跟踪进入系统中具体实现的类和方法检查其是否正确的能力特别是为复杂系统建模时常用用例模型构造系统的简化版本(也就是精化系统的变化和扩展能力使系统不要过于复杂)然后利用该用例模型跟踪对系统的设计和实现有影响的用例简化版本构造正确之后通过扩展完成复杂系统的建模图示用例图时既要画出三种模型元素,同时还要画出元素之间的各种关系(通用化关联依赖)用例代表的是一个完整的功能。
如何发现用例实际上从识别角色起发现用例的过程就已经已开始了对于已识别的角色通过询问下列问题就可发现用例●角色需要从系统中获得哪种功能角色需要做什么●角色需要读取产生删除修改或存储系统中的某种信息吗●系统中发生的事件需要通知角色吗或者角色需要通知系统某件事吗这些事件功能能干些什么●如果用系统的新功能处理角色的日常工作是简单化了还是提高了工作效率●还有一些与当前角色可能无关的问题也能帮助建模者发现用例例如●系统需要的输入/输出是什么信息这些输入/输出信息从哪儿来到哪儿去●系统当前的这种实现方法要解决的问题是什么也许是用自动系统代替手工操作UML 中的用例UML 中的用例用椭圆形表示用例的名字写在椭圆的内部或下方用例位于系统边界的内部角色与用例之间的关联关系或通信关联关系用一条直线表示用例和角色之间有连接关系用例和角色之间的关系属于关联association 又称作通信关联communication association,这种关联表明哪种角色能与该用例通信,关联关系是双向的一对一关系,即角色可以与用例通信,用例也可以与角色通信。
UML类图符号各种关系说明以及举例UML中描述对象和类之间相互关系的⽅式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。
依赖(Dependency):元素A的变化会影响元素B,但反之不成⽴,那么B和A的关系是依赖关系,B依赖A;类属关系和实现关系在语义上讲也是依赖关系,但由于其有更特殊的⽤途,所以被单独描述。
uml中⽤带箭头的虚线表⽰Dependency关系,箭头指向被依赖元素。
泛化(Generalization):通常所说的继承(特殊个体 is kind of ⼀般个体)关系,不必多解释了。
uml中⽤带空⼼箭头的实线线表⽰Generalization关系,箭头指向⼀般个体。
实现(Realize):元素A定义⼀个约定,元素B实现这个约定,则B和A的关系是Realize,B realize A。
这个关系最常⽤于接⼝。
uml 中⽤空⼼箭头和虚线表⽰Realize关系,箭头指向定义约定的元素。
关联(Association):元素间的结构化关系,是⼀种弱关系,被关联的元素间通常可以被独⽴的考虑。
uml中⽤实线表⽰Association 关系,箭头指向被依赖元素。
聚合(Aggregation):关联关系的⼀种特例,表⽰部分和整体(整体 has a 部分)的关系。
uml中⽤带空⼼菱形头的实线表⽰Aggregation关系,菱形头指向整体。
组合(Composition):组合是聚合关系的变种,表⽰元素间更强的组合关系。
如果是组合关系,如果整体被破坏则个体⼀定会被破坏,⽽聚合的个体则可能是被多个整体所共享的,不⼀定会随着某个整体的破坏⽽被破坏。
uml中⽤带实⼼菱形头的实线表⽰Composition关系,菱形头指向整体。
1.1.1 依赖(Dependency):虚线箭头表⽰1、依赖关系也是类与类之间的联结2、依赖总是单向的。
UML各种图总结-精华UML(UnifiedModelingLanguage)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
下面将对UML的九种图+包图的基本概念进行介绍以及各个图的使用场景。
一、基本概念如下图所示,UML图分为用例视图、设计视图、进程视图、实现视图和拓扑视图,又可以静动分为静态视图和动态视图。
静态图分为:用例图,类图,对象图,包图,构件图,部署图。
动态图分为:状态图,活动图,协作图,序列图。
1、用例图(UseCaseDiagrams):用例图主要回答了两个问题:1、是谁用软件。
2、软件的功能。
从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。
2、类图(ClassDiagrams):用户根据用例图抽象成类,描述类的内部结构和类与类之间的关系,是一种静态结构图。
在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
各种关系的强弱顺序:泛化=实现>组合>聚合>关联>依赖2.1.泛化【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何继承父类的所有特征和行为。
例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
2.2.实现【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现。
2.3.关联【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量2.4.聚合【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。
UML类图画法及其之间的几种关系
最近做重构项目,需要画一下类图,发现类图的画法及其之间的几种关系已经淡忘了很多,所以整理总结一下,有问题的地方大家可以一起讨论下。
文章目录如下:
类图画法
类之间的几种关系:泛化(Generalization)、实现(Realization)、关联(Association)(又分一般关联、聚合(Aggregation)、组合(Composition))、依赖(Dependency)
一、类图画法
1、类图的概念
A、显示出类、接口以及它们之间的静态结构和关系
B、用于描述系统的结构化设计
2、类图的元素
类、接口、协作、关系,我们只简单介绍一下这四种元素。
同其他的图一样,类图也可以包含注解和限制。
类图中也可以包含包和子系统,这两者用来将元素分组。
有时候你也可以将类的实例放到类图中。
3、类
A、类是对一组具有相同属性、操作、关系和语义的对象的抽象,它是面向对象系统
组织结构的核心,包括名称部分(Name)、属性部分(Attribute)和操作部分(Operation),见下图。
B、类属性的语法为:
[可见性] 属性名[:类型] [=初始值] [{属性字符串}]
可见性:公有(Public)“+”、私有(Private)“-”、受保护(Protected)“#”
类操作的语法为:
[可见性] 操作名[(参数表)] [:返回类型] [{属性字符串}]
可见性:公有(Public)“+”、私有(Private)“-”、受保护(Protected)“#”、
包内公有(Package)“~”
参数表:
定义方式:“名称:类型”;若存在多个参数,将各个参数用逗号隔开;
参数可以具有默认值;
属性字符串:
在操作的定义中加入一些除了预定义元素之外的信息。
4、接口
在没有给出对象的实现和状态的情况下对对象行为的描述。
一个类可以实现一个或多个接口。
使用两层矩形框表示,与类图的区别主要是顶端有<<interface>>显示:
也可以用一个空心圆表示:
5、协作
协作是指一些类、接口和其他的元素一起工作提供一些合作的行为,这些行为不是简
单地将元素加能得到的。
例如:当你为一个分布式的系统中的事务处理过程建模型时,你不可能只通过一个类来明白事务是怎样进行的,事实上这个过程的执行涉及到一系
列的类的协同工作。
使用类图来可视化这些类和他们的关系。
6、关系
这篇文章的重点,详见第二部分。
二、类之间的几种关系
1、泛化(Generalization)
A、是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特
征和行为,描述了一种“is a kind of”的关系。
例如:老虎是动物的一种,即有老虎的
特性也有动物的共性。
B、用带空心箭头的实线表示,箭头指向父类,如下图:
2、实现(Realization)
A、是一种类与接口的关系,表示类是接口所有特征和行为的实现。
B、用带空心箭头的虚线表示,箭头指向接口,如下图:
3、关联(Association)
A、一般关联
a、关联关系是类与类之间的联结,它使一个类知道另一个类的属性和方法,
指明了事物的对象之间的联系,如:老师与学生、丈夫与妻子。
关联可以是双向
的,也可以是单向的,还有自身关联。
b、用带普通箭头的实心线表示。
双向的关联可以有两个箭头或者没有箭头,
单向的关联有一个箭头,如下图:
B、聚合(Aggregation)
a、它是整体与部分(整体has a 部分)的关系,且部分可以离开整体而单独
存在,如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系,关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
b、用带空心菱形的实线表示,菱形指向整体,如下图:
C、组合(Composition)
a、它是整体与部分的关系,但部分不能离开整体而单独存在。
如公司和部门
是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
b、用带实心菱形的实线表示,菱形指向整体,如下图:
4、依赖(Dependency)
A、元素A的变化会影响元素B,那么B和A的关系是依赖关系,B依赖A。
要避
免双向依赖,一般来说,不应该存在双向依赖。
关联、实现、泛化都是依赖关系。
B、用带箭头的虚线表示,箭头指向被依赖元素。
5、总结
各种关系的强弱顺序如下:
泛化= 实现>组合>聚合>关联>依赖
下面这张UML图,比较形象地展现了各种类图关系:。