Snapshot diagram (代码快照图)

  • 用于描述程序运行时的内部状态,包括堆和栈的调用。
  • 刻画各类变化随时间的变化,描述各类概念如:原始类型/对象类型,不可变对象/可变对象,引用别名
  • 刻画基本类型的值:直接用一个箭头指向它。
  • 刻画对象类型的值:用圈圈起来,再用一个箭头指向它,在圈的里面有一个label来标识它的类型。圈的内部可以包含类的各个属性(基本类型/对象类型),一个箭头由属性的名字指向属性的值。
  • 不可变对象的值用双线椭圆来表示,如String,下图中s所指向的String对象就发生了改变。
  • 可变对象的值用单线椭圆来表示,可变对象内部属性的值可以发生改变,如StringBuilder。
  • 不可变的引用(用final修饰)用双线箭头来表示。如下图中,id是不可变的,age是可变的。
  • 有的时候,变量的引用是不可变的,即只能指向这唯一一个对象,但这个对象的值是可以改变的,如final StringBuilder。
  • Example
    下面这段代码的Snapshot diagram。
String s1 = new String("abc");
List<String> list = new ArrayList<>();
list.add(s1);s1 = s1.concat("d");
System.out.println(list.get(0));String s2 = s1.concat("e");
list.set(0, s2);
System.out.println(list.get(0));

  • 一些复杂数据类型的Snapshot diagram
    List:

Set:

Map:

UML类图

类图基础属性


+表示public
-表示private
#表示protected
~表示default,也就是包权限
_下划线表示static
斜体表示抽象类

在UML中,类使用包含类名、属性和操作且带有分隔线的长方形来表示,如定义一个Employee类,它包含属性name、age和email,以及操作modifyInfo(),在UML类图中该类如图所示:

在UML类图中,类一般由三部分组成:
类名、属性、操作
UML规定属性的表示方式为:可见性 名称:类型 [ = 缺省值 ]
UML规定操作的表示方式为:可见性 名称(参数列表) [ : 返回类型]

对于接口,可以在接口名的上方写<<interface>>

类与类之间关系

在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
下面是一幅从网上摘取的生动形象的图。

  1. 关联关系
    关联关系通常将一个类的对象作为另一个类的成员变量。在使用类图表示关联关系时可以在关联线上标注角色名,一般使用一个表示两者之间关系的动词或者名词表示角色名。
    如在一个登录界面类LoginForm中包含一个JButton类型的注册按钮loginButton,它们之间可以表示为关联关系,代码实现时可以在LoginForm中定义一个名为loginButton的属性对象,其类型为JButton。

    关联关系又分为单向关联、双向关联、自关联、聚合关系、组合关系。
    其中聚合关系和组合关系比较特别。
    聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示。例如:汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,因此,汽车和发动机是聚合关系。

    在代码实现聚合关系时,成员对象通常作为构造方法、Setter方法或业务方法的参数注入到整体对象中,上图对应的Java代码片段如下:
public class Car {private Engine engine;//构造注入public Car(Engine engine) {this.engine = engine;}//设值注入public void setEngine(Engine engine) {this.engine = engine;}
}
public class Engine {
}

组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系。在UML中,组合关系用带实心菱形的直线表示。例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系,如图所示。

public class Head {private Mouth mouth;public Head() {mouth = new Mouth(); //实例化成员类}……
}
public class Mouth {……
}

泛化关系

泛化有两种——继承、实现。
类与类之间的继承关系用实线和空心三角来表示。

类对接口的实现用虚线和空心三角来表示。

两种重要的图——Snapshot diagram UML diagram相关推荐

