第九章 面向对象方法学引论
?传统方法学的缺点
?软件工程的新途径
?面向对象的基本概念
?面向对象建模
–对象模型
–动态模型
–功能模型
传统方法学的缺点
? 几十年的实践证明,传统的生命周期方法
学不能消除软件危机,软件产业仍然存在
以下问题:
– 生产率的提高仍然不能满足日益增长的软件
需求。
– 软件重用程度很低。
– 软件维护十分艰难。
– 软件需求很难把握,目标系统往往不能真正
满足用户的需求。
以上问题产生的原因
? 僵化的瀑布模型
– 某些类型的系统需求是模糊的
– 项目参与者之间存在通信鸿沟
– 预先定义的需求可能是过时的
? 结构化技术的缺点
– 系统稳定性差。 SA,SD的本质是功能分解,它是围绕实
现一个个处理功能的“过程”来构造系统的,而用户需
求的变化大部分是针对功能的。所以,一旦需求稍有变
化,就会引起系统结构的大变化。
– 难以修改和扩充。 SA,SD技术清楚地定义了目标系统的
边界,软件通过界面与客观世界通信。
– 数据和操作分离和模块化的任意性使得软件可重用性差。
软件工程的新途径
? 快速原型法
? 面向对象方法学
? 面向 Agent的软件工程
快速原型法
? 两类不同的软件系统
– 全部需求能够预先精确定义的软件系统
– 需求难以预先定义的软件系统
? 原型法的基本思想
– 快速建立一个能够反映用户主要需求的原型系统,
让用户评价是否符合其需求。如果满足需求,说
明 SRS正确、完备和一致;否则,对原型系统进
行修改,再给用户评价。
? 用原型法开发软件的过程
– 抛弃原型法
– 演化原型法
基于原型系统的两种开发模型
? Boehm提出的螺旋模型
– 分析,建原型,评价与修改;
– 设计,建原型,评价与修改;
– 程序设计,建原型,评价与修改
? Gilb渐增模型
– 完成一部分分析工作
– 完成一部分设计工作
– 完成一部分程序分析工作
– 建原型并评价
– 重复上述过程
面向对象方法学
? 人们认识世界的三个构造法则
– 认识和区分对象及其属性,如一棵树和树的大小。
– 认识和区分整体对象及其组成部分,如区分一棵树
和树枝。
– 认识和区分不同对象类的形成,如所有树的类和所
有石头的类的形成和区分。
? OO方法正好适应了以上法则
– 问题空间和解空间得到进一步的“拟合”,它们的
结构十分一致;
– 对数据和操作封装而形成一个统一体;
– 解空间中的对象行为更丰富,削弱了“语义断层”。
What is Object-Oriented?
? Object orientation is an approach to
software development that organizes
both the problem and its solution as a
collection of discrete objects;
? It is a kind of representation that
describe object’s data structure and
behavior.
? It is a kind of modeling technology.
OO方法所具有的四个要点
? 对象
– 认为客观世界是由各种对象组成的,任何事物都是
对象,复杂对象由简单对象以某种方式组成。
? 类
– 把所有对象按类划分形成对象类。
? 继承
– 整个系统由若干个对象类组成,类的等级形成系统
的层次结构,子类可以继承父类的相同特性。
? 消息传递
– 对象之间只能通过消息传递实现相互的联系,实现
对象的“封装”。
Characteristics of OO Representation
? Identity—name,reference,handle
? Abstraction
? Classification
? Encapsulation
? Inheritance
? Polymorphism
? Persistence
The OO Development Process
?Be consistency of
– terminology
–and of the problem and the solution were
described in same terms, classes,objects
methods,attributes,and behaviors,
?Be consistency of perspective
–Static views
–Dynamic views
–Restrictions
面向对象技术的优点
? 减弱“语义断层”,更好的刻画问题域,减
少了映射误差
? 稳定性好,控制变化性(客观世界中,实体
结构相对稳定)
? 便于复用
? 可维护性好,易于理解、测试、调试等。
? 消除或减少了软件开发各个阶段的鸿沟
– OOA?OOD?OOP
Tendency for Change when Using OO
Paradigm (Jacobson et al,1995)
Characteristic of software
product/project
Probability for
change
Objects derived from the application Low
Long-lived information structures Low
Passive object’s attribute Medium
Sequences of behavior Medium
Interface with the outside world High
Functionality High
面向对象技术的一些概念
? 抽象性 Abstraction
? 对象 Object
? 类 Class
? 消息 Message
? 继承性 Inheritance
? 封装性 Encapsulation
? 多态性 Polymorphism
? 重载 Overloading
面向对象技术
对象 Object
? 任何事物皆对象
? 对象的形象表示( P189 图 9.1)
? 对象的定义
– 定义一( OOD观):对象是一组具有相同状态的
操作的集合
– 定义二(信息模拟观):对象是问题域中某个东
西的抽象,它反映了系统保存有关这个东西的信
息或与它交互的能力,即对象是对属性值和操作
的封装。
– 定义三,Object,,= < ID,MS,DS,MI >
ID,MS,DS,MI分别是对象的标识、操作集合、数
据结构和消息名集合
Box Representing an Object’s
Name,Attributes,and Behaviors
Elephant
Color, text
Number of tusks,
integer
Weight, float
Height, float
Move_to (location)
Wash (date)
Feed (amount,date,time)
Operation
Method
Service
Reference
Handle
State
对象的特点
? 以数据为中心;
? 对象是 相对 主动的;
? 属性和操作封装,信息是隐蔽的。
? 对象独立处理自身的数据,并通过消息传
递进行通信,具有并行的性质
? 高模块独立性,对象是 OO软件的基本模
块,低耦合,高内聚。
? 对象具有唯一识别的功能,行为比较丰富
? 对象必须参与一个或多个对象类
类 Class
? 具有相同结构、操作,并遵守相同约束规则
的对象聚合成一组,这组对象集合称为对象
类,简称类。
? 类层次与类格( Hierarchy,Lattice)
– 子类、派生类
– 父类、基类、超类
? 类是对象的抽象
? 对象是类的实例( Instance)
– 类实例是由类所描述的一个具体对象。
– 如类抽象“中国人”的一个实例“王志东”
Forming a Hierarchy
Diesel Fuel
Octane (辛烷值)
Cost_per_gallon
Amount_remaining( )
Auto Fuel
Octane (辛烷值)
Cost_per_gallon
Amount_remaining( )
Fuel
Octane
Cost_per_gallon
Amount_remaining( )
Diesel Fuel Auto Fuel
Abstract class
? 消息就是某个操作的规格说明,其组成:
– 接收消息的对象
– 消息名(消息选择符)
– 零个、一个或多个变元
? 例如:对于类 Circle的一个实例 MyCircle,
如果使其以绿色在屏幕上显示,
MyCircle, Show ( GREEN );
消息 Message
方法与属性
? 方法(操作、服务)
– 对象所能执行的操作,即类中所定义的服务。
它是对操作算法和响应消息办法的描述。
– 在类 Circle中给出成员函数 Show (int color)的定
义。
? 属性是类中所定义的数据,是实体性质的
抽象
– 类实例都有其特有的属性值,如类 Circle定义
的圆心、半径和颜色。
继承性 Inheritance
? 继承性的含义
– 对象共享所在类的结构、操作和约束等语义特性
– 多层类层次的继承传递性
– 类格的继承(多重继承)
? 继承性的作用
– 继承性使所建立的软件系统具有开放性
– 继承是信息组织和分类的有效方法
– 提高代码可重用率和可靠性,降低开发工作量
类层次的结构继承

