《数据结构与算法-Python语言描述》读书笔记(2)第2章抽象数据类型和Python类(关键词:数据结构/算法/Python/抽象数据类型/Python类)

第2章 抽象数据类型和Python类

2.1 抽象数据类型

抽象数据类型(Abstract Data Type,ADT)是计算机领域中被广泛接受的一种思想和方法,也是一种用于设计和实现程序模块的有效技术。ADT的基本思想是抽象,或者说是数据抽象(与函数定义实现的计算抽象或称过程抽象对应。)
这里写图片描述

2.1.1 数据类型和数据构造

以Python为例,它提供的基本类型包括逻辑类型bool、数值类型int和float等、字符串类型str,还有一些组合数据类型。例如,Python为数据的组合提供了list、tuple、set、dict等结构(它们也看做是类型),编程时可以利用它们把一组相关数据组织在一起,构成一个数据对象,作为一个整体存储、传递和处理。

2.1.2 抽象数据类型的概念

理想的情况是:在编程中使用一种对象时,只需要考虑应该如何使用不需要(最好是根本不能)去关注和初级对象内部表示。这样的数据对象就是一种抽象数据单元,一组这样的对象构成一个抽象的数据类型,为程序里的使用提供了一套功能。

抽象数据类型的基本想法是把数据类型定义为抽象的对象集合,只为它们定义可用的合法操作,并不暴露内部实现具体细节不论是其数据的表示细节还是操作的实现细节。当然,要使用一种对象,首先需要能构造这种对象,而后能操作它们。抽象数据类型提供的操作应该满足这些要求。一个数据类型的操作通常可以分为三类:

这里写图片描述

(读者备注:以下解释了不变对象、不变类型和可变对象、可变类型

作为数据类型,特别是比较复杂的数据类型,有一个很重要的性质被称为变动性,表示该类型的对象在创建之后是否允许发生变化。如果某个类型只提供上面的第1和第2类操作,那么该类型的对象在创建之后不会变化,永远处于一个固定的状态。这样的类型称为不变数据类型,这种类型的对象称为不变对象。对于这种类型,在程序里只能(基于其他信息或已有对象构造新对象或者取得已有对象的特性不能修改已建立的对象。如果一个类型提供第3类操作,对该类型的对象执行这种操作后,虽然对象依旧,但其内部状态已改变。这样的类型就称为可变数据类型,其对象称为可变对象。下面经常把不变数据类型可变数据类型分别简称为不变类型可变类型

Python语言里的str、tuple和frozenset是不变数据类型,而list、set和dict是可变数据类型。

2.1.3 抽象数据类型的描述

(读者笔记:两个例子详细见书上。)
这里写图片描述

这里写图片描述

上面看了两个抽象数据类型的例子,现在总结其中的一些情况:
这里写图片描述

ADT是一种思想,也是一种组织程序的技术,主要包括:
1)围绕着一类数据定义程序模块,如上面的Rational和Date都是这样。
2)模块接口实现分离。上面只给出模块接口规范,包括模块名、模块提供的各个操作的名字参数。每个操作还有非形式化的语义说明。
3)在需要实现时,从所用的编程语言里选择一套合适的机制,采用合理的技术,实现这种ADT的功能,包括具体数据表示操作

2.2 Python的类

2.2.1 有理数类
2.2.2 类定义进阶

(读者笔记:这一小节提到了“静态方法”。值得一读。)
这里写图片描述

2.2.3 本书采用的ADT描述形式

这里写图片描述

2.3 类的定义和使用

2.3.1 类的基本定义和使用
类定义
类对象及其使用
2.3.2 实例对象:初始化和使用
实例对象的初始化

__init__

类实例(对象)的数据属性

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值