*
面向对象技术
*
*
*
课程特点
面向对象是一种全新的思考方式
该课程以概念为基础,为主线
注重建模和视图
提供统一建模语言UML和开发工具Rose
*
课程简介
面向对象的概念
面
向
对
象
的
软
件
开
发
面向对象的
需求与用例技术
面向对象的分析(建立对象模
型、动态模型、功能模型)
面向对象的编程
面向对象的测试
U
M
L
建
模
面向对象与软件复用
*
章节与内容
传统软件开发
的问
;
面向对象软件开发的由来;
面向对象软件开发的范型;
面向对象的概念;
面向对象UML的符号。
第1章 概述
*
章节与内容
需求的收集及确认;
用例、参与者、用例图;
前置条件、后置条件、活动基本过程。
第2章 需求与用例技术
*
分析方法简介;
确定对象的方法:
- 实体到对象方法;
- 名词方法;
- 责任驱动方法;
建立对象模型:
确定属性、建立关联、建立结构、给出初始类图;
建立动态模型:对象顺序图、协作图、状态图、活动图;
建立功能模型:DFD图;
典型实例介绍。
第3章 面向对象的分析
章节与内容
*
从分析转为设计;
问题范围的设计;
人机交互的设计;
数据管理的设计;
任务管理的设计;
给出完整类图。
第4章 面向对象的设计
章节与内容
*
面向对象的编程风格;
面向对象语言的分类;
从设计到编码;
编码的几个原则。
第5章 面向对象的实现
章节与内容
章节与内容
传统测试方法的可用性;
类的测试;
类的交互测试。
第6章 面向对象的测试
*
章节与内容
软件复用;
面向对象与软件复用的关系;
基于复用的软件开发;
基于构件的软件开发。
第7章 面向对象与软件复用
*
章节与内容
统一建模语言UML是软件设计与需求
规范语言。
第8章 统一建模语言
*
深入理解面向对象的概念;
掌握面向对象的建模过程;
掌握建模语言UML,ROSE工具;
设计健壮的、可扩展的、可复用的、
可维护的软件系统。
*
课程目的
*
1. 单词背诵系统
2. KTV点歌系统
3. 企业人事管理系统
4. 实验教学管理系统
5. 超市销售管理系统
6. 学籍管理系统
7. 个人博客系统
实践作业
分析和设计下列问题之一,并写出文档。
*
8. 基于图像的试卷识别系统
9. 网上售书平台
10. 公寓管理系统
11. 网吧管理系统
12. 桌面搜索引擎
13. 学生成绩综合分析系统
14. 企业人力资源管理系统
15. 城市停车诱导系统
16. 电子市场管理系统
实践作业
*
17. 局域网文件搜索系统
18. 医药超市管理系统
19. 网上购物系统
20. 教学网站学生管理系统
21. 网上书店系统
22. 高校宿舍网络管理系统
23. 基于搜索引擎的网络图片爬虫系统
24. 高校排课管理系统
25. 自选
实践作业
正文内容:
1. 需求分析—文字描述
(1) 功能性需求——关于系统做什么的描述;
(2) 非功能性需求——关于系统约束的描述;
(性能、可靠性、环境等)
(3) 用例的文字描述
# 用例名称;
# 用例的简要说明:该用例的作用;
如,买车票用例供客户浏览客户航班信息、查询
和用信用卡买票。
*
面向对象文档内容
# 前提条件:用例开始前必须满足的条件,可能是另一个
己执行的用例,或用户具有运行当前使用用例权限;
# 主流事件和其他事件流:从用户角度关注做什么,事
件流描述执行用例;
# 事后条件(也可缺省):用例结束后执行的动作。
如,一个用例结束后,必须运行另一个用例。
2. 需求分析建模
(1) 领域模型——可用活动图描述;
(2) 定义系统的外部行为use case图
参与者、用例、边界、参与者与用例通信。
*
面向对象文档内容
3. 建立包图,用用例进行分组
4. 建立初始类图:确定属性和关联,常规操作
5. 建立动态模型:确定类中的复杂操作
6. 建立完整的类图
7. 建立组件和展开图——面向对象的设计
8. 进行数据存储设计
9. 进行人-机交互设计
10. 写出伪码
11. 结论
12. 参考文献
(打印,装订好, 提交)
*
面向对象文档内容
*
参考教材
The Application Developer’s guide to object orientation and the UML
《面向对象软件开发教程》 [加] Scott w.ambler 机械工业出版社
Object-oriented Design & patterns
《面向对象的设计与模式》[美] Cay Horstmann 电子工业出版社
Appling UML and patterns An Introduction to object-oriented Analysis and Design
《UML和模式应用》 [美] Craig Larman 机械工业出版社
面向对象技术与UML, 刘振安等编著, 机械工业出版社,2007.4
面向对象的系统分析,邵维忠,杨芙清著,清华大学出版社,2001.9
*
其它的参考读物
国际上和面向对象技术有关的刊物, 如:
IEEE Software
Journal of Systems and Software
UML’1998,UML’1999,UML’2000,UML’2001,UML’2002,UML’2003
http://www.rational.net
Rational Developer Network (RDN)
http://www.uml.org
IEEE Software
http://www.omg.org/uml/
OMG: Object Management Group
*
面向对象的概念
面向对象的软件开发模型
第1章 绪论
*
理解并掌握如下概念
类和对象
对象和实例
对象和变量
实例变量与类变量
方法与操作
抽象类和抽象方法
两种方法的本质区别
面向对象的软件开发模型
*
1.1 传统软件开发方法的问题
模型阶段性
模型的顺序性
以功能为主的方法,功能易变
模块的封装性、可重用性差,接口易变
没有很好解决软件开发中的两个经典问题
大峡谷
北端
大峡谷
南端
数据模型
处理模型
科罗拉
多河
传统方法,数据和功能各自描述系统的一部分,两种模型表示角度不同,若合起来,对一致性、精确性难以验证。
OO的对象模型解决了此问题。
两个经典问题:问题“1”
图1-1 经典问题“1”
*
两个经典问题:问题“2”
分析模型
设计模型
大峡谷
北端
科罗拉
多河
大峡谷
南端
传统方法,分析和设计两个阶段描述工具不同,需要转换,重新建立模型,向程序员解释编程要求。
OO方法的设计是对OOA的扩展。
图1-2 经典问题“2”
*
*
面
向
对
象
的
发
展
过
程
1.2 面向对象方法的由来
图1-3 面向对象方法的发展
*
Simula (Dahl and Nygaad)—模拟现实世界对象的行为。
60年代末,挪威奥斯陆大学和挪威计算中心研制的创建了
第一个OO系统。
Ada (G.Booch)—具有对象的特征,是一个基于对象的语言。
70年代,G.Booch在研究Ada软件开发中,提出了OO思想,
创建了Ada的程序包。
Smalltalk (美国Xerox Parc研究中心A.Key研制)
72年,推出Smalltalk72---有对象的概念;
76年,推出Smalltalk76---有类的概念;
81年,推出Smalltalk80和环境---全面体现了OO程序设计语
言的特征。
1.2 面向对象方法的由来
Objective-C (Cox 1986,Cox and Novobilski 1991)。
支持多态、信息隐敝。
C++ ( 1980,贝尔实验室的Bjarne Strousrup)
支持抽象、继承、自动引用、动态绑定、操作符重载等,
但维护困难。
Eiffel (Myeer 1990)
有断言,解决正确性、健壮性、可移植性、效率等。
Java (Sun 公司 James Gosling 1990)
在Sun World95年会上公布。
Java=C++ -复杂性和奇异性+安全性和可移植性。
*
1.2 面向对象方法的由来
1.3 面向对象与面向过程的软件开发区别
1.3.1 方法的区别
1.3.2 分析与设计的区别
1.3.3 程序的区别
*
1.3.1 方法的区别
*
(1) 面向过程方法是开发人员按计算机的结构去思考问
题。
(2) 面向过程方法是开发人员在问题空间和解空间进行
对应。
面向对象方法是以对象(事物)代表求解问题的中
心环节,是按解决问题的方式去思考问题。
面向对象的方法,是现实的问题空间与软件系统的
解空间的近似和直接模拟,使人们对复杂系统的认
识过程和程序的实现过程尽可能一致。
*
(3) 面向过程方法以函数过程和数据结构为中心建模,用
计算机的术语描述问题。
面向对象的方法是对求解问题本身建模,用问题本
身的术语描述问题。
1.3.1 方法的区别
*
函数和
过程
举例:某所大学信息系统的设计
结构化的方法:
将定义数据库的布局和程序的设计来访问这些数据。
数据库中存有关于学生、教授、教室以及课程的信息。
程序可以让用户登记学生的选课情况,分派教授授课,安排授课教室等。程序可以访问并更新数据库。
*
面向对象的方法:
学生、教授、教室和课程等被当成对象来考虑。
定义一组能进行交互的类(类,class是相似对象的一种通用表示)。
这样的类将包括功能(程序)
和数据的抽象。
举例:某所大学信息系统的设计
*
1.3.2 分析与设计的区别
图书馆信息系统
Catalog
Librarian
Book
Library
System
Record
Loans
Add
Resources
Report
Fines
图1-6 按对象概念分解
图1-7 按功能或过程分解
面向对象
分析与设计
面向过程的
分析与设计
分而治之
分析和设计的采用一致的概念、原则、表示法
1.3.3 程序的区别
面向对象的程序 = 对象+消息
存
款
取
款
图1-9 面向对象的储蓄处理事务
银行账户对象
数据和施加在其上的操作分离;
代码按过程组织的,每个过程
操作不同类型的数据。
外部消息
利息结算
利息结算
存款
取款
账户
余额
账户
余额
图1-8 面向过程的储蓄处理事务
在面向对象中,是在数据抽象内来组
织过程即代码是按类组织的,每个类
包含对该类实例进行操作的过程。
面向过程的程序 = 数据结构十算法
*
*
1.4 面向对象的范型
1.4.1 喷泉模型
1.4.2 OO软件开发生命周期
1.4.1 喷泉模型 (fountain model)
*
图1-10 喷泉模型
1990年,B.Henderson seller和J.M.Eduarols在其“面向对象系统生存期”一文提出的OO开发的七点框架,并以Bailin提出的实体数据流图或信息流图作底层工具,而构思的面向对象生存期的喷泉模型。
无隙性:各阶段无明显界限
复用:支持分析和设计结果
的自然复用;
概括、聚集对客观世界对象
的模型化。
*
1.4.2 OO软件开发生命周期
图1-11 OO软件开发生命周期
*
1.5 面向对象的概念
面向对象概念的提出:
使描述问题的问题空间和解决问题的方法空间一致(概念上、处理行为上一致)
按问题领域的基本事物实现自然分割
按人们思维方式建立问题域模型
演绎思维(从一般到特殊)
归纳思维(从特殊到一般)
为此,必须建立直接表现组成问题域的事物,及这些事物间相
互联系的概念,建立适应人们一般思维方式的描述范式。
Coad和Yourdon给出了面向对象的定义:
面向对象=对象+类+继承+通信
*
问题空间的对象: 现实世界中任何实际存在的事物都是对
象 ( 是对实体概念的一种描述)。
物理实体
软件实体
概念实体
1.5.1 对象(Object)
*
对象是一个具有封装了的数据结构和操作的实体,这
个实体有一个标识它的名字,对外通过相应的接口,
提供相应的服务。计算机程序中的对象是具有三个特
征的实体:标识、状态、行为。
方法空间的对象: 是对某个事物的抽象描述。
Object::=(OID,DS,OS,MI)
1.5.1 对象(Object)
*
对象特征 (对象的属性和行为)
属性
Atribute
描述对象“静态”(结构)特征的一个数据项;
属性是对象知道的事情;描述对象的当前状态。
操作
Operation
描述对象“动态”(行为)特征的一个操作序列;
操作是调用对象执行的转换或查询的规格说明;
有可能改变对象的状态;操作是方法的抽象说明。
说明对象在什么条件下是可行的。
方法
Method
对象完成的事情。是操作的实现或执行操作的函数
或过程。是实现类的行为的过程抽象。
规格
思考:
属性完全相同的两个事物,是否是同一个对象? 举例。
两个教师姓名和职称都相同,但它们却是两个不同的对象。
所有的对象都是独立的实体,都有其唯一的标识。对象
之间的区别是由它们固有的存在性所决定的,而与它们
的特征是否相同无关。
*
*
类是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述。
1.5.2 类(Class)
(1) 类的定义
Class::=(ID, ATT, OPE, ITF, INH)其中ID类名,ATT属性集,OPE操作集,ITF接口消息集,INH类的继承性集。
(2) 类和对象
类可以是对象,但对象不是类;
类是对象的抽象描述;对象是类的实例;
实例:Instance具有身份和值的独立实体
概念层的类
Rectangle
height
width
getArea
resize
Rectangle
height:int
width:int
getArea():int
resize(int,int)
Rectangle
height
width
对象实例
p:Rectangle
height =10
width = 20
q:Rectangle
height =15
width = 25
(3) 类的描述几种情况
说明层的类
实现层的类
*
1.5.2 类(Class)
例如绘图中的点类:
x:int
y:int
move()
getX()
getY()
setX()
setY()
Point
用Java定义点类:
Class Point {
int nx; //点的x坐标
int ny; //点的y坐标
int nColor; //颜色值
void move(int x,int y);//
将当前点移到×、y处
int getX(); //获当前点X坐标
int getY(); //获当前点Y坐标
int setX();
int setY();
}
Point mypoint;//点类的一个对象
*
1.5.2 类(Class)
类是一个支持继承的抽象数据类型;
(4) 类的作用
类是创建(实例化)对象的模板,类是对对象的抽象;
类类似一张表,表内描述了数据和操作的封装体。
类是一个命名空间,为类的泛化声明建立作用域;
*
1.5.2 类(Class)
*
表示两个类之间是 “is a” ,“is like” 或“is kind of” 关系。
1.5.3 继承(Inheritance)
superclass
subclass
继承使两个以上的类共享相同的属性和/或相同方法。
继承提高了复用性。
继承的各个类可形成层次结构。
继承集中的属性,只能声明一次。操作可以被多次声明,只要声明相同。
*
1.5.4 消息(Message)
消
息
包
括
的
信
息
消息是一个对象向另一个对象发出的服务请求 (操作的
请求、执行方法的请求),要求系统的某个 对象完成它
指定的操作。
*
为不同的目的建立不同层次上的抽象,并将不同层次上的同一概念的两种元素联系起来的依赖关系,一个元素比另一个元素更详细。
1.5.5 抽象(Abstraction)
抽象是确定一个事物的本质特征的行为,使这个事物与其他事物区分开。
抽象是自底向上的对几组事物观察,找出事物的共性,把具有共性的事物划分成一类。
*
抽象类 abstract class
抽象类是不能被直接实例化的类,即它没有直接的实例。
对象是对问题域中某些事物的抽象;
类是对对象的一个抽象;
1.5.5 抽象(Abstraction)
*
具体类
图1-12 具体超类产生模糊性
1.5.5 抽象(Abstraction)
*
抽象类
图1-13 抽象超类避免模糊性
1.5.5 抽象(Abstraction)
*
1.5.6 封装(Encapsulation)
将数据(属性)和方法(服务)结合成一个独立的系统单位。隐藏了对象的内部细节:信息隐蔽(information hiding)
封装性的条件
*
封装的意义
表达事物的静态特征和动态特征(是事物不可分割的两个侧面)。
封装性使我们只要注意该对象对外呈现什么行为(做什么),而不关心内部的实现细节 (怎么做)。可以避免外部入侵,提高软件的可维护性、可修改性。
描述系统中的功能是如何划分的。
*
1.5.7 多态性(Polymorphism)
在面向对象中,多态性使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。
说
明
多态性表示了对象属于多个类的能力。
抽象操作是多态的,抽象操作可以在不同的类中按不同方式执行。
多态性增加了OO的灵活性,减少冗余信息,提高可重用性,可扩展性。
在OO语言中,多态性的实现与下列概念有关:
同样的操作可用于一个类型及其子类型。在子类中,对继承类的属性或服务进行重新定义。
——动态绑定 (dynamic binding)
程序在运行时,根据对象接受的消息,动态地确定要连到哪一段代码上。程序设计中,运行期决定对象和分配存储能力为动态绑定。
——参数多态(parametric)
参数多态是指一个可参数化的类模板中包含的操作所涉及的类型必须用类型参数实例化。
*
——包含多态 (inclusion)
多态性显著提高了软件的可重用性和可扩充性。
用户可以发送一个通用的消息,而实现时的细节则由接收对象自行决定,这样同一消息可以调用不同的方法,增加了系统的灵活性 。
*
包含多态(inclusion)
Shape类
图1-15 画图系统中类的继承关系
各种图形具有共同的属性和操作:颜色、线型、旋转、移动。但在不同图形中对Draw的描绘虽然不同,外界都可以采用以下方式调用:
Shape *aShape;
Line *aLine;
aLine = new Line;
aShape = oLine;
aShape->draw();//
调用的是类Line的方法。
为外界调用提供统一的接口,使对图形扩充成为可能。
*
*
1.5.8 永久对象(Persistent object)
就是对象的生存期可以超越程序的执行时间而长期存在的对象
*
面向对象术语表
抽象类
(abstract class) 对象不能从中实例化的类
抽象(abstraction) 确定一个事物本质特征行为,属性化为一类
聚合(aggregation) 表示两个类或组件之间是“is part of”关系
聚合层次 (aggregation hierarchy) 通过聚合联系的一组类
关联(association) 对象之间的联系
属性(attribute) 类知道的东西(数据信息)
基数(cardinality) 表示概念“多少”
类(class) 相似对象的软件抽象,创建对象的模板
内聚(cohesion) 封装单元(如类或组件)的相关程度
协作(collaboration) 类协作来完成他们的
组件(component) 内聚功能单元(独立开发或与其他组件构成较大单元)
*
组合 (composition) 更强类型的聚合,“整体”对象唯一,包括它的各个部分
具体类 (concrete class) 对对象实例化的类
耦合 (coupling) 两个模块的依赖程度
封装(encapsulation) 把数据和方法结合为一个独立的系统单位
信息隐藏
(information hiding) 限制外部对象属性的访问
继承(inheritance) 表示“is a” 和“is like”关系
继承层次
(inheritance hierarchy) 通过继承相联系的一组类
实例(instance) 具有身份和值的独立实体,对象是类的一个实例
实例化(instantiate) 从类中实例化对象
*
接口(interface) 定义内聚行为的一个或多个操作特征标记的集合
消息(message) 是信息请求或执行一个动作的请求
传递消息(messaging) 为了协作,类相互发送与接收消息
方法(method) 类完成的事情(函数或过程)
多重继承
(multiple inheritance) 类直接从一个以上的类继承
对象(object) 客观世界实体。如一个人,地址等
对象空间(object space) 主存,加上网络上所有可提供使用的存储空间
选择 (optionality) 多个事物,找出你想要的事物
覆盖(override) 有时在子类中你需要覆盖(重定义)属性和方法
*
模式(pattern) 通过问题的可复用
持久性(persistence) 对象永久被保存问题
持久对象
(persistent object) 保存到永久存储的对象
多态(polymorphism) 同一属性或服务在一般类及特殊类中语义不同
单一继承
(single inheritance) 一个类直接从唯一的一个类中继承
子类(subclass) 若类B继承自类A,则B是A的子类
父类(super class) 若类B继承自类A,则A是B的父类
临时对象(transitory) 一个没有被保存到永久存储的对象
构造型(stereotype) 表示一种建模元素的通用方法
*
面向对象的符号表示-UML表示法1
(UML,Unified Modeling Language)
类
活动类
Name:class
Oname:class[Role]
角色
对象
多对象
关联
Aname
泛化
子
类
父
类
实现
实
现
规
格
说
明
A依赖B
A
B
Kind
扩展
extend
被扩展
用例
*
面向对象的符号表示-UML表示法2
*
面向对象的符号表示-UML表示法3
输入事件
构件
节点
包
输出事件
Nname
Pname
提供者
客户
实现
接口
使用
Tname
P:Type
模板
注释
*
Rose工具中的类符号
实体类符号
Class
《entity》
控制类符号
Class
《control》
*
Rose工具中的类符号
用户界面类符号
《interface》
《boundary》
图标
形式
修饰
形式
标签Label形式
本章结束
*
*
*