软件构造Lab2学习笔记

一、关于ADT

  1. AF:抽象函数
    AF表示值到其对应的抽象值的映射,即该ADT给出的是多种值的抽象化表示。
  2. RI:表示不变量
    RI表示值到布尔值的映射,说明某个值必须满足怎样的条件。
  3. safety from rep expose:安全保证
    safety from rep expose描述ADT如何确保表示是安全的。
  4. checkRep():检查表示不变量
    checkRep检查表示不变量是否始终满足。

二、关于迭代器Iterator

1 构建

Iterator it = edges.iterator();

使用Collections的某个子类的iterator()方法创建。
2 迭代过程

while (it.hasNext()) {
       Edge e = it.next();
       ……
}

hasNext():判断迭代器是否仍有下一个可迭代的元素。
next():返回下一个元素,其返回值是可变的(即可以同时在被迭代的集合类中修改)。
3 删除

it.remove();

只有采用这种删除方法,才既可以将该元素从被迭代的集合类中删除,且不会抛出异常ConcurrentModificationException。
4 一些补充
遍历时默认调用迭代器,包括foreach。因此在foreach中不能直接删除元素。
有时,在迭代器中多次修改未必能真正实现,最好的方法仍是记录待修改的位置,在迭代结束后再根据记录进行修改。

三、可变与不可变

  1. 改变变量和改变值
    对变量赋值是在改变变量的指向
    改变可变变量的内容,是在改变变量内部内容的引用

  2. 不可变类型
    一旦创建,只表示同一个值

  3. 不可变引用
    一旦指定引用位置,不可再次指定
    final关键字对不可变引用提供了静态检查的支持
    补充:
    final声明的类不可被继承;
    final声明的变量,其值和引用不可被修改;
    final声明的方法不能被子类重写;

  4. 可变类型
    提供修改对象值的方法

  5. 可变类型的风险
    传递过程中具有潜在风险,采用防御式复制保护可变类型。

四、快照snapshot

  1. 基本类型和对象类型
    基本类型:箭头指向值
    对象类型:箭头指向一个内容,内容里的基本类型指向值
    在这里插入图片描述
  2. 不可变类型重赋值
    指向新的内容。
    在这里插入图片描述
  3. 可变类型重赋值
    修改原有内容。
    在这里插入图片描述
  4. 不可变引用
    双线箭头说明引用不可变。
    在这里插入图片描述

你可能感兴趣的:(SC)