zoukankan      html  css  js  c++  java
  • UML_03_类图

    一、前言

    类图是UML结构图,在类和接口的层次上显示设计系统的结构,显示它们的特性、约束和关系等,是定义其它图的基础。

    二、类图

    在这里插入图片描述

    如上图,在类图中表示方法如下:

    • 斜体 :抽象类、抽象方法
    • 下划线 :静态方法、静态属性
    • 访问控制:+ # ~ - 依次表示 public、protected、default、private

    三、关系

    在uml类图中,类之间关系有如下:

    • 泛化(Generalization)
    • 实现(Realization)
    • 关联(Association)
    • 聚合(Aggregation)
    • 组合(Composition)
    • 依赖(Dependency)

    1.泛化:

    泛化是继承关系的一种,子类继承父类的所有行为和属性,子类可以新增新的功能或者重写父类功能。

    • 表示

    uml中使用带空心三角箭头的实线表示
    【箭头指向】:箭头指向父类

    • 示例
      在这里插入图片描述

    2.实现

    实现是接口和类的关系,是指类实现了接口中定义的接口

    • 表示

    uml中用带空心三角箭头的虚线表示
    【箭头指向】:箭头指向接口类

    • 示例
      在这里插入图片描述

    3.关联

    在建模过程中必然存在类之间的联系,使类可以感知其他类的行为和属性,关联分为双向和单向关联

    3.1 双向关联(标准)

    对于双向关联来说被关联的两个类可以感知对方的存在

    在这里插入图片描述

    如图在线每端放置一个角色和多重值,
    对于Route来说,我们应该看在bike端的角色和多重值。对于Route来说,每个骑行路线对应0个或者多个自行车,0个是因为可能先制定了骑行路线但是还没有找到自行车,多个是因为可以有多个人骑行同一个路线。
    对于bike来说我们应该看route端的角色和多重值,对于一个bike来说每个自行车对于0个或者多个骑行路线,0个是因为虽然有一个自行车但是我可以不骑行,不指定骑行路线那,多个是因为我一个自行车可以指定多个骑行路线。

    上面多重值为0…*,其实还有其他多重值如下表:

    表示 含义
    n 只能n个
    0…n 0到n个
    0…* 0个及以上
    n…* n个以上
    ============================== ==============================
    0…1 0个或1个
    1 只能1个
    0…* 0个或多个
    * 0个或多个
    1…* 1个或多个
    3 只能3个
    0…5 0到5个
    5…15 5到15个

    3.2 单向关联

    对于一个单向关联来说也是两个类是相关的,但是只有一个类知道这种联系的存在

    在这里插入图片描述

    如图,对于单向关联表示为一条带有指向已知类的开放箭头实线,单向关联只包含一个角色名和多重值,一个人可以有0个或者多个账户,人可以感知到账户的存在,但是账户却感知不到人的存在。

    在这里插入图片描述

    4. 聚合

    聚合是关联关系的一种,聚合主要描述整体与部分直接的关系,聚合有分为基本聚合和组合聚合

    4.1 基本聚合

    通常也称之为聚合
    对应基本聚合来说,部分类的生命周期独立于 整体类 的生命周期

    两者有独立的生命周期,has-a 的关系

    • 表示

    uml中使用一条从整体类到部分类的实线,并在整体类的关联末端画一个未填充棱形标示:

    • 示例
      在这里插入图片描述

    一个汽车有4个轮子组成,轮子的生命周期不依赖与车的,因为车轮可以独立于车独立存在。

    4.2 组合

    组合聚合是聚合的一种情况,不同在于部分类的生命周期依赖整体类。

    两者有相同的生命周期,contains-a 的关系

    • 表示

    uml中使用一条从整体类到部分类的实线,并在整体类的关联末端画一个填充棱形标示

    在这里插入图片描述

    一个公司有至少一个部门组成,部门要依赖于公司的存在而存在,不会存在一个部门而它不属于某一个公司。

    4.3 自身关联

    自身关联涉及到一个类,是类自己关联自己的情况

    在这里插入图片描述

    一个雇员可以有0个或者多个管理者,而管理者本身也是雇员的一种。

    5.依赖

    依赖即一个类的实现需要其他类的协助,通常代码表现为方法参数局部变量静态方法调用util类调用

    • 表示

    uml中使用一条箭头的虚线,从依赖方指向被依赖的类

    在这里插入图片描述

    四、实例

    1.官方域模型

    Domain Model Diagram

    在这里插入图片描述

    下面围绕类Library类分析下这个图

    • 首先library通过组合方式关联到了Catalog类目类,这说明类目不能独立存在要依赖图书馆存在,所以这里没有使用聚合而使用了组合。
    • 另外library通过聚合关联到了Book Item 类和Account账号类,这说明图书馆是有0个或者多个图书和账户组成,这里使用聚合而不是用组合是因为书和账号可以独立于图书馆存在,比如我有学号账号,但是图书馆里面不是必然有你的账号。

    下面围绕Catalog分析

    • 类目通过双向关联关联到bookitem,说明一个类目里面可能会有0个或者多个书籍,一个书籍对应着一个类目。
    • 另外类目有通过realization实现了search类和manage类的接口,让类目有搜索和管理功能。Search类搜索时候会依赖Patron类图书捐赠人的姓名地址或者Libraian类图书管理员的姓名地址,职位。 图书管理类时候会依赖图书管理员类的信息。而Patron图书捐赠人有可能是一个学生,学生有自己的账号,所以patron类会聚合到Account.
    • bookItem类通过泛化继承Book中书的共性部分信息。有通过关联关联到了account,说明一个账户只能接到0本和最多12本书,最多可以预定3本书。
    • 最后Book类双向关联到Author类,数目一个作者至少写了1本书(严格说应该是0),一本书至少有一个作者编写,Account账户类有依赖一个AccountState的枚举值的类用来存放账号状态。

    2.大话设计模式

    下图摘自《大话设计模式》

    在这里插入图片描述

    六、参考资料

    1. https://www.uml-diagrams.org/
    2. UML教程-w3cschoolUML教程-w3cschool
    3. UML建模图实战笔记-ifeve
  • 相关阅读:
    pyqt5 动画学习(二) 改变控件颜色
    pyqt5 QGraphicsView颜色动画问题(不兼容,运行不了动画)
    selenium chrome浏览器与chrome.driver的对应关系
    使用tkinter加载png,jpg
    SVN是什么,svn的目录结构
    性能测试中用LambdaProbe监控Tomcat Tomcat和Probe的配置
    Mysql从客户端连接服务器连不上的问题
    已达到计算机的连接数最大值,无法再同此远程计算机连接”的解决办法
    解决远程桌面无法连接的问题
    查看端口是否被打开、占用、开放的有关命令。
  • 原文地址:https://www.cnblogs.com/shirui/p/10752144.html
Copyright © 2011-2022 走看看