概述
定义
类图(Class Diagram)是用于显示一组类、接口以及它们之间关系的图。
类图用于对系统中的各种概念进行建模,并描绘出它们之间的关系,主要通过系统中的类以及类之间的关系来描述系统的静态结构
。
主要模型元素:
- 类、
- 接口
- 关系(依赖、泛化、关联和实现)
- 其他:包、注解等。
注意
类图是最复杂的图
类图组成
类
类是对一组具有相同属性、操作、关系和语义的事物的抽象。
在UML中,类通常表示为一个三栏矩形,顶部显示类名,中间显示类的属性,底部显示类的操作。
名称(Name)
每个类都必须有一个区别于其他类的名称,类名部分不可省略。
名称的表示方法:
简单名:只是一个单独的名称,例如Student
路径名(限定名):在类名前面加上包的名称,例如java::awt::Rectangle和Office::Printer
类的命名规范要求:由字母、数字、下划线、汉字组成的惟一的字符串。
类的命名建议:
在实际应用中,采用大驼峰式(Upper Camel-Case)命名法:大写字母开头、大小写混合,每个单词首字母大写。
不能使用特殊符号,尽可能避免使用汉字和缩写形式。
尽可能使用业务领域中的术语,并尽可能明确、简短、无歧义,以便于开发人员与用户之间的相互理解和交流。
一般而言,类的名字是名词。
避免使用抽象、无意义的名词。
正体字说明类是可被实例化的,斜体字说明类为抽象类。
属性(Attribute)
属性是已被命名的类的静态特性,它描述了该特性的实例可以取值的范围。
属性是类的对象可能包含的数据或状态的抽象。
属性的表示语法:
[可见性] 属性名 [:类型] [多重性] [=初始值] [{特性串}]
可见性
描述该属性是否能被其他类引用。
操作(Operation)
操作是类的动态特性或行为特征,它是对一个对象所做的事情的抽象,并由该类的所有对象共享。
类的操作的表示语法:
[可见性] 操作名称 ( [参数列表] ) [:返回类型] [{特性串}]
返回类型
任意有效数据类型(系统类型、自定义类型、void)
注意: 括号不可省略
特性串
指定关于操作的特殊性质或约束,要放在{ }中。
UML定义了几种可以用于操作的特性:abstract(抽象)、static (静态) 、leaf (叶子) 、isQuery (查询) 、 sequence (顺序/返回多值且构成有序包) 、 ordered (返回多值且有序) 、 unique (返回多值且无重复)等;也可以自定义特性。
类的特殊类型(Type)
普通类是一个完善的功能类,可以直接产生实例化对象。除了常见的的普通类,还有一些特殊的类。
抽象类
模板类
关联类
抽象类
缺乏实现的操作称为抽象操作,包含抽象操作的类是抽象类。在UML中,将类名和操作名用斜体修饰来表示。
抽象类是不完整的,不能被直接实例化,不能创建一个属于抽象类的对象。
模板类
类的特殊类型—模板类(Parameterized Class)
模板类是指带有一个或多个未绑定的形式参数的类。
在编译时把模板参数绑定到不同的数据类型,从而产生不同的类。
模板可以根据占位符或参数来定义类,而不用说明属性、方法返回值和方法参数的实际类型。
使用带有<<bind>>
构造型的依赖关系,通过实际值代替占位符或参数即可创建新类。
对应概念:C++中的模板与Java中的泛型。
关联类
在应用当中,如果发现两个类之间具有多对多的关系,并且有些属性不属于关联两端任何一个类,则可以创建一个关联类。
具有类的特性的关联关系,称为关联类。
通过关联类可以进一步描述关联的属性、操作及其他信息。
实际上,关联类既是关联又是类,不仅象关联那样连接两个类,而且可以拥有类的特性——属性和操作。
关联类在UML中被表示为一个类符号,并通过一条虚线连接到关联路径。虚线上没有修饰内容。
类的构造型(StereoType)
分析类
<<boundary>>、<<entity>>、<<control>>
构造型分别表示三种分析类——边界类、实体类、控制类。
分析类代表系统的原型类,业务需求通过分析类逻辑化,形成概念模型。
分析类是跨越需求到设计实现的桥梁,在从业务需求向系统设计的转化过程中起到重要作用。
边界(Boundary)类
边界类位于系统与外界的交界处,承担系统与外界的信息交互功能。
如窗体、对话框、报表、与外部设备或系统交互的类等。
边界类可以通过用例确定,因为参与者必须通过边界类参与用例。
实体(Entity)类
实体类描述要保存到持久存储体中的信息。
类及其属性最终可能映射成数据库中的表以及字段。
实体类可以从现实中存在的客观事物,以及需要持久存放的信息两方面来发现。
接口
接口(Interface)是一个被命名的一组操作的集合,用于描述类或组件的一个服务。
接口主要定义操作签名,不包含属性和操作实现;实现留给实现该接口的类、构件或子系统去完成。
接口的所有内容都是公有的
。
使用接口是为了将规格说明和实现相分离。
分类
接口可分为供给接口和需求接口,分别表示为小圆和半圆;也可以表示为带有<<interface>>
构造型的类符号。
接口名称建议以大写字母“I”作前缀,与类相似,也有简单名和路径名两种形式。
接口经常用于对软件构件(Component)的接缝来建模。
关系
类与类之间的关系最常见,通常有3种:
- 关联(Association)
- 泛化(Generalization)
- 依赖(Dependency)
类与接口之间的关系,一般有两种: - 实现(Realization)-供给接口
- 依赖(Dependency)-需求接口
接口之间可以有关联和泛化关系,但较少用。
关联(Association)关系
定义
关联关系表示对象之间的结构关系,指出了一个事物的对象与另一个事物的对象之间的语义上的连接。
关联可以分为单向关联、双向关联。
关联关系靠近类的连接点被称为关联端,有名称、角色、可见性、多重性等特性。
种类
一元关联(自身关联)
一个类与自身的关联
二元关联
两个类之间的关联,最普通、最常用。
N元关联
是在3个或3个以上类之间的关联,用菱形向外引出关联路径。
不建议使用N元关联,大多数N元关联经过细致分析,都可转成二元关联 。
Rose、SU等工具不能直接表示N元关联;EA可以表示。
特性
除了连接类元素的关联路径之外,关联还有名称、角色、多重性、导航性、限定符等可选的特性。
名称
角色(role)
多重性(multiplicity)
构造型(stereotype)
导航性(navigation)
限定符(qualifier)
约束(constraint)
名称
一般使用一个动词或动词短语来命名关联,还可以在关联上标识阅读方向指示符,以消除阅读的歧义。
角色
是指在关联关系中,一个类通过关联对另外一个类所表现出来的职责。
如果在关联上没有标出角色名,则隐含的用类名作为角色名。
多重性
是指在关联关系中,一个类的一个实例与另一个类的多个实例相关。
多重性表示形式:minimum..maximum
分类
1:1 和 1:n 和 m:n
构造型
在关联关系中,也可以根据具体的语义设置一些构造型。
导航性
导航性根据方向不同,分为单向关联和双向关联。
限定符(qualifier)
限定符定义了被参考对象的一个属性,并可以将该属性作为直接访问被参考对象的关键字。
当需要使用某些信息作为关键字,来识别对象集合中的一个唯一对象时可以使用限定符,使用限定符的关联被称为受限关联。
限定符会影响关联的多重性。
解决查找问题
泛化(继承)关系
含义
继承
指一个类继承另一个类的属性和操作;
泛化
泛化就是指一般化的过程。
箭头:子类指向父类
例如:
可以描述为:
- Horse类继承Mammal类
- Mammal类泛化Horse类
一般描述的类被称作父类,特殊描述的类被称作子类。
泛化关系描述的是“is a kind of”的关系。
接口之间也可以存在泛化关系(子接口与父接口)。
继承的识别
泛化关系特点:
特殊事物完全符合一般事物;
在一般事物出现的地方,能够替换成特殊事物;
通过从特殊事物泛化或从一般事物特化可以创建泛化层次。
泛化可能跨越多个层次。一个子类的父类也可以是另一个父类的子类。
用途
自底向上的实例替换。可以使得子类的实例用于任何父类被声明使用的地方,实现多态。
尽管每个子类的
实现方法不同,
但外界调用方式
完全一样。
自顶向下的成员继承。可以让子类共享父类的属性和操作,实现继承。
public、protected属性和操作可被继承。
继承的方式有两种:单继承( C#、Java )和多继承(C++)。
小结
依赖和实现
类与接口可构成(依赖和实现)关系。
依赖关系
依赖表示两个类之间或类与接口之间的使用关系。
类A使用类B的信息和服务,并且提供者类B的变化可能会影响到客户类A。
分类
- 客户类的操作使用提供者类的对象
- 客户类的操作调用提供者类的操作
- 客户类的操作需要提供者类的参数
- 客户类的操作返回提供者类的对象
B类依赖于A类的常见原因:
- A类是B类某数据成员的类型
- A类是B类某方法中的局部变量或参数的类型
- A类向B类发送消息,从而影响B类发生变化
表示
public class Train{
public void move(){}
}
public class Person{
public void move(Train train){
train.move();
}
}
类图表示为
依赖者-->被依赖者
实现关系
实现关系用来表示规格说明与实现之间的关系。
在类图中,实现关系主要用于接口与实现该接口的类之间。
一个类可以实现多个接口,一个接口也可以被多个类实现。
实现关系的两种表示法:
-
当接口以带构造型的类符号表示时,用虚线三角箭头表示。
-
当接口元素以小圆圈方式表示时,用实线表示。
约束
小结
聚合和组合
关联关系有两种非常重要的特殊形式:
聚合(Aggregation)关系
组合(Composition)关系
用于表示整体与部分的关系
聚合关系
聚合(聚集)描述的是部分和整体关系的关联,描述了“has a”的关系。
部分可独立于整体而存在,是松散
的关联关系。
聚合(聚集)就像计算机和它的外围设备:
计算机只是很松散地和外部设备关联;
外围设备可有可无;
外围设备可以被其它计算机所共享。
表示
组合关系
组合(组成)关系是更强形式的聚合,描述了“contains a”的关系。
整体与部分一般具有同样的生存期,部分完全依赖于整体。
整体唯一地负责处理它的部分,包括创建和销毁。
组合(组成)就像是树和树叶:
一片树叶只能被一棵树所拥有;
一片树叶不能由几棵树所共享;
当树死去时,它的树叶也随之死去。
要求
不允许部分类游离于整体之外。
表示
异同点:
都是描述部分与整体关系的特殊关联。
聚合松散,组合紧密。
一个部分事物对象可以属于多个聚合对象,但一个部分事物对象仅能属于一个组合对象。
聚合的对象生命周期可以不同,但组合对象则是同存同亡。
标签:关系,泛化,对象,类图,接口,关联,操作,属性 来源: https://www.cnblogs.com/kingwz/p/16649371.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。