,面向对象技术引论”幻灯片节选说明
以下公布课堂使用的部分幻灯片,仅供选修北京大学
计算机科学技术系“面向对象技术引论”课程的学生
复习功课时参考,不得翻印制作。
这里所提供的只是课堂讲授的部分内容,万不可误认
为这几幅幻灯片以外的内容都不要求掌握。
北京大学计算机科学技术系
本科生课程
面向对象技术引论
主讲教师 邵维忠
辅导教师 陈兆琪 戴耀飞
2000年 2月 —7月
一、教学内容及学时
1、基本知识
面向对象方法的基本概念、主要思想、特点、优势、历史与现状
2、面向对象的分析( OOA)
面向对象的分析方法,包括概念、表示法,OOA模型,OOA过程
3、面向对象的设计( OOD)
面向对象的设计方法,包括概念、表示法,OOD模型,OOD过程
4、面向对象的程序设计( OOP)
OOP的基本思想,几种典型的面向对象的编程语言
6、面向对象的数据库系统
OO-DBMS的基本原理,几种典型的 OO-DBMS
7、分布对象技术
分布对象的概念与意义,对象总线技术,CORBA和 COM(DCOM)/OLE
教学计划
要求:
1、基本知识
——清晰、准确、熟练地掌握面向对象方法的主要
思想、基本概念与原则。
2、面向对象的分析( OOA)
3、面向对象的设计( OOD)
——了解 OOA和 OOD的主要概念与操作过程,会应用。
4、面向对象的程序设计( OOP)
——掌握 OOP的基本思想,了解各种 OOPL的概念、
语言成分和主要特点,知道如何实现 OOA/OOD的有
关概念。
6、面向对象的数据库系统
7、分布对象技术
——了解基本原理、概念及几种典型系统的特点。
二、实习
学会 OOA/OOD工具的使用;
用面向对象方法完成一个小型系统的分析与设计。
要求:
①写出需求报告
②开发一个完整的系统分析模型( OOA模型)
③完成至少一部分系统设计模型( OOD模型)
三、授课方式
课堂讲授为主
鼓励提问、讨论
布置一些思考题
四、考核方式
1、实习 ——30%
2、笔试 ——70%
五、讲义及参考书
1,邵维忠,杨芙清, 面向对象的系统分析, 北京, 清华大学出版社,
1998年 12月
2.冯玉林, 黄涛, 倪彬, 对象技术导论, 北京, 科学出版社,1998年 3

