第九章 面向对象方法学引论
? 传统方法学的缺点
? 软件工程的新途径
? 基本概念
? 面向对象建模
? 对象模型
? 动态模型
? 功能模型
传统方法学的缺点
? 9.1.1 存在的问题
? 9.1.2 出现问题的原因
传统方法学的缺点
? 存在的问题
? 生产率提高的幅度远不能满足需要
? 软件重用程度很低
? 软件仍然很难维护
? 软件往往不能真正满足用户需要
传统方法学的缺点
? 出现问题的原因
? 瀑布模型的缺点
? 僵化
? 瀑布模型要求
? 生命周期各阶段间遵守严格的顺序
? 预先定义并“冻结”软件需求
? 实际情况
? 软件开发往往在反复实践中完成
? 某些系统的需求的一个逐渐明确的过程,且预先定
义的需求到软件完成时可能已经过时
软件工程的新途径
? 9.2.1 快速原型法
? 9.2.2 面向对象方法学
? 9.2.3 两种新途径的结合
软件工程的新途径
? 快速原型法
? 适用于用户驱动的系统(即需求模糊或随时间
变化的系统)
? 抛弃原型法
? 演化原型法
? 螺旋模型
? 渐增模型
? 演化原型法与传统方法最大的不同,在于它是
一种 高度迭代的动态方法,系统的初始版本很
早就交付用户试用
软件工程的新途径
? 面向对象方法学
? 特点
? 尽可能模拟人类习惯的思维方式,即问题域与求解
域在结构上尽可能一致。与传统方法相反,OOM以
数据或信息为主线,把 数据和处理结合 构成统一
体 —— 对象。这时程序不再是一系列工作在数据上
的函数集合,而是相互协作又彼此独立的 对象 的集

软件工程的新途径
? 面向对象方法学
? 四要素
? 对象 (object)
? 世界由 对象 组成
? 类 (class)
? 对象 可划分为 类 ;单个对象可视为某一类的 实例
? 继承 (inheritance)
? 类可分层,下层 子类 与上层 父类 有相同特征,称为 继承
? 消息 (message)
? 对象间只能通过发送 消息 进行联系,外界不能处理 对象 的内部
数据,只能通过 消息 请求它进行处理(如果它提供相应消息的
话)
软件工程的新途径
? 面向对象方法学
? 优点
? 与人类习惯的思维方法一致
? 稳定性好
? 可重用性好
? 可维护性好
? 面向对象的软稳定性好
? 面向对象的软件比较容易修改
? 比较容易理解
? 易于测试和调试
软件工程的新途径
? 两种新途径的结合
? 瀑布模型
? 需求稳定少变化
? 对环境较熟悉(低风险)
? 用户很少参与开发
? 面向过程编程
? 螺旋模型
? 需求可能在开发早期有变化
? 对环境较熟悉(中风险)
? 用户不同程度地参与整个过程
? 面向对象编程 OOP
软件工程的新途径
? 两种新途径的结合
? 渐增模型
? 需求随时可能变化
? 对环境不熟悉(高风险)
? 用户完全参与开发
? 面向对象编程 OOP
基本概念
? 9.3.1 对象
? 9.3.2 其他概念
基本概念
? 对象
? 定义 1
? 对象是具有相同状态的一组操作的集合。
? 这个定义主要是从面向对象程序设计的角度看, 对
象, 。
? 定义 2
? 对象是对问题域中某个东西的抽象,这种抽象反映
了系统保存有关这个东西的信息或与它交互的能 力。
也就是说,对象是对属性值和操作的封装。
? 这个定义着重从信息模拟的角度看待, 对象, 。
基本概念
? 对象
? 定义 3
? 对象::= (1D,MS,DS,MI>
? ID是对象的标识或名字
? MS是对象中的操作集合
? DS是对象的数据结构
? MI是对象受理的消息名集合 (即对外接口 )
? 这个定义是一个形式化的定义。
基本概念
? 对象
? 特点
? 以数据为中心,不设与数据无关的操作;
? Object主动处理 而不 被动地等待被处理,外部只能
通过 message请求操作;
? 具有黑盒性,外部操作时,无须知道该 object内部的
数据结构及算法;
? 具有并行性,不同 object各自独立地处理自身数据,
彼此间仅通过传递 message完成通信;
? 模块独立性好,内聚强、耦合松
基本概念
? 其他概念
? 类 (Class),具有相同数据和相同操作的一组对象
? 实例 (Instance),某个 class描述的具体对象
? 消息 (Message),= object_ID,method_ID (parameter(s));
? 方法 (Method),object能做的操作,亦称为 service,
responsibility,在 class 中须定义相应的代码
? 属性 (Attribute ),object 的固有数据
? 继承 (Inheritance),子类自动共享父类的 attributes 和
methods,而不必重复定义
? 多态性 (Polymorphism),不同层次的 classes 可共享一个
method名,但按各自的方式来实现这种 method
? 重载 (Overloading),不 同函数共用一个名字,而调用参
数的特征不同
面向对象建模
? 面向对象建模
? 描述系统数据结构的对象模型 (object model).
? 描述系统控制结构的动态模型 (dynamic model).
? 描述系统功能的功能模型 (function model).
对象模型
? 9.5.1 表示类 --&--对象的图形符号
? 9.5.2 表示结构的图形符号
? 9.5.3 例子
对象模型
? 表示类 --&--对象的图形符号
类名
属性
服务

类名
属性
服务
类 -&-对象
对象模型
? 表示结构的图形符号
父 类
子 类 1 子 类 2
Inductive relation
子类 is_a父类;是
class间的关系,直
线端点进入虚框。
整 体
部分 1 部分 2
Combinative relation
是 object间的关系,有
传递性。多层关系例子
见教材 p.198图 9.7。
1,m 0,n
动态模型
? 术语
? 事件 (event),引发 object 状态改变的控制信息(瞬时)
? 状态 (status),即 object 的 attributes 所处的情形(可持
续)
? 行为 (action),Object 要达到某种 status 所做的操作(耗
时)
动态模型
? 表示方法
初始事件 状态 1
do,行为 1
状态 2
do:行为 2
事件 1 事件 2
开始 结束
[条件 1]
功能模型
? 表示方法
? 数据流图
? 与其他两种模型的关系
? 对象模型:做什么
? 动态模型:何时做
? 功能模型:操作的实体