UML图是产品必修课之一,可以帮助程序员梳理业务模型和业务流程,帮助程序员快速理解业务关系。一般至少需要掌握一种结构型UML图和一种行为型UML图。 在软件领域,影响力最强的建模工具当属统一建模语言(UnifiedModeling Language,UML)了。1997年,对象管理组织(Object Management Group,OMG)发布了UML。UML的目标之一是为开发团队提供标准通用的设计语言来开 发和构建计算机应用。UML提出了一套IT专业人员期待多年的统一的标准建模符号。通过使用UML,用户能够阅读和交流系统架构和设计 规划,就像建筑工人使用的建筑设计图一样。
UML拥有一种定义良好的、富有表现力的表示法,这对软件开发过程非常重要。标准的表示法让分析师或开发者能够描述一个场景、阐明一种架构,并准确地将这些信息告诉别人。 总的来说,我们构建的UML模型将以一定的保真度和角度展现要 构建的真实系统。但是复杂软件系统面临的问题是多样的,在不同的软件研发阶段,针对不同的使用目的,我们需要不同的模型图,每一种模 型图都提供了系统的某一种视图。 UML分为结构型和行为型建模图形,具体分类如图所示。
关于UML的资料和书籍已有很多,推荐阅读Grady Booch等人 的《面向对象分析与设计》和Larman的《UML和模式应用》这两本书。 下面详细介绍一下类图,主要有两个原因 (1)首先,在面向对象设计中,类图占有非常重要的地位。类图 仅可以表示类之间的关系,其表示法还可以表达领域概念之间的关系,非常适合进行领域建模。 (2)其次,在面试和工作的过程中很多人并不熟悉UML类图,要么不会画类图,要么用错表示法。
类(Class)封装了数据和行为,是面向对象的重要组成部分,是具有相同属性、操作、关系的对象集合的总称。在系统中,每个类都具有一定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。 类图用于描述类以及它们的相互关系。在分析时,我们利用类图来说明实体共同的角色和责任,这些实体提供了系统的行为。在设计时,我们利用类图来记录类的结构,这些类构成了系统的架构。在类图中,两个基本元素是类,以及类之间的关系。 类的UML表示法 在UML中,类由包含类名、属性和操作3部分组成,这3部分使用分隔线分隔的矩形表示。例如,定义一个Employee类,包含属性 name、age和email,以及操作getName(),在UML类图中,该类如图所示。 在UML类图中,类一般由以下3个部分组成: (1) 类名(Name):每个类都必须有一个名字,类名是一个字符串。 (2) 类的属性(Attributes):属性指类的性质,即类的成员变量。一个类可以有任意多个属性,也可以没有属性。 (3) 类的操作(Operations):操作是类的任意一个实例对象都可以使用的行为,是类的成员方法。 类图中属性和操作的格式有规格说明。属性规格说明格式是“可见 性 属性名称:类型”,比如“- name : String”。操作规格说明格式是“可见 性 操作名称(参数名称:类型):返回值类型”,比如“+ getName() : String”。 其中,可见性、名称和类型的定义分别如下。 可见性:表示该属性对于类外的元素而言是否可见,包括公有 (public)、私有(private)和受保护(protected),在类图中分别 用符号+、-和#表示。 名称:按照惯例,类的名称以大写字母开头,单词之间使用驼峰隔 开。属性和操作的名称以小写字母开头,后续单词使用驼峰。 类型:表示属性的数据类型,可以是基本数据类型,也可以是用户 自定义类型。 类和类之间的关系主要有关联关系、依赖关系、泛化关系。接下来,我们重点来看这些关系的UML表示法。
类的关联关系 关联(Association)关系是一种结构化关系,用于表示一类对象与 另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等。 关联关系是类与类之间常用的一种关系。在UML类图中,用实线连接有关联关系的对象所对应的类。在代码实现上,通常将一个类的对象作 为另一个类的成员变量。 在使用类图表示关联关系时,可以在关联线上标注角色名,一般使 用一个表示两者之间关系的动词或者名词来表示角色名(有时该名词为 实例对象名),关系的两端代表两种不同的角色。因此,在一个关联关 系中可以包含两个角色名,角色名并不是必需的,可以根据需要增加, 其目的是使类之间的关系更加明确。 在UML中,关联关系通常又包含以下6种 双向关联、限定关联、单向关联、自关联、聚合关系、组合关系。 今天先将前三种关系:
1.双向关联 在默认情况下,关联是双向的。例如,一位教师(Teacher)可以 教授一或多门课程(Course),一门课程只能被一位教师教授,因此 Teacher类和Course类之间具有双向关联关系,如图所示。 上图三角形标注表示关联关系的阅读方向,是可选的。直线两边的数字代表关联的重数性(Multiplicity),也是可选的,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或数字范围表示。 对象之间可以存在多种多重性关联的关系,常见的多重性表示方式 如下表所示。 2.限定关联 限定关联(Qualified association)具有限定符(Qualifier),限定符 的作用类似HashMap中的键(key),用于从一个集合中选择一个或多个对象。例如,一个用户(User)可以有多个角色(Role),但是在一个场景(Scenario)下,它只会是一种角色。 对于限定关联,有一点需要注意,即多重性的变化。例如,比较图a和图b,限定减少了在关联目标端的多重性,通常是由多变为一,因为限定关联通常是从较大集合中选择一个实例。 3.单向关联 类的关联关系也可以是单向的,单向关联用带箭头的实线表示。例如,顾客(Customer)拥有地址(Address),则Customer类与Address 类具有单向关联关系,如图所示。