您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
UML 图解:类图( class diagram )
 
俎涛 ,火龙果软件工程技术中心
   次浏览      
 2020-2-13
 

为什么需要类图建模

类图是面向对象思维的结晶,是以对象的视角描述客观世界的事物:

  • 对象是客观世界存在物,占有空间 //例如一个轮子
  • 对外表现特征 //例如 轮子的半径
  • 跟外部发生作用
  • 一个对象可能由更小的对象构成,就像分子里面还有原子;
  • 一个对象可能和另一个对象有link
  • ... ...
  • 现实世界对象很多,人为了描述简洁、便于交流,把几个相似的对象抽象为类:

  • 类只存在于人的头脑中、人的语言中,
  • 给类起个名字,反应其所代表的对象实例
  • 用属性描述对象的特征
  • 用方法描述对象的行为
  • 部分对象的类可以组成整体对象的类
  • 一个类可以关联到另一个类
  • 几个类似的类可以抽象为父类
  • ... ...
  • 对象之间的关系抽象为类的关系:关联,聚合,组成,泛化,实现 等等。

    这么说起来有些抽象,举个例子吧。

     

    当我们面对复杂的逻辑描述的时候,阅读的过程实际上就是理解各种概念和关系的过程,面向对象分析方法和类图可以大大提高理解的效率和精确性。

    如下是一个电机控制系统的功能描述,工程师采用文本语言描述如下:

    功能描述
    操作员向控制器发出控制指令,控制器启动电机
  • 如果符合条件,则电机则启动,反馈给操作员成功消息
  • 如果不符合条件,则反馈给操作员警告信息
  • 电机有2种,直流电机和交流电机,电压判定的启动条件不同
  • 如果直流电机,电压达到100伏特启动
  • 如果交流电机,电压达到200伏特启动
  •  

    如果把相关的概念采用类图建模,则模型如下:

    哪个更好呢?

  • 更容易理解
  • 更全面
  • 更容易被开发人员转化为系统实现。
  • 我想读者可以自己根据直觉判断!

     

    类图有什么

    任何UML图都有语义、元素、关系和用途,下面对类图做个列表描述:

    语义 描述类、类的属性和方法,以及类之间的关系
    元素 类 (class),接口(interface),抽象类(abstract class)
    关系 类之间的关系:
  • 关联-association,聚合-aggregation,组成-compose
  • 依赖-dependency
  • 泛化-generalize
  • 类和接口的关系:
  • 实现-realization
  • 用途 把客观世界的对象分类,用属性描述特征,用方法描述行为,建模各个类之间的关系,帮助用户:
  • 概念建模
  • 数据建模
  • 设计类建模
  • 实现类建模
  •  

    图例:领域模型

    采用类图可以对问题域进行面向对象分析,分析各种领域对象的属性、方法和关系,建立领域模型(也称之为分析模型),如下是一个领域模型的简化示例:

     

    图例:设计模型贪吃蛇游戏类图

    为了让读者看的更形象,采用图例的方式介绍类图的用法,下面是贪吃蛇游戏的设计类图。设计类图与分析类图的不同之处在于考虑了计算机的软件实现环境和开发语言机制,从开发角度给出了解决方案的逻辑视图:

     

    为了实现软件的健壮性,设计类图常常运用设计原则,此例如下:

  • 基于单一职责原则,把Map和Food进行了分离。
  • 基于接口隔离原则,抽象了接口 Movable。
  • 基于依赖倒置原则,把接口Movable置于和Map同样的上层。

  • 类图说明:

    如下是基于类图生成的类的说明字典:

     序号  类  说明
     1.  Timer  定时器类,具有方法tick,时间到后会触发整个方法—调动物体Move()。
     2.  Map  地图类,具有属性weight、height、color、cellSize;具有方法CreateFood()。
     3.  Movable
     可以代表可移动的物体的接口,具有方法声明Move()。
     4.  Animal  动物类,是个抽象类,具有属性 长度和积分,具有抽象方法 Move()。
     5.  Node  节点类,具有属性pointX、pointY、size、color;具有方法Draw()。
     6.  Food  食物类,具有属性name、score。
     7.  Alligator
     鳄鱼类,具有属性food和方法move(),继承Animal类。
     8.  Snake  蛇类,具有方法Move(),继承Animal类。
     9.  Train  火车类,具有方法Move()。
     10.  Direction  方向枚举类型,具有数值up、down、right、left。
     11.  Color  颜色枚举类型,具有多个颜色:Red,Green,Blue,Orange,Black。

    如下是基于类图生成的类之间的关系目录:

     序号  起点类  关系  终点类
     1.  Map  Association  Movable
     2.  Direction  Aggregation  Movable
     3.  Animal  Realisation  Movable
     4.  Node  Aggregation  Animal
     5.  Food  Generalization  Node
     6.  Node  Aggregation  Map
     7.  Train  Realisation  Movable
     8.  Timer  Dependency  Movable
     9.  Alligator  Generalization  Animal
     10.  Snake  Generalization  Animal
     11.  Node  Association  Color

    可以基于类图生成代码,如下是基于类图生成的代码(C++语言)

     

    可以基于类图生成数据模型,然后基于数据模型生成DDL代码。如下是基于类图生成的数据模型:


    可以基于数据模型生成DDL代码,如下是基于生成的DDL代码:

     

    说明:本文的模型采用建模工具EA建模、生成代码、生成数据库。

     


    UML图解系列:

    1.UML概览
    2.用例图
    3.活动图
    4.类图
    5.对象图
    6.顺序图
    7.类图和代码的映射关系解读( C++ )

     

    后记

    希望您读了此文后有所受益。

    如果您有经验乐于分享,欢迎投稿给我们

    如果您对我们的培训、咨询和工具感兴趣:

  • 课程:基于UML和EA进行分析设计  
  • 课程:MBSE(基于模型的系统工程)  
  • 课程:基于模型的需求管理)方法与实践
  • 课程:基于SysML和EA进行系统设计与建模  
  • 课程:企业架构建模
  • 课程:系统架构建模方法与案例
  • 课程:领域驱动的建模与设计
  • 课程:基于模型的设计
  • 课程:业务建模与业务分析
  • 建模工具EA
  • 基于模型的需求管理工具:iSpace
  • 咨询方案:MBSE(基于模型的系统工程)
  • 咨询方案:基于UML的模型驱动的开发
  • 欢迎联系我们: 俎涛Zutao@uml.net.cn

       
    次浏览       
     
    相关文章

    UML概览
    UML图解:用例图(Use case diagram )
    UML图解:活动图(activity diagram )
    UML图解:类图(class diagram )
    UML图解:对象图(object diagram)
    UML图解:顺序图( sequence diagram )
     
    相关文档

    模型跟踪:跟踪图、矩阵、关系(建模工具EA)
    自定义表格(Custom Table)在EA中的使用
    元素的详情浏览控制
    UAF 1.2规范解读(DMM 和 UAFML )
    EA中支持的各种图表
    EA中的界面原型建模
     
    相关课程

    UML与面向对象分析设计
    UML + 嵌入式系统分析设计
    业务建模与业务分析
    基于SysML和EA进行系统设计与建模
    基于模型的需求管理
    业务建模 & 领域驱动设计