软件构造——Snapshot图

Snapshot图(代码快照图)

这里首先回顾一下软件构造最初提出过一个“三维度八视图”的概念,(此概念是软件构造和后期维护过程中的一个概念,讨论的是如何构造的问题)三维度分别是时刻和阶段维度,代码和构件维度,编译和运行维度,而八视图指的就是2 x 2 x 2 = 8了,这里的Snapshot图描绘的是八维度中的时刻、代码、运行维度

  1. 数据类型:
  • 不可变的基本数据类型:
    • 举例:int, long, char, string , …
  • 不可变的对象类型:
    • 举例:Integer, Long , Character , String , …
  • 可变的对象类型:
    • 举例:Date , StringBuilder , List , …
  1. 对象:
  • 不可变的对象:

    • 要求:该对象的数据类型为不可变类型
    • 举例:String str = new String(“abc”);中的对象String “abc”就是不可变对象
    • 画法:双线椭圆内写对象,如上述String “abc”
      image
  • 可变的对象:

    • 要求:该对象的数据类型为可变类型
    • 举例:StringBuilder strbuilder = new StringBuilder(“a”);中的对象StringBuilder “a”就是可变对象
    • 画法:单线椭圆写对象,如上述StringBuilder “a”
      image
  1. 引用:
  • 不可变的引用:
    • 要求:该引用被final修饰过则为不可变引用
    • 举例:final String str = new String(“abc”);中的str就是不可变引用;final int n = 1;中的n就是不可变引用; final StringBuilder strbuilder = new StringBuilder(“a”);中的strbuilder也是不可变引用,只看有没有用final修饰即可
    • 画法:双线箭头指出(此处的id为不可变引用)

image

  • 可变的引用:
    • 要求:该引用没有被final修饰则为可变引用
    • 举例:String str = new String(“abc”);中的str就是可变引用; int n = 1;中的n就是可变引用;StringBuilder strbuilder = new StringBuilder(“a”);中的strbuilder也是可变引用
    • 画法:单箭头指出(此处s为可变引用)

image

  1. 容器

可以理解为是由一堆引用构成的,不同的ADT有不同的画法,这里直接给出常见ADT的Snapshot图框架,需要注意的是如果其中的对象被final修饰同样需要遵循之前的画法使用双线

  • List

image

  • Set

image

  • Map

image

posted @ 2022-06-07 23:18  dcyyyyyy  阅读(81)  评论(0编辑  收藏  举报