2019春Software-construction复习笔记(3)

3.3 Abstract Data Type (ADT)
抽象数据类型 (ADT)

  1. ADT的特性:表示泄露,抽象函数AF,表示不变量RI。
    ADT是由操作定义的,与其内部如何实现无关。
    设计ADT的三个rules:
    设计简洁、一致的操作。
    要足以支持client对数据所做的所有操作需要,且用操作满足client需要的难度要低。
    要么抽象、要么具体,不要混合——要么针对抽象设计,要么针对具体应用设计。

    ADT操作:
    构造器、生产器、观察器、变值器。

    RI:表示独立性——ADT内部表示的变化不影响外部spec与客户端。除非ADT的操作具体指明了具体的前周后置条件,否则不能改变ADT的内部表示。

    用观察器观察构造器、生产器、变值器的结果是否满足spec。

    保持不变量来保持程序的正确性。

    返回immutable类型的值或用防御式拷贝来返回一个mutable类来避免表示泄露。

    AF:
    A为抽象值构成的空间:client看到和使用的值。
    R为表示值的空间。
    在这里插入图片描述
    必定满射,未必双射。
    Abstraction Function:抽象函数:R和A之间映射关系的函数,即如何去解释R中的每一个值为A中的每一个值。
    RI:某个具体的表示是否合法。
    即使是同样的R、同样的RI,也可能有不同的AF,即“解释不同”。
    在这里插入图片描述

    CheckRep 检查RI 是否满足。

    对immutable的ADT来说,它在A空间的abstract value应是不变的。但其内部表示的R空间中的取值则可以是变化的
    ADT的规约里只能使用client可见的内容来撰写,包括参数、返回值、异常等。
    如果规约里需要提及“值”,只能使用A空间中的“值”
    ADT的规约里也不应谈及任何内部表示的细节,以及R空间中的任何值
    故在代码中以注释的形式写出AF和RI而不能在Javadoc文档中,防止被外部看到而破坏表示独立性/信息隐藏

  2. 基于数学的形式对ADT的这些核心特征进行描述并应用与设计中。
    3.4 Object-Oriented Programming (OOP)
    面向对象的编程

  3. 面向对象的标准:
    a) 泛型
    b) 继承
    c) 多态
    d) 多态分派/绑定。

  4. 接口——易于理解,方便改动。
    接口确定ADT规约,类实现ADT,也可以不需要接口直接使用类作为ADT,既
    有ADT定义也有ADT实现,实际中更倾向于使用接口来定义变量

  5. 多态:特殊多态(如功能重载),参数化多态,子类型多态/包含多态。

  6. 重载:多个方法具有同样的名字,但是由不同的参数列表或返回值类型。

  7. 重载为静态多态:根据参数列表进行最佳匹配,静态类型检查。

  8. 重写在run-time进行动态检查。

  9. 在这里插入图片描述

  10. 子类型的规约不能弱化超类的规约

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值