【工具大道】UML的点点滴滴

本文地址

 

 

      点击关注微信公众号 wenyuqinghuai

 

分享提纲:

  1. 概述

  2. UML类图

  3. UML时序图

  4. 参考资料 

 

 

1.概述

 
  1.1)百度百科
          又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置
 
  2)【分类
    UML有很多种图,大体可以分为两类:
      结构型的图(Structure Diagram)
      类图(Class Diagram)
      对象图(Object Diagram)
      构件图(Component Diagram)
      部署图(Deployment Diagram)
      包图(Package Diagram)
      行为型的图(Behavior Diagram)
      活动图(Activity Diagram)
      状态机图(State Machine Diagram)
      顺序图(Sequence Diagram)
      通信图(Communication Diagram)
      用例图(Use Case Diagram)
      时序图(Timing Diagram)
 
 
 

2. UML类图

参考链接

 
 2.1)一个示例
 
 
  2.2)类之间的关系

泛化关系(generalization)

类的继承结构表现在UML中为:泛化(generalize)与实现(realize):

继承关系为 is-a的关系;两个对象之间如果可以用 is-a 来表示,就是继承关系:(..是..)

eg:自行车是车、猫是动物

泛化关系用一条带空心箭头的直接表示;如下图表示(A继承自B);

uml_generalization

eg:汽车在现实中有实现,可用汽车定义具体的对象;汽车与SUV之间为泛化关系;

uml_generalize

注:最终代码中,泛化关系表现为继承非抽象类;

 

 

实现关系(realize)

实现关系用一条带空心箭头的虚线表示;

eg:”车”为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(汽车还是自行车),才 可以用来定义对象(”车”这个类在C++中用抽象类表示,在JAVA中有接口这个概念,更容易理解)

uml_realize

注:最终代码中,实现关系表现为继承抽象类;

 

 

聚合关系(aggregation)

聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A组成;

uml_aggregation

聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成;

与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在;例如, 部门撤销了,人员不会消失,他们依然存在;

 

 

组合关系(composition)

组合关系用一条带实心菱形箭头直线表示,如下图表示A组成B,或者B由A组成;

uml_composition

与聚合关系一样,组合关系同样表示整体由部分构成的语义;比如公司由多个部门组成;

但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如, 公司不存在了,部门也将不存在了;

 

 

关联关系(association)

关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;

比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;

关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A;

uml_association

注:在最终代码中,关联对象通常是以成员变量的形式实现的;

 

 

依赖关系(dependency)

依赖关系是用一套带箭头的虚线表示的;如下图表示A依赖于B;他描述一个对象在运行期间会用到另一个对象的关系;

uml_dependency

与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;

显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;

注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系处理临时知道对方外,还是“使用”对方的方法和属性;

 

3.UML时序图

参考链接

  3.1)时序图的概念

      时序图定义 : 描述了对象之间传递消息的时间顺序, 用来表示用例中的行为顺序, 是强调消息时间顺序的交互图;

      时序图描述的事物: 时序图描述系统中类和类之间的交互, 将这些交互建模成消息交换, 时序图描述了类以及类之间的交换完成的期望行为的消息, 时序图中每条消息都代表了类的一个操作 或者 引起状态机改变的触发事件;

         时序图表示 : 参与交互的对象在时序图顶端水平排列, 每个对象的底端绘制了一条垂直虚线, 对象A像对象B发送消息, 用一条带箭头的实线表示, 该实线起始于对象A底部的虚线, 终止于对象B底部的虚线; 实线箭头水平放置, 越靠近顶端越早被发送.

      时序图轨迹 : 时序图提供了随时间推移的清晰的 可视化的轨迹;



  3.2) 时序图组成

       时序图组成 : 时序图包括四个元素 对象(Object)生命线(Lifeline)激活(Activation)消息(Message);

      (1) 对象(Object)

      

      对象 : 时序图中的对象在交互中扮演的角色就是对象;


      对象的符号 : 时序图中的对象与对象图中的表示方法一样, 使用矩形将对象名称包含起来, 并且对象名称下有下划线;


      对象创建时机 : 对象可以在交互开始的时候创建, 也可以在交互过程中进行创建;

      -- 处于顶部 : 如果对象的位置在时序图顶部, 说明在交互开始的时候对象就已经存在了; 

      -- 不在顶部 : 如果对象的位置不在顶部, 那么对象在交互过程中创建的;



     (2) 生命线(Lifeline)


      


      生命线 : 生命线是一条垂直的虚线, 这条虚线表示对象的存在, 在时序图中, 每个对象的底部都有生命线;


      生命线作用 : 生命线是一个时间线, 从时序图顶部一直到底部都存在, 其长度取决于交互的时间;


      对象的生命线 : 对象与生命线结合在一起就是对象的生命线, 这个概念包含对象图标 以及 对象下面的生命线图标 如上图;


      (3) 激活(Activation)


      


      激活(Activation) : 代表时序图中对象执行一项操作的时期, 激活期可以理解为语义中 {} 中的内容, 表示该对象被占用以完成某个任务;


      去激活(Deactivation) : 指对象处于空闲状态, 在等待消息激活这个对象;


      激活的表示 : 当对象处于激活时期, 生命线可以拓宽为矩形, 这个矩形条成为激活条; 


      激活去激活的时机 : 

      -- 激活 : 对象激活是在激活条的顶部激活;

      -- 去激活 : 激活条的底部去激活, 通常发生在一个消息离开对象生命线; 



    (4) 消息


      消息概念 : 定义 交互 和 协作 中 交换信息 的类, 对 对象之间的 通信内容 建模;


      消息动作 : 

-- 动作种类 : 消息允许在实体间传递信息 (传递参数), 允许实体请求其它服务, 对象之间通过 发送 和 接收 消息 进行通信; 

-- 产生结果 : 消息可以触发操作唤起信号, 或使目标对象创建 或 销毁;


消息的异步和同步通信 : 

-- 异步通信 : 消息是信号的时候, 发送信号之后, 等待对方触发相应方法, 这是明确的 命名的 对象间的异步通信;

-- 同步通信 : 直接调用对象的方法, 执行方法返回结果, 这种具有返回控制机制的操作是同步通信;


时序图和协作图中消息的区别 : 时序图中的消息强调顺序, 协作图中的消息强调交换消息的对象间的关系;


消息类型 :

--  : 两个对象间绘制消息;

--  : 两个对象之间的过程调用;

--  : 两个对象之间的异步消息;

--  : 过程调用中返回的消息;

       --  : 绘制反身消息;

 

  3.3)一个时序图示例

 

 

 4. 参考资料

  1)看懂UML类图和时序图:http://www.cnblogs.com/me115/p/4092632.html

  2)UML入门 之 交互图 -- 时序图 协作图详解 :http://blog.csdn.net/doniexun/article/details/38317537

 
 
posted @ 2017-03-09 16:35  程序员的文娱情怀  阅读(563)  评论(0编辑  收藏  举报