软构学习-5、6-设计规约、抽象数据类型(ADT)

5 设计规约

本章大纲:

  • 方法的规约
  • 前置/后置条件
  • 欠定规约、非确定规约
  • 陈述式、操作式规约
  • 规约强度及其比较
  • 如何写出好的规约

规约只说明“能做什么”,
而不讲“怎么实现”

行为等价性

站在客户端的角度看待行为等价性

Spec 结构

  • 前置条件:
    对客户端的约束,在使用方法时必须满足的条件
  • 后置条件
    对开发者的约束,方法结束时必须满足的条件
  • 例外

除非条件中要求,否则尽量避免修改可变数据类型

Spec 强度比较

Spec强度变大的依据:

  • 前置条件更弱
  • 后置条件更强

可以使用强度更大的Spec替代强度更小的Spec

Diagramming specifications

  • 点:代表方法的具体实现
  • 圈:代表Spec

若方法满足规约$\rightarrow$则落在Spec的范围内。

更强的规约表达为更小的圈

6 抽象数据类型(ADT)

本章大纲:

ADT的特性:

  • 表示泄露
  • 抽象函数AF
  • 表示不变量RI

操作的抽象类型分类:

  • Creators 构造器
    create new objects of the type,
    A creator may take an object as an argument,but not an object of the type
    being constructed.
  • Producers 生产器
    create new objects from old objects of the type.
  • Observers 观察器
    take objects of the abstract type and return objects of a different type.
  • Mutators 变值器,改变对象属性的方法
    change objects.

各个特征:

  • Creator 可能实现为构造函数或静态函数。
  • Creator 实例比如:工厂方法。
  • Mutator 通常返回值为 void,但也可能返回非空类型。

Representation Independence

表示独立性:client使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端。
除非 ADT 的操作指明了具体的pre-和post-condition,否则不能改变ADT的内部表示——spec规定了client和implementer之间的契约。

posted @ 2023-05-20 11:43  No3eTB  阅读(56)  评论(0编辑  收藏  举报