ID,int
地址,str
学生
学号,int
校名,str
教师
教师证,int
姓名,str
大学生
专业,int
入学年月,Date
小学生
专业,int
入学年月,Date
类层次的结构继承

ID,int
姓名,str
学生
学号,int
校名,str
大学生
专业,int
入学年月:

学生
大学生
ID,XXXX
姓名,XXX
学号,980001
校名:合工大
专业:计算机
入学年月,199809
实例:一位大学生
多态性与重载
? 多态性含义
– 把相同的操作施加于不同类型的对象,获得不同
的行为效果和结果。
– 在 C++中,多态性是通过虚函数( Virtual)实现的。
– 动态联编 (Dynamic binding),滞后联编。
? 重载 Overloading
– 运算符重载:同一运算符作用于多种数据类型上。
– 函数名重载:在同一作用域内的多个参数特征不
同的函数可以使用相同的函数名字。如方法
,Open”
– 静态联编,先前联编。
动态联编的例子
打印输出堆栈 S的内容:
for i=1 to top do
case S[ i ].type
Integer, Print_Integer(S[ i ].Object);
Float, Print_Char(S[ i ].Object) ;
String, Print_ String(S[ i ].Object) ;
Boolean, Print_ Boolean (S[ i ].Object);
利用动态联编后,设计者不须考虑数据的
结构合类型:
for i=1 to top do
Print( S[ i ] );
OO开发过程
? 类是分析、设计和实现的基本单元
? 类生存期
– 为利于复用,软件部件应当独立于具体的应用。
– 类应该是一个较高抽象层次上的完全的概念模型的表示,可
以为其他的系统复用。
– 类的生存期,从定义 \设计 \实现 \复用 … 一直到求精和维护。
? OO应用的一般开发过程
– 分析阶段 (领域分析及应用分析 )
– 高层设计 (设计应用的顶层视图,类的界面设计 )
– 实例创建 (应用域问题的最终解决 )
– 组装测试
– 应用维护 (如通过继承联系,加入新的行为或改变行为方式 )。
OO分析与高层设计
? 领域分析
– 参与人员,领域专家和系统分析员
– 目的,标识基本概念及领域特征,建立领域概念模型
– 多种领域分析模型,如 Goad的语义数据模型。
? 应用分析
– 将领域概念模型适配于当前的应用中。
? 对象建模 OMT
– 三视点模型
? 高层设计
– 设计系统结构,选择解决方案,把任务分配给子系统。
OO建模
? 模型是一种思考工具(图示符号和组织规则),
帮助我们把知识(术语、概念)规范地表示出来。
? OO软件的开发所要建立的三种模型:
– 对象模型:描述系统的数据结构
– 动态模型:描述系统的控制结构
– 功能模型:描述系统的功能
? 整个开发过程中,以上模型不断得以完善
– OOA,构造出完全独立于实现的应用域模型
– OOD,把求解域的结构逐渐加入到模型中
– OOP,对应用域和求解域的结构进行编码实现,
并进行测试验证
各种面向对象方法学
? Coad/Yourdon OOA/OOD方法
? Booch(基于原型的递归 /并行模型)
? Rumbaugh OMT(多角度刻画问题域 )
? Jacbson OOSE(强调 use case驱动 )
? UML?面向对象技术的集大成者
对象模型
? 表示“类 — &—对象”的图形符号( P196)

