产品经理必学UML:类图

20 评论 27015 浏览 303 收藏 11 分钟

本篇文章主要介绍了UML静态视图中的类图,包括类图的概念、用途及相关元素,供大家一起参考和学习。

UML(Unified Modeling Language)又称统一建模语言或标准建模语言,可以看做用于系统设计阶段给开发做参考的一种方式,其中很多图需要用到面向对象程序的思维。

上图为产品经理经常用到的UML图,包括静态视图(类图)和动态视图(用例图、状态图、顺序图、活动图),其中静态视图主要用来分析业务概念,描述静态场景;动态视图描述业务行为,分析动态场景。

本文主要介绍类图。

一、概念

类图(Class Diagrame)是描述类、接口、协作以及它们之间关系的图,用来显示系统中各个类的静态结构。

类图包含7个元素:类、接口、协作、依赖关系、泛化关系、实现关系以及关联关系。

二、用途

  • 对系统的词汇建模(建立抽象系统词汇,如班级、学生);
  • 对简单协作建模(将系统词汇中是事物协同工作的方式可视化和详述,如班级和学生的关系表示);
  • 对逻辑数据库模式建模。

三、类图元素

在类图中,类用矩形来表示,分为3个部分:名称部分(Name)、属性部分(Attribute)和操作部分(Operation,也可称作方法)。

1. 类名称(ClassName)

类的名称是一个文本串,分为简单名称和路径名称。简单名(single name)即单独的名称不含冒号;路径名(path name)即用类所在的包的名称作为前缀。

简单名、路径名

2. 属性(Attribute)

描述类在软件系统中代表的事物所具备的特性。UML中类属性的语法: [可见性] 属性名 [:类型] [=初始值] [{属性字符串}],
如【-姓名: string】,其中[]中的部分是可选的。

(1) 可见性

包括共有(Public)、私有(Private)和受保护(Protected)3种。

共有类型可以被外部查看和使用,用“+”表示;私有类型即不可以从其他类中访问该属性,用“-”表示;

受保护类型常与泛化和特化一起使用,用“#”表示。如果没有符号,表示没有定义该属性的可见性

(2) 属性名

由描述所属类的特性的名词或名词短语组成。按约定,单字属性名小写,多个单词的话需要合并,且除第一个单词之外的其余单词首字母大写,比如className。当然,若为中文就不必如此。

(3) 类型

典型的属性类型有:整数(int)、布尔型、实型和枚举类型。当一个类的属性被完整定义后,任何一个对象的状态都由这些属性的特定值所决定。

(4) 初始值

保证系统的完整性;为用户提供易用性。

(5) 属性字符串

关于属性的其他信息。

3. 操作(Operation)

类的操作是对类的对象所能做的事务的抽象,相当于服务的实现。UML中类操作的语法:[可见性] 操作名 [ (参数表)] [: 返回类型] [{属性字符串}],如【+查询( ): 歌曲】,其中[]中的部分是可选的。

(1) 可见性

包括共有(Public)、私有(Private)、受保护(Proteted)和包内公有(Package)4种。

其中公有类型即只要调用对象能访问操作所在的包,就可调用该操作,用“+”表示;私有类型即只有属于同一个类的对象才可以调用,用“-”表示;

受保护类型即只有子类的对象才可以调动父类,用“#”表示;

包内公有类型即只有在同一个包里的对象才可以调用,用“~”表示。

(2) 操作名

描述所属类的行为的动词或动词短语。约定同属性名。

(3) 参数表

指一些按顺序排列的属性定义了操作的输入。定义方式采取“名称:类型”,多个参数用逗号隔开。

(4) 返回类型

绝大部分编程语言只支持一个返回值,即返回类型至多一个。

4. 接口(Interface)

接口是指类或组件所提供的、可以完成特定功能的一组操作的集合。接口描述了类或组件的对外的、可见的动作,通常一个类实现一个或多个接口。

定义看起来比较枯燥,通俗点说接口就像螺丝和螺帽的关系,是为类制定了一种规范,是类与类之间的一种约束和协定。

