软件工程
电子教案
王树林
PART FOUR
OBJECT-ORIENTED
SOFTWARE ENGINEERING? What are the basics concepts and principles that
are applicable to object-oriented thinking?
? How should object-oriented software projects be
planned and managed?
? What is object-oriented analysis and how do its
various models enable a software engineer to
understand classes,their relations and behaviors?
? What is a ‘use case’ and how can it be applied to
analyze the requirements of a system?
Chapter 19 OBJECT-
ORIENTED CONCEPTS AND
PRINCIPLES
WE LIVE IN A WORLD OF OBJECTS.
面向对象的概念和原则
面向对象的分析
面向对象的测试
面向对象系统的技术度量
面向对象的软件工程面向对象的软件工程
面向对象的范型 ( Paradigm)
? 范型又称为开发模式、范例、风范或
模式 (Pattern)。范型定义了
– 特定问题和应用的开发过程中将遵循
的 步骤 ;
– 确定将用于表示问题和解的那些成分
的 类型 ;
– 利用这些成分表示与问题解决有关的
抽象 ;
– 直接得到问题的 结构 。
? 范型的选择影响到整个软件开
发生存期 。就是说,它支配了
– 设计方法
– 编码语言
– 测试和检验技术
?类和对象
?属性
?操作、方法 +和服务
?消息
?封装、继承和多态
面向对象的概念
? Coad和 Yourdon给出了一个定义:
,面向对象 =对象 +类 +继承 +通信, 。
? 如果一个软件系统是使用这样 4
个概念设计和实现的,则我们认为
这个软件系统是面向对象的。
? 一个面向对象的程序的每一成份应
是 对象,计算是通过 新的对象的建
立 和 对象之间的通信 来执行的。
面向对象 ( Object-oriented)
对象 ( object)
? 对象 是面向对象开发模式的 基本成
份 。
? 每个对象可用 它本身的一组属性 和
它可以执行的一组操作 来定义。
? 属性 一般只能 通过执行对象的操作
来改变 。
? 操作 又称为方法或服务,它 描述了
对象执行的功能,若通过消息传递,
还可以为其它对象使用。
对象继承类的
所有属性和操作
对象,chair
cost
dimensions
weight
location
color
buy
sell
weigh
move
类,Furniture
cost
dimensions
weight
location
color
buy
sell
weigh
move
对象,chable
cost
dimensions
weight
location
color
buy
sell
weigh
move
? 消息是一个对象与另一个对象的通
信单元,是要求某个对象执行类中
定义的某个操作的规格说明。 发送
给一个对象的消息定义了一个 方法
名 和一个 参数表 (可能是空的),
并 指定某一个 对象 。
? 一个对象接收的消息则调用消息中
指定的 方法,并将 形式参数与参数
表中相应的值结合起来 。
消息 ( Message)
? 类是一组具有 相同数据结构 和
相同操作 的对象的集合。
? 类的定义包括 一组数据属性 和
在数据上的一组合法操作 。
? 类定义可以视为一个具有类似
特性与共同行为的对象的 模板,
可用来产生对象。
类 (class)
? 在一个类中,每个 对象 都是 类
的实例 (Instance),它们都可使
用类中提供的函数。
? 对象的状态则包含在它的实例
变量,即实例的属性中。
? 类常常可看做是一个 抽象数据
类型 (ADT)的实现。但更合适的
是把类看做是某种 概念的模型 。
? 封装 是将 OO的类和从类导出的对象的
数据和数据上的操作放在同一个包
( package) 中,
? 数据和过程的内部实现细节对外界隐藏
( 信息隐藏 ), 这减少当变化发生时副
作用的传播 。
? 数据结构和对它们的操作被合并在单个
名字的实体 ( 类 ) 中, 这将便于构件的
复用 。
? 简化被封装对象间的接口 。
封装 (Packaged)
继承 (Inheritance)
? 继承 是 使用已存在的定义做为基础
建立新定义 的技术 。
? 新类的定义可以是 既存类所声明的
数据 和 新类所增加的声明 的组合 。
新类复用既存的定义, 而 不要求修
改既存类 。
? 既存类可当做基类来引用, 则新类
相应地可当做派生类来引用 。
类的继承层次
多态 ( Polymophism)
? 多态就是 指一名多用, 如多条
同名的消息传递给不同的对象,
消息引发的对象行为可以不同 。
? 多态的实际表现为同一名字的
函数 ( 方法 ) 在不同类中实现,
处理和结果可能不同 。
? 多态是大大减少于扩展现存 oo
系统所需的工作量的特性 。
标识对象模型的元素
?标识类和对象
?表示属性
?定义操作
?完成对象定义
? 面向对象分析的第一个层次主要
是 识别类和对象 。
? 类和对象是 对与应用有关的概念
的抽象 。不仅是说明应用问题的
重要手段,同时也是构成软件系
统的基本元素。
? 这一层工作是整个分析模型的基
础。
识别类和对象
?保留的信息
?需要的服务
?多个属性
?公共属性
?公共操作
?必要的需求
选择标识类和对象的原则
? 下一个层次称为属性层,对前
面已识别的类和对象做进一步
的说明。在这里,对象所保存
的信息称为它的 属性 。
? 类的属性 所描述的是状态信息,
每个实例的属性值表达了该实
例的状态值。
标识属性
? 找出属性
? 将属性安放到适当的位置
? 找出实例连接
? 检查特殊情况
? 描述属性
? 考虑取值范围、极限值、缺省值、
建立和存取权限、精确度、是否会
受到其他属性值等。
标识属性的方法和策略
属性层
定义操作(服务)
? 对象收到消息后所能执行的操作称
为它可提供的服务。
? 对每个对象和结构的 增加, 修改,
删除, 选择 等服务 有时是隐含的,
在图中不标出,但在存储类和对象
有关信息的对象库中有定义。
? 其它服务则必须显式地在图中画出。
服务层
定义服务的方法和策略
? 找出每一个对象的所有状态,在
各种状态需要做的工作。利用状
态迁移图;
? 找出必要的操作。
? 建立消息连接。
? 描述服务:利用状态转换图、脚
本和事件追踪图,描述服务的功
能。
面向对象软件项目的管理
? OO的公共过程框架
? 面向对象项目的度量和估算
? 一种 oo估算和进度安排方法
? 面向对象项目的跟踪过程
OO的公共过程框架
? 公共过程框架 common process framework(CPF)
定义了组织的软件开发和维护途径,它标识了
用于建造和维护软件的软件工程范型以及需要
的任务、;里程碑和可交付的产品。
? 递归 /并行模型是由 Ed Berard和 Grady Booch建
议用来进行面向对象软件开发
– 将问题系统地分解为高度独立的构件
– 对每个独立构件进一步进行分解(此即递归过
程)
– 对所有构件的分解工作同时进行(此即并行部
分)
– 继续此过程直至完成。
OO项目的典型过程序列
计划 分析 设计 提取可复用类 原型 测试 客户评估 第 n个增补
计划 分析 设计 提取可复用类 原型 测试 客户评估 下一个增补
计划 分析 设计 提取可复用类 原型 测试 客户评估 第一个原 型
分析 设计分析 设计
计划 分析 设计
复审及精化
复审及精化
复审及精化
复审及精化
? 场景脚本的数量 场景脚本是描述用户和应
用间交互的详细的步骤序列,每个脚本被组
织为如下形式的三元组:
{initiator,action,participant}({发起者、动
作、参与者 })
? 关键类的数量。关键类是在 OOA早期定义
的“高度独立的构件”,是问题域的核心。
? 支持类的数量。支持类是实现系统所需要的,
但不是和问题域直接相关的。
? 子系统的数量。子系统是支持对系统的终端
用户可见的某功能的类的集合
面向对象项目的度量和估算
一种 OO估算和进度安排方法
? 使用工作量分解,FP分析以及任何其他可应
用于传统应用的方法来进行估算。
? 使用 OOA开发场景脚本并确定脚本数量。
? 使用 OOA,确定关键类的数量。
? 划分应用的界面类型并确定支持类的倍数:
Lorenz和 Kidd提出了下面的估算方法:
界面类型 倍数
非 GUI
基于字符的用户界面
GUI
复杂的 GUI
2.0
2.25
2.5
3.0
一种 OO估算和进度安排方法 (续 )
? 将全部类数量(关键类 +支持类)和每
个类的平均工作单元相乘。
? 通过乘上每个场景脚本的平均工作单
元,对集于类的估算进行交叉检查。
将关键类数量和上面的倍数相乘可得到
支持的数量的估算
Lorenz和 Kidd提出了进度安排的度量方法:
主要的递进的次数
面向对象项目的跟踪过程
技术里程碑,OO分析完成
?已经定义和复审了所有类和类层次
?已经定义和复审了和类关联的类属性和操作
?已经建立和复审了类关系
?已经建立和复审了行为类型
?已经注注释了可复用类。
技术里程碑,OO设计完成
?已经定义和复审了子系统集
?分配类到子系统并通过复审
?已经建立和复审了任务分配
技术里程碑,OO编程完成
?已经根据设计模型编码实现了每个新类
?已经集成了提取出的类(从复用库)
?已经建造原型或增量
技术里程碑,OO测试
?已经复审了 OO分析和设计模型的正确性和完整性
?已经开发和得审了类 -责任协作网络
?设计了测试用例,并用已经对每个类进行了类一级
的测试
?设计了测试用例,并且完成集簇测试,完成类的集

?完成系统级的测试