ID,int
姓名,str
学生
学号,int
校名,str
工人
工号,int
厂名,str
教材
书号,int
书名,str
封面
书名
作者,str

页码,int
题目,str
1,n
对象模型(续)
? 表示结构的图形符号
– 归纳关系,“一般 —特殊”,直线和半圆标记。
– 组合关系,“整体 —部分”,直线和三角形标记。
– 关联关系,反映对象间相互依赖、相互作用的关系,
一对一、一对多、多对多,直线标记。
? 阶,参与关联的对象的个数
? 链属性,关联链的性质,如文件和用户关联中的“访问
权限”。
? 限定,是一种特殊的链属性,可以有效减少关联的阶。
如目录文件关联中,对目录的限定“文件名”。
? 消息连接,一个对象为了完成自己的任务,需要借助于
另一个对象提供的服务,由从消息发送者指向消息接收
者的箭头线标记。
教师 书1+
文件 用户
访问
权限
目录 文件文件名
对象模型实例
P200
动态模型
? 作用与表示
– 着重于系统的控制逻辑和时序关系,
– 由 状态图 和 事件跟踪图 表示。
? 状态图
– 描绘对象的 状态
– 描述触发状态转换的 事件
– 描述对象响应事件而作出的 行为 。
? 事件
– 某个特定时刻所发生的事情,是对现实世界中的
“事情”的抽象,事件的发生会引起对象从一种
状态瞬间转换到另一种状态。
– 事件由一个对象发出,另一个对象接受。
动态模型(续)
? 状态
– 对某一时刻中属性的概括,是对象属性值的抽象。
– 状态规定了对象对事件的响应方式;不同的状态
响应相同的事件所产生的行为将不同。
– 状态具有持续性。
– 定义状态时,忽略不影响对象行为的属性;
– 例一“栈”的三个状态:空、满、半满行为。
– 例二:电话的状态图( P203)。
? 行为
– 指对象达到某种状态时所做的一系列处理操作。
状态图的表示
非空


状态 1
do:行为 1
状态 2
do:行为 2
初始事件 事件 1[条件 ] 结束事件
动态模型(续)
? 创建行为模型时,分析员所采取的步骤
– 评估所有的实例以完全理解系统中的交互序
列;
– 标识驱动交互序列的事件,理解这些事件是
如何和特定对象关联的;
– 为每个实例创建事件轨迹;
– 创建状态图;
– 复审行为模型,验证其精确性和一致性。
功能模型
? 表示方法,DFD
? 作用
– 从不同的角度对对象模型和行为模型的补充
– 定义“处理”,强调系统应该“做什么”
? 三种模型的关系( P204)
–, 对谁做”、“何时做”、“做什么”
动态模型 功能模型对象模型
P205
习题九
2,3,4,6,7
作业