对于一些小程序,一般不需要接口,因为功能的改动对整体的影响不大;但对于大的程序,一旦用户需求对功能进行变动,而功能之间的耦合度高的话就会对整个程序造成影响,而如果使用接口的话,就能在使用之前就想好它要实现的全部功能,即功能的封装。之后需求变化只需要重新写实现类,同样其他人只需要调用接口,不需要知道类的消息。

5. 关系(Ralationship)

(1) 依赖(Dependency)关系

表示某一类元以某种形式依赖于其他类元,它表现了这样一种场景,如下图,对于一个元素(提供者)的某些更改会影响或提供消息给其他元素(客户),即客户以某种形式依赖于提供者。

(2) 泛化(Generalization)关系

表示一种存在于一般元素和特殊元素之间的分级关系,描述了“is a kind of”(是……的一种)的关系,如汽车是交通工具的一种。在类中一般元素称为超类或父类,特殊元素称为子类。

(3) 关联(Association)关系

表示一组具有共同结构特征、行为特征、关系和语义的链接,是一种结构关系,指明一个事物的对象与另一个事物的对象间的关系。如学生和大学的关系,学生在大学里学习,大学又包括了很多学生,所以可以在学生和大学之间建立关联关系。

(4) 聚合(Aggregation)关系

是一种特殊形式的关联关系。表示整体与部分关系的关联,简单来说,就是关联关系中的一组元素组成了一个更大、更复杂的单元。描述了“has  a”的关系。如大学和学院,大学是由很多个学院组成的,因此两者之间是聚合关系。

(5) 实现(Realization)关系

表示规格说明和其实现之间的关系,将一种模型元素和另一种模型元素连接起来,比如类和接口。 如打字员和键盘,键盘保证自己的部分行为可以实现打字员的行为。

四、连接关系图形小结

由于连接关系之间使用的图形较为相似,基本由箭头和直线组成,容易混淆,在此进行总结,以便查看。

五、小练习——简易听歌系统类图

  • 用户与歌手:关联关系,1个用户可能关注0到n个歌手;
  • 用户与歌曲:关联关系,1个用户可能播放或者收藏0到n首歌曲;
  • 歌曲与歌手:关联关系,1首歌曲对应至少1位歌手;
  • 歌曲与歌曲列表:聚合关系,1到n首歌组成了1个歌曲列表;
  • 用户实现接口注册和登录。

第一次写,若有错误的地方,欢迎批评指正。后续会更新用例图、活动图等,可关注等待哦。

 

本文由 @AugTalk 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 为什么没有继承关系和复合关系?

    来自北京 回复
    1. 泛化就可以理解为继承

      来自天津 回复
  2. 问题:歌手和歌曲的关系应该更复杂,一个歌曲对应至少一位歌手,一位歌手也会对应多个歌曲啊

    回复
    1. 是的,用户与合区的关系应该是多对多,即N-N

      来自上海 回复
    2. 是的,用户与歌曲的关系应该是多对多,即N-N

      来自上海 回复
  3. 给你点赞,没有系统学习过UML,在你这边看到满满的干货,很受用

    回复
  4. 例子里面的符号没有懂,+ ()

    来自广东 回复
    1. + 是公有属性;
      – 是私有属性;
      ()是方法

      来自江苏 回复
  5. 数据库要不你也一起写了吧

    来自四川 回复
  6. 你的这些类都是用什么软件做的,powerdesigner?

    来自广东 回复
    1. visio

      来自广东 回复
  7. 这个内容可以放在人人都是技术经理里面

    回复
    1. B端产品经理就是要会业务建模的

      来自上海 回复
  8. 有没有人进来说句实话,这图画出来到底有什么实质性作用?直接列到Excel中不是更快更方便吗?花这么多时间不如好好打磨产品方案!

    回复
    1. visio画很快的

      来自北京 回复
    2. 如果你要做数据中心的产品,这东西太有用了

      回复
    3. 有些B端偏底层的产品,技术不懂业务或者业务不懂技术,单纯一个版本一个版本的堆功能,走着走着就走死了

      来自北京 回复
    4. 画了这个整个架构会清晰很多

      来自广东 回复
    5. 应该说后端最喜欢看到这个了,字段类型,接口都弄好了

      来自江苏 回复
  9. 很受用 😉

    来自北京 回复