uml知识点

发布时间 2023-12-07 19:51:20作者: 伽澄

UML类图是一种结构图,用于描述一个系统的静态结构。类图以反映类结构和类之间的关系为目的,用以描述软件系统的结构,是一种静态建模方法。类图中的类,与面向对象语言中的类的概念是对应的。

1、类结构

在类的UML图中,使用长方形描述一个类的主要构成,长方形垂直地分为三层,以此放置类的名称、属性和方法。

其中,一般类的类名用正常字体粗体表示,如上图:抽象类名用斜体字粗体,如User ;接口则需在上方加上<<interface>>,

属性和方法都需要标注可见性符号,+代表public#代表protected-代表private.

另外,还可以用冒号:表明属性的类型和方法的返回类型,如+name:string +getName():string。当然,类型说明并非必须。

2.类关系

类与类之间的关系主要有六种:继承、实现、组合、聚合、关联和依赖,这六种关系的箭头表示如下,

 

接着我们来了解类关系的具体内容。

3、六种类关系

六种类关系中,组合、聚合、关联这三种类关系的结构代码一样,都是用属性来保存另一个类的引用,所以要通过内容见的关系来区别。

3.1 继承

继承关系也称泛化关系(Generalization),用于描述父类与子类之间的关系。父类又称作基类,子类又称作派生类。

继承关系中,子类继承父类所有功能,父类所具有的非私有属性、方法,子类应该都有。子类中除了与父类一致的信息以外,还包括额外的信息。

例如:公交车、出租车和小轿车都是汽车,他们都有名称,并且都能在路上行驶。

 

3.2 实现

实现关系(Implementation),主要用来规定接口和实现类的关系。

接口(包括抽象类)是方法的集合,在实现关系中,类实现了接口,类中的方法实现了接口声明的所有方法。

例如,汽车和轮船都是交通工具,而交通工具知识一个可移动工具的抽象概念,船和车实现了具体移动功能。

 

3.3 组合关系

组合关系(Composition):整体与部分的关系,但是整体与部分不可以分开。

组合关系表示类之间整体与部分的关系,整体和部分有一致的生存期。一旦整体对象不存在,部分对象也将不存在,是同生共死的关系。

例如:人由头部和身体组成,两者不可分割,共同存在。

 

3.4 聚合关系

聚合关系(Aggregation):整体和部分的关系,整体与部分可以分开。

聚合关系也表示类之间整体与部分的关系,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。

例如,公交车司机和工衣、工帽是整体与部分的关系,但是可以分开,工衣、工帽可以穿在别的司机身上,公交司机也可以穿别的工衣、工帽。

 

3.5 关联关系

关联关系(Association):是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等等。在UML类图中,用实线连接有关联关系的对象所对应的类,在使用Java、c#和C++等编程语言实现关联关系时,通常将一个类的对象作为另一个类的成员变量。在使用类图表示关联关系时可以在关联线上标注角色名,一般使用一个表示两者之间关系的动词或者名词表示角色名(有时该名词为实例对象名),关系的两端代表两种不同的角色,因此在一个关联关系中可以包含两个角色名,角色名不是必须的,可以根据需要增加,其目的是使类之间的关系更加明确。

关联关系有四种:双向关联、单向关联、自关联、多重数关联。

  • 双向关联 , 在默认情况下,关联是双向的。例如:顾客(Customer)购买商品(Product),反之,卖出的商品总有某个顾客与之相关联。

     

  • 单向关联 类的关联关系也可以是单向的,单向关联用带箭头的实线表示。例如:顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关联关系。

     

  • 自关联 在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。例如:一个节点类(Node)的成员又是节点Node类型的对象。

     

  • 多重性关联 多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示。

    对象之间可以存在多种多重性关联关系,常见的多重性表示方式如下:

     

例如:一个界面(Form)可以拥有零个活多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联,如图

 

3.6 依赖关系

依赖关系(Dependence):假设A类的变化引起了B类的变化,则说明B类依赖于A类。

大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。

依赖关系是一种“使用”关系,特定事物的改变可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。

例如:汽车依赖汽油,如果没有汽油,汽车将无法行驶。

 

4 总结

这六种类关系中,组合、聚合和关联的代码结构一样,可以从关系的强弱来理解,各类关系从强到弱依次是:继承-》实现-〉组合-》聚合-〉关联-》依赖。如下是完整的一张UML关系图

六种类图

  1. 类图(Class Diagram): 类图是 UML 中最常用的图之一,用于描述系统中的类、对象、属性和方法之间的关系。类图展示了系统的静态结构,包括类的名称、属性、方法以及它们之间的关联、继承、依赖等。在类图中,一个类通常由一个矩形框表示,其中包含类的名称、属性和方法。关联关系使用直线连接两个类,表示它们之间的关联。继承关系使用带有箭头的直线表示一个类从另一个类继承。依赖关系使用虚线箭头表示一个类依赖于另一个类。

  2. 对象图(Object Diagram): 对象图是类图的实例化表现,用于描述在特定时间点上系统中对象的状态和相互之间的关系。对象图中的对象由类图中的类实例化得到,对象之间的关系和属性值也可以在对象图中表示。对象图通过展示对象之间的连接和状态来帮助我们理解系统的实际运行情况。

  3. 用例图(Use Case Diagram): 用例图用于描述系统的功能需求,展示了系统与外部用户(称为参与者)之间的交互关系。用例图由参与者、用例和它们之间的关系组成。参与者表示与系统进行交互的实体,用例表示系统的功能或业务场景。用例图通过展示参与者和用例之间的关系来描述系统的功能需求和用户角色。

  4. 时序图(Sequence Diagram): 时序图描述了系统中对象之间的交互顺序和时序关系。通过时间轴和消息流来展示对象之间的消息传递和响应。时序图可以很好地描述对象之间的时序关系,并帮助我们理解系统的交互过程。时序图中的对象由类图中的类实例化得到,消息通过箭头表示。

  5. 活动图(Activity Diagram): 活动图用于描述系统中的业务流程或操作流程。它展示了不同活动之间的顺序和条件关系,以及活动的并发与分支。活动图使用矩形框表示活动,通过箭头表示活动之间的转移关系。活动图可以帮助我们理解系统的流程和操作规则,从而更好地进行系统设计和优化。

  6. 状态图(State Diagram): 状态图描述了对象在其生命周期内的各种状态以及状态之间的转换条件。状态图由状态、转换和事件组成,能够清晰地表示对象在不同状态下的行为和状态转换规则。状态图使用圆角矩形表示状态,通过箭头表示状态之间的转换条件。状态图可以帮助我们理解对象的状态变化和行为规则。