  1. Python 金融数据可视化(两列数据的提取//分别画//双坐标轴//双图//两种不同的图)...

    import matplotlib as mpl import numpy as np import matplotlib.pyplot as pltnp.random.seed(2000) y = ...

  2. 两种ps切图方法(图层/切片)

    两种Ps切图方法 一.      基础操作: a)    Ctrl++ 放大图片,ctrl - -缩小图片 b)    按住空格键space+,点击鼠标左键,拖动图片. c)    修改单位,点击编辑 ...

  3. 原生JS仿造华为商城案例-实现了简单页面-两种轮播图思路的实现-动态展示数据

    文章目录 功能简介 项目准备 项目说明 方案一:源代码 CSS样式 HTML结构 JS逻辑 方案二:源代码 CSS样式 HTML结构 JS逻辑 功能简介 页面展示 该项目功能实现: 无限滚动轮播图 j ...

  4. java swing 图片容器_Java Swing中两种设置背景图(容器图片)

    在java swing中需要为容器添加图片,或者背景图片. 提供两种简单的解决方案,一种利用JPanel,另一种利用JLabel 1.JPanel(源代码) package oo; import ja ...

  5. win7计算机收藏夹位置,win7中收藏夹在哪里 win7找到IE收藏夹的两种方法[多图]

    在使用电脑的时候收藏夹对我们是很重要的,比如我们在使用win7旗舰版中的IE浏览器时,会把比较常用的网页添加到收藏夹.那收藏夹在哪呢?可能不太熟悉电脑的朋友会不太清楚,没关系,下面小编就给大家分享了如 ...

  6. excle2010 一张图上画两种类型的图:折线图+柱形图

    step1:将三列数据选定,插入折线图: 这时,会出现一个X轴下,两条折线: step2:选择其中一条折线,右键"更改系列图形列表",然后选择柱形图: 这时,会出现一个X轴下,一条 ...

  7. ios添加 启动画面_iOS 两种设置启动图方式的 bug 汇总

    楼主最近几天一直在纠结这个,忙到最后发现是 Apple 的锅,臣妾真搞不定呀 1.单独使用 LaunchImage 来设置启动图时: ①iOS9 系统的手机,在 APP 从后台通过 openURL 拉 ...

  8. 通过思维导图学习知识的两种模板鉴赏

    在学习中,我们可以制作思维导图来帮助记忆.理解.正所谓千言万语不如图,一张简单的思维导图就能涵盖整篇文章的中心思想.分析出事物之间的关系.而在制作思维导图的时候,人脑也跟着进行分析,这才是思维导图最大 ...

  9. 用两种遍历方法判断图中两点是否有路径

    用两种遍历方法判断图中两点是否有路径(可直接测试) 邻接表.图.图的两种遍历以及图中路径的基本概念,可以去自行了解和学习(下面是代码实践)可直接在自己主机测试 #include <iostrea ...

最新文章

  1. 程序员:我不学Python了!!
  2. 为特定用户创建监牢 chroot
  3. legend3---lavarel常用artisan命令操作
  4. docker 安装gitlab
  5. spring代码异常捕获到logback logging.config=logback-spring.xml文件中不能输出异常e.printStackTrace...
  6. 二叉树的遍历算法(三级)
  7. lisp中怎样调取图形_CAD的lisp程序已加载,怎样绘图?
  8. AbstractQueuedSynchronizer浅析——同步
  9. markdown 编辑器_推荐一款公众号 Markdown 编辑器
  10. 全网首次公开!iOS14 到来前,开发者必需的时间表及 To do list
  11. python趣味编程_戏说《西游记》之Python趣味编程:第四回 拜师学艺 破盘中之谜...
  12. 问题:js中怎么继承属性
  13. 八、接口中的默认方法与静态方法
  14. 《OKR源于英特尔和谷歌的管理利器》阅读总结
  15. 一段很现实的话适合发朋友圈文案
  16. Linux设备模型(1)_基本概念
  17. 数据链路层学习之LLDP
  18. BILIBILI 高并发实时弹幕系统那些事(项目开源、架构演变)
  19. Structured Program I – Print a Frame
  20. java 外文翻译_计算机 java 外文翻译 外文文献 英文文献

热门文章

  1. 使用 做签名的post_java组件HuTool相关工具类的使用(五)
  2. 面向对象程序设计_面向对象的程序设计(续)
  3. Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略
  4. 成功解决VM虚拟机内This compute has only 713.3MB disk space remaning
  5. BlockChain:《世界经济论坛:区块链将如何重塑金融业?》—20160812—听课笔记
  6. 成功解决internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module 'express'
  7. Ubuntu 16.04 安装JDK
  8. errno_t open_s()打开文件出现的错误分析
  9. 机器学习-特征工程中的数据预处理
  10. PHP5.6通过CURL上传图片@符无效的兼容问题