引言
类图是用于描述系统的静态结构视图,主要表述类和接口之间关系描述;类图可以说是UML中比较重要的视图之一,是uml结构视图的基点。其中类图包含了类、协作、接口、信号、数据类型、枚举类型以及依赖关系、关联关系(单向关联、双向关联)、实现关系、泛化关系以及依赖关系的衍生使用关系和关联关系的衍生组合关系和聚合关系;今天小编会一一梳理各个元素的属性数据以及可连接关系。这些总结均是查看官方UML2.5以及相应uml学习书籍,如有疑问,也欢迎各位批评指正
UML元素
1、类
类(class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同操作、属性、关系的对象集合的总称。在软件运行时,类被实例化成对象(object),对象对应某个具体的事物,是类的实例(instance)。
(还记得上边讲述过的UML二分法吗-抽象与实例的二分,今天小编也会整理UML或者软件编程中对于抽象的定义以及实例的定义;可以理解为类是抽象事物)
类可以配置的数据有属性和操作还可以接收信号的传递;以及可以给类本身或者类的任一属性或者任一操作配置约束,去满足业务不同的场景。
1.1、属性
类的属性表达式为【可见性】【属性名称】”:“【参数类型】"["【多重性】"]"”=“【默认值】
(符号【仅用于分类隔开,不属于表达式;符号“表示其里边元素固定需保留)
可见性分为public(代表类的子类以及类外部元素均可以访问)、private(代表仅类本身可以访问)、protected(类与子类均可以访问)、pckaged(代表该包下的元素可以访问)。
参数类型可以分为基础类型如string、boolean、byte等还可以分为用户自己创建的类、数据类型、枚举类型进行引用。
多重性默认为1,为1时可以不展示出;可以表示为1到多、或者1到有限值、或者无限。
默认值一般为选择的参数类型的默认设置,比如布尔可选择ture或false,但是从软件代码工程上考虑来说一般默认为false会更好一点。但是一些参数类型可能没有默认,因此,这不是一个必填项。
在uml中会有作用域的概念,其主要分为类作用域和对象作用域;对应于软件代码中则展示为是否是static。类作用域代表所有实例共用这个值,对象作用域则代表所有对象拥有其特定值。
uml中支持对任何元素及其元素的属性操作进行自定义约束,因为类的属性也可以去增添相应的约束条件。例如一般常见的针对于属性的约束有changeable、ordered(针对于多重性时)、addonly、frozen等;约束的符号为{},所以在UML中如果看到{},则表示里边的文本或者表达式为该元素需执行的约束条件
1.2、操作
类的操作表达式为【可见性】【操作名称】【参数列表】【返回类型】
参数列表包括参数名称、参数类型、参数方向;参数类型在上边属性中有所提过,这边就不再赘述。参数方向分为in、out、inout,代表数据的流入、流出
返回类型代表调用操作值的返回值,允许没有返回,但是没有返回类型时应默认展示为void
1.3、接收
类可以接收其他实例传递的信号,默认展示为<<signal>>信号名称+信号参数
2、数据类型
数据类型包含基础类型、枚举类型以及用户自定义的数据类型;数据类型用以描述缺少身份的简单数据值。数据类型通过值传递,并且是不可变的实体。数据类型有属性和操作(操作不太常见)。操作不改变数据值,但是可以把数据值作为结果返回
3、枚举类型
枚举类型属于数据类型的一种,是用户自定义的数据类型,它包括名称和枚举字面名称的有序序列。每个字面名称是枚举范围内的一个值——是数据类型的一个预定义的实例。因此,枚举类型有枚举值的属性配置
4、信号
信号是实例之间异步通信激发的描述。要用于行为图中,所有的信息通知值来进行传递;信号可以配置属性和操作(但是所有信号有且仅有一个默认操作,send)
5、接口
接口声明一组操作的实现,通过声明一个接口,可以陈述一个抽象所需要的与其实现无关的行为。接口可以配置操作,接口无属性。
6、端口
在类图中仅作用于类上,端口是连接点,用于描述类与类之间的交互和通信。可以通过端口与其他类建立连接,实现类之间的消息传递和数据交换。端口仅代表数据之间传递,无需配置属性和操作。
7、依赖关系
依赖关系代表被依赖端元素变化则会影响依赖端元素,依赖关系具有时效性,代表具体一段时间内会产生依赖关系;两个类之间依赖关系可以表示为类A的操作中返回类型会有类B或者类A操作的参数类型会有类B
8、关联关系
关联关系表示一组链的组合,链是对象之间连接的关系线;可以理解为链是关联的实例。关联关系表示该抽象元素的某个实例间可能存在链接;因此与依赖关系的区别点在于生命周期内存在;关联关系可以分为单向关联和双向关联,具体区别如下:元素间连接了单向关联关系可以表示为类A→类B,则类A的属性类型中有类B即表示为[+属性名称:类B];如果类A和类B是双向关联,则表示为类A的属性类型中有类B;类B的属性类型中有类A,图示如下
(小编查询了各类书籍都未很明确定义关系线连接产生的变化,只能从代码角度分析,因此对于这段定论有所疑问欢迎各位探讨哦)
关联关系可以衍生为聚合关系和组合关系,其代表整体与部分的含义;其中组合关系代表生命周期相同,聚合关系代表生命周期不同
9、泛化关系
泛化关系代表同类型之间元素的元素连接,子类可以继承父类的所有属性及其操作并且可以在重新定义新的操作。因此子类可以实现父类的接口,代替父类。举例如下,父类:运动员;子类可以为游泳运动员或者跑步运动员等;并且对于运动员父类的属性操作,子类都可以继承过来,只不过与本身所新建或者重写的属性操作区别形式会显示为继承属性、继承操作等
10、实现关系
实现关系一般为类实现了接口的生命,或者用例与协作,组件和接口之间应用。
本篇还会持续新增哪些元素之间能连接哪些元素,关注小编,一起学习uml,同时,如若各位有更多好的建议,也欢迎私信评论哦~