面向对象技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
new n
1 representation
item (linked)
previous item
previous previous
item
“Push” operation: new (n) n.item := x n.previous := last head := n
19
Abstract Data Type
数据抽象:定义了数据类型和施加于该类型对 象上的操作,并限定了对象的值只能通过使用 这些操作修改和观察。包含了2个概念:
1. 模块封装 2. 信息隐蔽
数据抽象的意义
数据抽象提供了面向对象计算的起点:系统应 该被分解为概念上的实体,实体的内部细节应 该被隐藏!
数据抽象发展
第一阶段:从无类型的二进制到基本数据类型
Abstract Data Types
抽象数据类型
摘要
从面向过程到面向对象 如何规约对象?——抽象! Abstract data type ADT与软件开发
回顾:结构化软件开发
何谓“结构化(structured)”开发方法?
The Big Name “E.W. Dijkstra”
开发过程侧面
Paychecks
例:考虑一个工资系统
这种功能明确的系统确实适合结构化的开发方法:自顶向 下,逐步求精。
你完美地完成了任务。
而后,极有可能,客户会跑过来跟你说:
给我加个统计报表撒 下个月我想一些人发记时工资,一些人发计件工资啊行啊,有人
每月一发,有人每周一发哦 加个个人所得税系统接口 再加个图像用户界面,用来交互查询吧 ……
“面向对象的软件构造”含义(1)
面向对象的软件构造(OOSC)乃是基于系统所 操作之对象类型(而非系统需实现之功能)来 架构系统的途径。
Meyer: “Object-oriented software construction is the approach to system structuring that bases the architecture of software systems on the types of objects they manipulate — not on “the” function they achieve.”
数据类型由一个对象集合(值集合)以及在该集合 上定义的若干合法运算所组成的运算集合组成。
抽象数据类型(ADT):用数学方法定义对象集合 和运算集合,仅通过运算的性质刻画数据对象, 而独立于计算机中可能的表示方法
ADT规约方法
代数方法 模型方法
C.A.R. Hoare的前后断言方法:通过已定义的(抽象) 数据类型来给出要定义的新类型的抽象模型
Extendibility, Continuity: 对象更直接对应问题 空间的概念,因而较“功能”更稳定.
现实世界 问题世界 软件世界
Reality 抽象
例:考虑一个工资系统
一开始,客户说他的需求很“简单明确”:
Employee information
Hours worked
Produce Paychecks
count
“Push” operation: count := count + 1 representation [count] := x
representation
(array_down) free
“Push” operation: representation [free] := x free := free - 1
自顶向下,逐步求精
程序设计侧面
小结构:顺序,选择,循环 大结构:过程抽象,避免全局变量
回顾:结构化软件开发
“结构化(structured)”的合理性
管理复杂性的有效手段
分解, 抽象, 层次
Correctness
规约与实现
Extendibility? Reusability?
从面向过程到面向对象
面向对象设计的相关问题
如何找到对象类型? 如何描述对象类型? 如何描述对象类型之间的关系和共性? 如何使用对象类型来构造程序?
对象刻画
考虑一类具有相似属性的对象而不是单个对象 定义对象的类型不是通过定义对象的物理表述,
而是通过定义它们的行为:即它们提供给外部 的服务
External, not internal view: ABSTRACT DATA TYPES
Action
ObFra Baidu bibliotekect
Processor
如何导出软件系统的结构?
两条途径:
从操作/功能入手 从客体/对象入手
形成两种抽象方法:
基于过程的抽象 基于数据的抽象
过程抽象 vs. 数据抽象
过程抽象:指任何一个明确定义功能的操作都 可以被使用者看作单个的实体,尽管这个操作 实际上可能由一系列更低级的操作完成
Fortran, Algol: 整型、实数、布尔数
第二阶段:从基本类型到用户自定义类型
Algol68, Pascal
第三阶段:从用户自定义类型到抽象数据类型 (Abstract Data Types)-- 面向对象
模块化程序设计和模块
面向对象的分解好在何处?
Reusability: 数据(结构)及其上之操作的整 体复用,而非仅仅复用操作功能;
对象刻画问题
主要问题:如何描述程序对象(数据结构)?
Completely Unambiguously Without overspecifying?
(Remember information hiding)
A stack, concrete object
capacity
(array_up)
“结构化”的基本思想已经深入人心
但对于复杂、易变、交互性软件系统,以“功 能”为中心的分解方式有局限
完全自顶向下的功能分解? 线性过程式的程序组织?
应变?
The first step
程序运行:在某个数据体上施以某些操作。 两个要素
操作(功能)Functions [or: Operations, Actions] 客体(对象)Objects [or: Data]
代数规范
语法部分
ADT名 运算(函数)的定义域和值域
公理部分
给出一组刻画各运算之间相互关系的方程来定义各 运算的含义