************************************
3,邵维忠,廖钢城,苏渭珍 (译 ),面向对象的设计, 北京, 北京大学
出版社,1994年 11月
4,汪成为,郑小军,彭木昌, 面向对象的分析、设计及应用, 北京,
国防工业出版社,1992年 9月
5,殷人昆,田金兰,马晓勤 (译 ),实用面向对象软件工程教程, 北京, 电
子工业出版社,1998年 6月
6,蔡希尧,陈平, 面向对象技术, 西安, 西安电子科技大学出版社,
1993年 11月
7,徐家福,王志坚,翟成祥, 对象式程序设计语言, 南京, 南京大学
出版社,1992年 12月
8,邵维忠,廖钢城,李力 (译 ),面向对象的分析, 北京, 北京大学出
版社,1992年 2月
9,Booch G,Object-Oriented Analysis and Design
With Applications,2nd ed,Redwood City,California,
enjamin/ Cummings Publishing Company,1994
10,Coad P and Yourdon E,Object-Oriented Analysis,
2nd ed,Englewood Cliffs,NJ,Prentice-Hall,1991
11,Coad P and Yourdon E,Object-Oriented Design.
Englewood Cliffs,NJ,Prentice-Hall,1991
12,Jacobson I,Object-Oriented Software Engineering,
A Use Case Driven Approach,New York,Addison-
Wesley Publishing Company,1992
13,Rumbaugh J,Blaha M,Premerlani W et al.
Object-Oriented Modeling and Design,Englewood
Cliffs,NJ,Prentice-Hall,1991
1,邵维忠,杨芙清, 面向对象的
系统分析, 北京, 清华大学出版
社,1998年 12月 (建议购买,本
系)
3,邵维忠,廖钢城,苏渭珍 (译 ),
面向对象的设计, 北京, 北京大
学出版社,1994年 11月 (可到系
图书室借阅,教材科有售)
6,蔡希尧,陈平, 面向对象技术,
西安, 西安电子科技大学出版社,
1993年 11月 (提供印页)
2.冯玉林,黄涛,倪彬, 对象技
术导论, 北京, 科学出版社,
1998年 3月 (建议购买)
讲义、参考书与课程内容的关系
1、基本知识
2、面向对象的分析
3、面向对象的设计
4、面向对象的程序设计
6、面向对象的数据库系统
7、分布对象技术
第一部分
面向对象方法概论
面向对象 ——九十年代计算机领域的主流技术
在八十年代人们曾经预言,面向对象将成为九十年代计算机
领域的主流技术,现在这个预言已经成为无可置疑的事实。
学术界,会议、期刊、专著、论文
产业界,新系统开发、旧系统改造、软件产品
公司战略、技术形象
教育界,课程、培训班、教材
引 言
第一章 面向对象方法概论
从程序设计方法的角度看,面向对象是一种新的程
序设计范型 (paradigm),其基本思想是使用对象、
类、继承、封装,聚合、关联,消息,多态性 等基
本概念来进行程序设计。
自八十年代以来,面向对象方法已 深入到计算机软件领域
的几乎所有分支。它不仅是一些具体的软件开发技术与策
略,而且是一整套关于如何看待软件系统与现实世界的关
系,用什么观点来研究问题并进行问题求解,以及如何进
行系统构造的软件方法学。 从这个意义上讲:
面向对象方法是一种运用对象、类、继承、封装
、聚合、关联、消息、多态性等概念来构造系统
的软件开发方法。
1.1 什么是面向对象
基本思想
从现实世界中客观存在的事物出发来建立软
件系统
充分运用人类日常的思维方法
强调直接以问题域(现实世界)中的事物为中心来思
考问题、认识问题,并根据这些事物的本质特征,把
它们抽象地表示为系统中的对象,作为系统的基本构
成单位。这可以使系统直接映射问题 域,保持问题域
中事物及其相互关系的本来面貌
强调运用人类在日常的逻辑思维中经常采用的思想方
法与原则,例如抽象、分类、继承、聚合、封装、关
联等等。这使得软件开发者能更有效地思考问题,并
以其他人也能看得懂的方式把自己的认识表达出来。
主要特点:
从问题域中客观存在的事物出发来构造软件系统,用对
象作为对这些事物的抽象表示,并作为系统的基本构成
单位。( 对象 )
用对象的属性表示事物的静态特征;用对象的服务(操
作)表示事物的动态特征。( 属性 与 服务 )
对象的属性与服务结合为一体,成为一个独立的、不可
分的实体,对外屏蔽其内部细节。( 封装 )
对事物进行分类。把具有相同属性和相同服务的对象归
为一类,类是这些对象的抽象描述,每个对象是它的类
的一个实例。( 分类 )
通过在不同程度上运用抽象的原则可以得到较一般的类和
较特殊的类。特殊类继承一般类的属性与服务,从而简化
系统的构造过程及其文档。( 继承 )
复杂的对象可以用简单的对象作为其构成部分。( 聚合 )
对象之间通过消息进行通讯,以实现对象之间的动态联系。
( 消息 )
通过关联表达对象之间的静态关系。( 关联 )
总结,用类和对象作为系统的基本构成单位。对象对应问题
域中的事物,其属性与服务刻画了事物的静态特征和动态特
征,它们之间的继承关系、聚合关系、消息和关联如实地表
达了问题域中事物之间实际存在的各种关系。
因此,无论系统的构成成分,还是通过这些成分之间的关系
而体现的系统结构,都可直接地映射问题域。
软件开发:对事物的认识和描述
问题 ——语言的鸿沟
语言的发展使鸿沟变窄。
1.2 从认识论看面向对象方法的形成
软件工程学的作用
——在各个阶段提供了一些过度方法与法则。
传统的软件工程方法
问题:分析与设计概念及表示法的不一致。
面向对象的软件工程方法
各个阶段能较好地衔接
对象 是现实世界中某个实际存在的事物,它可以是有形的(比如一辆汽
车),也可以是无形的(比如一项计划)。对象是构成世界的一个独立
单位。它具有自己的静态特征和动态特征。
对象 是系统中用来描述客观事物的一个实体,它是构成系统的一个基本
单位。一个对象由一组属性和对这组属性进行操作的一组服务构成。
属性 是用来描述对象静态特征的一个数据项。
服务 是用来描述对象动态特征的一个操作序列。
对象标识 就是对象的名字,有, 外部标识, 和, 内部标识, 之分。
对象,属性,服务,对象标识
1.3 面向对象方法的基本概念与原则
类,一般类,特殊类,抽象
抽象与分类,忽略事物的非本质特征,只注意那些与当前
目标有关的本质特征,从而找出事物的共性,叫做抽象;
把具有共同性质的事物划分为一类,得出一个抽象的概念,
叫做分类。
类 是具有相同属性和服务的一组对象的集合,它为属于该
类的全部对象提供了统一的抽象描述,其内部包括属性和
服务两个主要部分。类的作用是用来创建对象,对象是类
的一个实例。
不同程度的抽象可得到不同层次的分类:较多地忽略事物
之间的差别得到较一般的类,较多地注意事物之间的差别
得到较特殊的类。
如果类 A具有类 B的全部属性和全部服务,而且具有自己
特有的某些属性或服务,则 A叫做 B的特殊类,B叫做 A的
一般类。
另一定义,如果类 A的全部对象都是类 B的对象,而且类 B
中存在不属于类 A的对象,则 A是 B的特殊类,B是 A的一般
类。
—— 可以证明,以上两种定义是等价的
一般类和特殊类的定义
继承:
特殊类拥有其一般类的全部属性与服务,称作特殊
类对一般类的继承。
继承意味着自动地拥有,或曰隐含地复制; 由继承机
制保证。
继承简化了人们对事物的认识和描述,非常有益于软件
复用,是 OO技术提高软件开发效率的重要原因之一。
由一组具有继承关系的类所组成的结构称作一般 -特殊
结构。它是一个以类为结点,以继承关系为边的连通的
有向图。
继承关系的语义:,is a kind of”
多继承,允许一个 特殊类具有一个以上一般类的继承模
式称作多继承。
封装,把对象的属性和服务结合成一个独立的系统单位,并
尽可能隐蔽对象的内部细节。
封装的重要意义:
使对象能够集中而完整地描述并对应一个具体的事物。
体现了事物的相对独立性,使对象外部不能随意存取对象的内部数据,
避免了外部错误对它的, 交插感染, 。
对象的内部的修改对外部的影响很小,减少了修改引起的“波动效
应”。
封装带来的问题:
编程的麻烦,执行效率的损失
解决办法:
不强调严格封装,实行可见性控制。
(混合型 OOPL)
例如:
C++,Eiffel
消息,消息是向对象发出的服务请求
目前在大部分面向对象的编程语言中,消息其实就
是函数(或过程)调用。
在语法上,一条消息应包括
消息名、入口参数和返回参数;
在语义上,一条消息应包括
发送者、接收者和其它 需传送的信息。
但是,函数调用只是实现消息的方式之一,上述理解
只适合于顺序系统
聚合,一个(较复杂的)对象由其他若干(较简单的)
对象作为其构成部分,称作聚合。
分为紧密、固定的和松散、灵活的两种方式。
聚合刻画了现实事物之间的构成关系
整体 -部分结构:
由一组具有聚合关系的类所形成的结构称作整体 -部分结
构。它是一个以类为结点,以聚合关系为边的连通有向
图。
聚合关系又称整体 -部分关系,它是对象实例之间的一种关
系。有时说两个类之间存在着整体 -部分关系,是指一个类
的对象实例以另一个类的对象实例作为组成部分。
这种关系的语义是,has a” 或,is a part of”
关联,对象之间的静态联系(即通过对象属性体现
的联系)称作关联。
关联的表示符号称作 实例连接
多态:
多态是指同一个命名可具有不同的语义。 OO方法中,常
指在一般类中定义的属性或服务被特殊类继承之后,可
以具有不同的数据类型或表现出不同的行为。
其他:
永久对象,可以在程序运行后继续保存的对象
时间 空间
意义
实现途径:语言,OO-DBMS
主动对象,至少有一个服务不需要接收消息就
能主动执行的对象。
描述具有主动行为的事物
描述并发执行的任务
传统方法
数据结构 +算法 =程序设计 以对象为中心组织数据与操作
数据 对象的属性
操作 对象的服务
类型与变量 类与对象实例
函数(过程)调用 消息传送
类型与子类型 一般类与特殊类,继承
构造类型 整体 -部分结构,聚合
指针 关联
不同点 思想观念,从对象出发认识问题域; 构造策略,以对象
作为构成系统的基本单位,将对象的数据与操作紧密结合; 保
证机制,由支持封装、继承、多态的机制保证其原则的实现。
面向对象方法与传统方法的比较
面向对象方法
面向机器
面向代数
面向过程
面向数据
面向人
面向文件
面向信息
面 向应用
面向功能
面向数据流
·····
面向对象是软件方法学的返朴归真
软件科学的发展历程中
出现过许多“面向”
软件开发从过分专业化的方法、规则和技
巧中回到了客观世界,回到了人们的日常
思维,是软件理论的返朴归真。
面向对象
术语对照
对象 Object
实例 instance
属性 attribute
状态 state
实例变量 instance variable
成员变量 member variable
变量 variable
服务 service
操作 operation,
行为 behavior,方法 method
例程 routine
过程 procedure,
函数 function
类 class
对象类型 object type
一般 /特殊 generalization/specialization
继承 inheritance
超类 /子类 superclass/subclass
基类 /派生类 base class/derived class
祖先 /子孙 ancestor/descendant
祖先 /子孙 ancestor/descendant
整体 /部分 whole/part
聚合 aggregation
组装 composition
嵌套对象 nested object
嵌入指针 embedded pointer
消息 message
消息连接 message connection
函数调用 function call
例程调用 routine call
过程 /函数调用 procedure/function
call
关联 association
实例连接 instance connection
链 link
对象标识集合 object identifier set
对象指针 object pointer
类型指针集合 type pointer set
1,雏形阶段
60年代挪威计算中心开发的 Simula67—— 面向对象语言的先
驱和第一个里程碑(首先引入了类的概念和继承机制)。
70年代 CLU、并发 Pascal,Ada和 Modula-2等语言对抽象数据
类型理论的发展起到重要作用(支持数据与操作的封装)。
犹他大学的博士生 Alan Kay设计了一个实验性的语言 Flex。
从 Simula 67中借鉴了许多概念,如类、对象、继承等。
1972年 Palo Alno研究中心( PARC)发布了 Smalltalk-72,
其中正式使用了, 面向对象, 这个术语。
Smalltalk的问世标志着面向对象程序设计方法的正式形成
。但是这个时期的 Smalltalk语言还不够完善
1.4 OO方法的发展历史与现状
2.完善阶段
PARC先后发布了 Smalltalk-72,76,78等版本,直至
1981年推出该语言最完善的版本 Smalltalk-80。
Smalltalk-80的问世被今认为是面向对象语言发展史上
最重要的里程碑。迄今绝大部分面向对象的基本概念及
其支持机制在 Smalltalk-80中都已具备。它是第一个完
善的、能够实际应用的面向对象语言。
3.繁荣阶段
自 80年代中期到 90年代, 是面向对象语言走向繁荣的
阶段 。 其主要表现是大批比较实用的 OOPL的涌现 。
OO编程语言分为 纯 OO语言 和 混合型 OO语言
混合型语言是在传统的过程式语言基础上增加 OO语言
成分, 在实用性方面具有更大的优势 。
4、发展到软件生命周期前期阶段
当前:几乎覆盖计算机软件
领域的所有分支
许多新领域以面向对
象理论为基础,或作
为主要技术
面向对象方法从编程发展到
设计、分析,进而发展到整
个软件生命周期。
在软件生命周期全过程运用面向对象方法
L.M.Northrop:“尽管面向对象语言正取得令人振奋的发展,但编程并
不是软件开发问题的主要根源。需求分析与设计问题更为普遍并且更
值得解决。因此面向对象开发技术的焦点不应该只对准编程阶段,而
应更全面地对准软件工程的其他阶段。面向对象方法真正意义深远的
目标是它适合于解决分析与设计期间的复杂性并实现分析与设计的复
用。面向对象的开发不仅仅是编程,必须在整个软件生命周期采用一
种全新的方法,这一观点已被人们所接受。
——,软件工程百科全书, 纽约,1994
面向对象
的分析
面向对象
的设计
面向对象
的编程
面向对象
的测试
面向对象
的软件维护