软件构造笔记整理一

1. 抽象数据类型
  • 分类维度一:可变性与不可变性

    • 不可变的数据类型举例

      基本数据类型:int, long, byte, short, char, float, double, boolean

    • 不可变的数据类型举例

      对象数据类型:Set集合,List列表,Map映射

    • final的作用

      • 不可变数据,值不能被改变,安全!
      • 可变数据,引用不能被改变,值能被改变,潜在风险!
    • 优缺点分析

      • 不可变数据安全,但是通过复制来实现改变值要浪费空间

      • 可变数据方便进行改值,但是容易产生危险的不可控修改

    • 解决方案

      • 不可变数据例如String存在可变的版本StringBuilder
      • 可变数据返回时进行防御式拷贝避免表示泄露
  • 分类维度二:静态与动态

    • 运行前进行静态类型检查
    • 运行时进行动态类型检查
2. spec归约
  • requires前置条件

    • 客户端,约束输入数据类型
  • effects后置条件

    • 开发端,约束功能实现和返回数据类型
  • 写法

    • 写在函数签名前
    • 框架形式如下,具体说明参数、返回值、可能抛出的异常
    /**
     * @param 
     * @return 
     * @throws
     */
     
    
  • 强度

    • 前置条件越弱,后置条件越强,规约强度越强(自由度越小)
3. 抽象数据类型设计
  1. 抽象为四类方法

    • creator构造器:无中生有
    • producer生产器:旧中生新
    • observer观察器
    • mutator改变器
  2. Representation Independence表示独立性

    • 客户端只使用功能,无关注内部实现
    • 函数接口不变,内部表示的变化不影响客户端
  3. Rep invarian表示不变量与Abstract function抽象函数

    • RI 表示R上的合理区间
      • 与程序运行无关,任何时候都满足
      • 包含对A所有合法的表示值
    • AF
      • 实现R对A的内部表示
      • 满射
  4. 注释

    • 描述RI,R的合法表示范围

    • 描述AF,每一个R如何解释A

    • 若存在可变数据,要自证清白(表示泄漏的安全声明)

    • 写法格式

      // Rep invarian:
      //	
      // Abstraction Function:
      //
      // Safety from rep exposure
      //	
      
      
    • 与归约区分

      • 注释用//,归约用javadoc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值