北大计算机料学术 象术引论”幻灯片节选说明 造修北京大学 面向对象技术引论 这服所提供的只是课营讲投的部分内容,万不可提认 陈兆琪疏飞 20d月一月 教学计別 、教学内容及学时 I、基本知识 一南、准确、熟旅地掌量国陶对象方法的主罢 面向对象方法的基本概念、主要思想,特点.优势 面向对象的设 解0和00的主买念与操作过,食应用 面向对象的设计方法,包括概念、表示法、OC模型、OOD过程 oF的基本思想,几种典型的面向对象的编程语言 语言成分和主弧带点,知道如何事0Am有 6、而向对象的数据库系统 关念。 O5的基本原理,儿种典型的005 6、面向对象的数据库系 分布对象的概念与意义,对象总线技术 7、分布对象技术 了解基本原、都念及几具系能的物点 三、投课方式 会0Am工具的用 课堂主 用面向对象方波亮成一个小盟系统的分折与设计 放提网、论 写出求报 开发一个亮的系统分析型(M 四、考方式 亮成革少一新分最训计盟(oor L实习30 2、嗒试—705 讲义及参考书 之都美,口向触分帆北:前大密敝性 enjamin/ Cummings Publishing Campany, 199 雕挑术北〖:幽社 10. Coad P and Yourdon E. Object-Oriented Analysis 总聊(, ,北:北太 11. Coad P and Yourdon E. Object-Oriented Design. 汪焘个单有是面向对象的分析、设计用 取兰到再女用面向对象被作工程教程北电 职时食木要:国会电大 7徐家概王志坚,翟成样.对象式程序设计语言南京:南京大学 Design. Englewood 邳维忠,廖钠域李力().面向对象的分析。北衰:北京大学出 讲义、参考书与课程内容的关系 基本知识 舒战 第一部分 面向对象方法概论 面向刈象。序說计 帐利 北京
“面向对象技术引论”幻灯片节选说明 以下公布课堂使用的部分幻灯片,仅供选修北京大学 计算机科学技术系“面向对象技术引论”课程的学生 复习功课时参考,不得翻印制作。 这里所提供的只是课堂讲授的部分内容,万不可误认 为这几幅幻灯片以外的内容都不要求掌握。 北京大学计算机科学技术系 本科生课程 面向对象技术引论 主讲教师 邵维忠 辅导教师 陈兆琪 戴耀飞 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、分布对象技术 第一部分 面向对象方法概论
引言 九十年代计算机领域的主流术 1.1什么是面向对象 从程序设计方法的角度看,面向对象是 举术界:会议、期刊、专著、论文 产业界:新系统开发、旧系筑改造、敦件产品 間题分支字何取得算数科买茶是氯 教育界:课程、培训班、數材 的软件方学从个盒义上讲 向对方法是科遥用对象、类、繼承、對装 、消息、多性等概念来物造系统的 【件开发方法 基本思想 主要点 从现实世界中客观存在的事物出发来建立软 立的、不可 对事物进行分类把具有相同属性和相同服务的对 装与 对象的抢象描选,个对象是它良 的个实例 德不是典的周性以务攻烧柔 12从认识论看面向对象方法的形成 软件开发 物的认识和推述 复杂的象可以单的刚象你为其构成分,〔合) 间过洞愿行通讯,以实对象之间的动态联系 量过关联表达对像之间的志关系。(关联 个阶供了一皮力法与法 总蚰:用和对作为系能 及来示法的不一敌。 中敏之闻际 分之闻的关系 乳的系能结构,每可换地映射网就 13面向对象方法的基本念与原则 类,一最类,殊类,抽象 对象,属性,服务,对像标识 分忽略事物的非本质特征,只注意那些与当前 率是也实已是无影的(在计,可是有界如个立 共同性质的事物划分为一类,得出一个抽象的概念, 是悉体击二孩翻物细在:养物这看势构本 类是具有相问属性和服务的一组对象的集合,它为属于该 性是用来描述对象静态特征的一个数据项 服务两个 类的作用是用来创建对象,对象是类 务是用来描述对象动态特征的一个操作序列 到乳褫是对象的名字,有外部标识和内部标识之分。 不同程度的抽象可得到不同层次的分类:较多地忽略事物 有到收特的类校的类,多地注意事之向的差别 一般类和特珠类的定义 物看街在样线余多会图务x且国 弹拥有其一最类的全部属性与量务,称类 另一定文:如果类A的全部对象都是类B的对象,而且类 盒味着自动地有,取日隐含地造复制n由能机 B中存在不属于类喲对象,则是日特殊类,是A 制保证 由一组具有地承美系的所组成的称作一般录 一可以证明,以上两种定义是等价的 用知化木 述,非常有益子款件复 量承关系的文: is a kind of· 多能承:允许一个特殊类具有一个以上一般类的继承模 式称作多继承
面向对象——九十年代计算机领域的主流技术 在八十年代人们曾经预言,面向对象将成为九十年代计算机 领域的主流技术,现在这个预言已经成为无可置疑的事实。 学术界:会议、期刊、专著、论文 产业界:新系统开发、旧系统改造、软件产品 公司战略、技术形象 教育界:课程、培训班、教材 引 言 第一章 面向对象方法概论 从程序设计方法的角度看,面向对象是一种新的程 序设计范型( paradi gm),其基本思想是使用对象、 类、继承、封装、聚合、关联、消息、多态性等基 本概念来进行程序设计。 自八十年代以来,面向对象方法已深入到计算机软件领域的 几乎所有分支。它不仅是一些具体的软件开发技术与策略, 而且是一整套关于如何看待软件系统与现实世界的关系,用 什么观点来研究问题并进行问题求解,以及如何进行系统构 造的软件方法学。从这个意义上讲: 面向对象方法是一种运用对象、类、继承、封装、 聚合、关联、消息、多态性等概念来构造系统的 软件开发方法。 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” 多继承:允许一个特殊类具有一个以上一般类的继承模 式称作多继承
封装:把对象的属性和服务结合成一个独立的系统单位,并 消息:消思是向对象发出的服务请求 尽可能隐蔽对象的内部细节 消息名、入口参数和返回参数 在语义上,一条消息应包 少了歌引 它需传送的信息 前在大部分面向对象的编程语言中,消息其实就 可几健制 凡是惠防觉一上 录命对烧的对 其他着干(较简单韵 关联:雕之网的志联系(即理过象局性体 分为密、國定的和松散 关联的来示号事连 多态 体部分结构: 多态是指同一个命名可具 章合美系又家你部分美系,它是对实例之间的一 以具有不同的数据类型或表现出不同的行为。 的对象实例作为组成 这种关系的哥义是ha或 s a part of .包是“个类为的点改康的类款边物 国声对像方法与性友法的比 其他: 面向对象方法 永久对象:可以在程序运行后继续保存的对象 爱结构算法覆序设计以对象为中心组织数与操作 时间空间 实现径:语官,O0DBMs 主动对象:至少有一个服务不需要接收消息就 柔与子类盟一最与物录类,录 能主动执行的对象 体都分物,景合 作为构成系统的基本单位,将对象的数据与操作紧密结合:保 证机制,由支持封装、继承、多态的机制保证其原则的实现 术语对照 向对象是敦件方法学的返朴归真 aect 轼件科学 历程中 出现过许 例充 面向信息 成员变量 nenber vari ade 或向对 软件开发从过分专业化的方法、规则和技 行为 behavi o,方法nthd 理是理世真.人们的日常 程 procedure functi Ek general izati on speci al i zat i 数调用 functi on cal I ed cl ass 子 whale part obj ect identifier positi n 类型指针集合 type poi nter set 嵌套对象 nest ed obj ect 嵌入指外 enbedded poi nter
封装:把对象的属性和服务结合成一个独立的系统单位,并 尽可能隐蔽对象的内部细节。 封装的重要意义: 使对象能够集中而完整地描述并对应一个具体的事物。 体现了事物的相对独立性,使对象外部不能随意存取对象的内部数据, 避免了外部错误对它的“交插感染”。 对象的内部的修改对外部的影响很小,减少了修改引起的“波动效应”。 封装带来的问题: 编程的麻烦,执行效率的损失 解决办法: 不强调严格封装,实行可见性控制。 (混合型OOPL) 例如: C++,Eiffel 消息:消息是向对象发出的服务请求 目前在大部分面向对象的编程语言中,消息其实就 是函数(或过程)调用。 在语法上,一条消息应包括 消息名、入口参数和返回参数; 在语义上,一条消息应包括 发送者、接收者和其它需传送的信息。 但是,函数调用只是实现消息的方式之一,上述理解 只适合于顺序系统 聚合: 一个(较复杂的)对象由其他若干(较简单的) 对象作为其构成部分,称作聚合。 分为紧密、固定的和松散、灵活的两种方式。 聚合刻画了现实事物之间的构成关系 整体-部分结构: 由一组具有聚合关系的类所形成的结构称作整体-部分结 构。它是一个以类为结点,以聚合关系为边的连通有向图 。 聚合关系又称整体-部分关系,它是对象实例之间的一种关 系。有时说两个类之间存在着整体-部分关系,是指一个类 的对象实例以另一个类的对象实例作为组成部分。 这种关系的语义是“has a”或“is a part of” 关联:对象之间的静态联系(即通过对象属性体现 的联系)称作关联。 关联的表示符号称作实例连接 多态: 多态是指同一个命名可具有不同的语义。OO方法中,常 指在一般类中定义的属性或服务被特殊类继承之后,可 以具有不同的数据类型或表现出不同的行为。 其他: 永久对象:可以在程序运行后继续保存的对象 时间 空间 意义 实现途径:语言,OO-DBMS 主动对象:至少有一个服务不需要接收消息就 能主动执行的对象。 描述具有主动行为的事物 描述并发执行的任务 传统方法 数据结构+算法=程序设计 以对象为中心组织数据与操作 数据 对象的属性 操作 对象的服务 类型与变量 类与对象实例 函数(过程)调用 消息传送 类型与子类型 一般类与特殊类,继承 构造类型 整体-部分结构,聚合 指针 关联 不同点 思想观念:从对象出发认识问题域;构造策略:以对象 作为构成系统的基本单位,将对象的数据与操作紧密结合;保 证机制:由支持封装、继承、多态的机制保证其原则的实现。 面向对象方法与传统方法的比较 面向对象方法 面向机器 面向代数 面向过程 面向数据 面向人 面向文件 面向信息 面向应用 面向功能 面向数据流 ······ 面向对象是软件方法学的返朴归真 软件科学的发展历程中 出现过许多“面向” 软件开发从过分专业化的方法、规则和技 巧中回到了客观世界,回到了人们的日常 思维,是软件理论的返朴归真。 面向对象 术语对照 对象 Obj ect 实例 i nst ance 属性 at t ri but e 状态 st at e 实例变量 i nst ance vari abl e 成员变量 member vari abl e 变量 vari abl e 服务 servi ce 操作 operat i on, 行为 behavi or,方法 met hod 例程 rout i ne 过程 procedure, 函数 f unct i on 类 cl ass 对象类型 obj ect t ype 一般/ 特殊 general i zat i on/ speci al i zat i on 继承 i nheri t ance 超类/ 子类 supercl ass/ subcl ass 基类/ 派生类 base cl ass/ deri ved cl ass 祖先/ 子孙 ancest or/ descendant 祖先/ 子孙 ancest or/ descendant 整体/ 部分 whol e/ part 聚合 aggregat i on 组装 composi t i on 嵌套对象 nest ed obj ect 嵌入指针 embedded poi nt er 消息 message 消息连接 message connect i on 函数调用 f unct i on cal l 例程调用 rout i ne cal l 过程/ 函数调用 procedure/f unct i on cal l 关联 associ at i on 实例连接 i nst ance connect i on 链 l i nk 对象标识集合 obj ect i dent i f i er set 对象指针 obj ect poi nt er 类型指针集合 t ype poi nt er set
14O0方法的发展历史与现状 2.完善阶段 1.雏形阶段 R先后发布了 SeIta k-72,76,78等版本,直至 ltak8的问世被今认为是面向对象语言发展史上 驱和第一个里程碑(首先引入了类的概念和继承机 其轰的铜在计态答它是个 a2等语言对抽象数据 能够实际应用的面向对象语言 优他大学的博士生Aan向a设计了一个实验性的语言月 ma7中借鉴了许多概念,如类、对象、继承等 3繁荣阶段 是面向对象语言走向繁荣的 产上 但是这个时期的stak语言还不够完善 成分,在实用性方面具有更大的优势。 飞件生命周期前阶段 在软件生命周全过程运用面向对象方法 受盖计机就件 对抽基速不包丁 的所有分文 "幻C"(}[e2 黄为她 触术 第二部分 面向对象的分析 关于软件工程的补充知识 件危机 要能提高价格则下降,应用迅扩大 要求计算机做的事来多,也来复杂 几十个人开金个大件系 个南不 大量,彝且有可看魔和这_ 教件可性下开其事新下邮先 这使教件开发者腐入回境,人们之为敦危机
1. 雏形阶段 60年代挪威计算中心开发的Si mul a67——面向对象语言的先 驱和第一个里程碑(首先引入了类的概念和继承机制)。 70年代CLU、并发Pascal 、Ada和Modul a- 2等语言对抽象数据 类型理论的发展起到重要作用(支持数据与操作的封装)。 犹他大学的博士生Al an Kay设计了一个实验性的语言Fl ex。 从Si mul a 67中借鉴了许多概念,如类、对象、继承等。 1972年Pal o Al no研究中心(PARC)发布了Smal l t al k- 72, 其中正式使用了“面向对象”这个术语。 Smal l t al k的问世标志着面向对象程序设计方法的正式形成 。但是这个时期的Smal l t al k语言还不够完善 1.4 OO方法的发展历史与现状 2. 完善阶段 PARC先后发布了Smal l t al k- 72,76,78等版本,直至 1981年推出该语言最完善的版本Smal l t al k- 80。 Smal l t al k- 80的问世被今认为是面向对象语言发展史上 最重要的里程碑。迄今绝大部分面向对象的基本概念及 其支持机制在Smal l t al k- 80中都已具备。它是第一个完 善的、能够实际应用的面向对象语言。 3. 繁荣阶段 自80年代中期到90年代,是面向对象语言走向繁荣的 阶段。其主要表现是大批比较实用的OOPL的涌现。 OO编程语言分为纯OO语言和混合型OO语言 混合型语言是在传统的过程式语言基础上增加OO语言 成分,在实用性方面具有更大的优势。 4、发展到软件生命周期前期阶段 当前:几乎覆盖计算机软件 领域的所有分支 许多新领域以面向对 象理论为基础,或作 为主要技术 面向对象方法从编程发展到设 计、分析,进而发展到整个软 件生命周期。 在软件生命周期全过程运用面向对象方法 L.M.Northrop:“尽管面向对象语言正取得令人振奋的发展,但编程并 不是软件开发问题的主要根源。需求分析与设计问题更为普遍并且更 值得解决。因此面向对象开发技术的焦点不应该只对准编程阶段,而 应更全面地对准软件工程的其他阶段。面向对象方法真正意义深远的 目标是它适合于解决分析与设计期间的复杂性并实现分析与设计的复 用。面向对象的开发不仅仅是编程,必须在整个软件生命周期采用一 种全新的方法,这一观点已被人们所接受。 ——《软件工程百科全书》纽约,1994 面向对象 的分析 面向对象 的设计 面向对象 的编程 面向对象 的测试 面向对象 的软件维护 第二部分 面向对象的分析 关于软件工程的补充知识 软件危机 硬件性能提高,价格则下降,应用领域迅速扩大; 要求计算机做的事越来越多,也越来越复杂; 这使计算机软件的功能、规模及复杂性与日俱增。 软件的复杂性达到了它的开发者难以控制的程度。 大系统的复杂性是小程序无法比拟的。 当几十个人开发一个大型软件系统时,没有任何人能对它从全局到 细节都了如指掌。各部分的问题错纵复杂,相互影响,不可避免地 隐藏大量错误,并且没有可靠的方法能彻底发现和排除这些错误。 这种情况导致了严重的后果—— 软件可靠性下降;开发效率低下;维护极为困难。 这使软件开发者陷入困境,人们称之为“软件危机
寻求摇脱危机的出路 于序本身,研究怎科才能写出高顶量的 序。如化漫序慢计 就件工 产的金过程(能只是其中的 如并发序设计、量构与算法、以 教件工程 软件工名本息 用工名学的力被造行敦件的 较小的。序,不能应大教件开发 和其它行业的道遗一样当敦件的机提 届用工程方衰是行件生产 软件生命周期(软件工程理论所舞示的项规常) 件总是买叠历从囊生到无亡的划 慢计是以需求分析的果为做定义系的主骚 护在系能交付使用之后,根使用中发现调属 用户的求变化,对就件遗行修改
寻求摆脱危机的出路: 程序设计方法学的研究 ——着眼于程序本身,研究怎样才能写出高质量的 程序。如结构化程序设计方法。 软件工程学的研究 ——着眼于软件生产的全过程(编程只是其中的 一个阶段),研究用工程学的方法来开发软件。 其它 ——如并发程序设计、数据结构与算法、以及编程 语言等方面的研究。 软件工程: 软件工程的基本思想,就是用工程学的方法进行软件的开 发与维护,并对软件生产过程进行工程化的管理。 在此之前,软件的生产方式是手工作坊式的。程序员 象是一些个体的手工劳动者,程序设计被当作一种艺 术创造,而不当作是一项工程。这种生产方式只能适 应较小的程序,不能适应大型软件开发。 和其它行业的道理一样,当软件的规模和复杂性达到一定 程度时,即使有大量熟练的程序员也难以胜任它的开发任 务。需要用工程的方法来进行软件生产,这就是软件工程 。 软件生命周期(软件工程理论所揭示的一项规律) 一个软件总是要经历从诞生到死亡的过程,其间需要经过 需求分析、设计、编码、测试、维护等一系列生存阶段。 需求分析——分析用户需求,研究问题域,搞清楚应该建 立一个什么样的系统才能满足用户的需求。 设计——分为概要设计和详细设计。 概要设计是以需求分析的结果为依据定义系统的主要 构成成分和它们之间的关系。 详细设计是定义每个系统成分内部的构造细节。 编程——按设计的要求来编写程序,并通过调试使之能够 运行。 测试——通过一系列测试用例来检验程序正确性,看它是 否能达到预期的要求。 维护——在系统交付使用之后,根据使用中发现的错误或 用户的需求变化,对软件进行修改
款件工 内包括 栏机、术文、管看制度 每个软件开发者必接工的能一求行事,不险地自 业文的总合,面不 实行件工 是并分破及学生产寿邮 款件开发方 不是一的。自就件工程出现以来 ,人们已经提出了多种软件开发方法,侧如 干发的各项活动、角色产晶及其相互关赢 代要兰来微龄息量简方法和教工
软件工程的主要内容包括: 针对软件生命周期全过程及其每个具体阶段的工程方法 、技术细则、文档规范、技术支持、管理制度、人员织 组以及质量保证体系等。 每个软件开发者必须按工程的统一要求行事,不能随意地自 由发挥。 每个开发阶段都要产生健全的、符合工程规范的文档。 软件产品是这些文档的总合,而不仅仅是程序。 实行软件工程的主要意义: 提高软件产品的质量 提高了软件生产率 软件工程的推行从根本上改变了软件生产中无章可循、各行 其是的混乱局面,并为软件开发从手工生产转向工业化生产 奠定了基础。 软件开发方法: 软件工程所采用的方法不是唯一的。自软件工程出现以来 ,人们已经提出了多种软件开发方法,例如: 功能分解法、 数据流法(结构化方法)、 快速原型法、 信息模型法、 面向对象方法。 软件过程模型 描述软件开发过程的各项活动、角色、产品及其相互关系 的模型。例如: 瀑布模型、螺旋模型、增量模型和喷泉模型等。 不同的软件开发方法和软件开发模型要求有不同的工程体 系。 从历史看,使用最多的是结构化方法和瀑布模型; 代表当前技术主流的是面向对象方法和喷泉模型。 分析 设计 编程 测试 维护 瀑布模型: 强调严格的 阶段划分和 前后次序 先做完OOA 再进行OOD OOA OOD
喷泉棋型 有工作可9中地行 用选料严拥供了条件 二章为什么需要O0A 21什么是面向对象的分析? 对象的分析〔,就是用面向刈象方进行暴统 分折,是教件生命属的一个阶,具有一最分析方 得换这身斯是方法遗们分,用面向对的 基本任务是量用国向对象方法,对 象的属性、最务以及它值之同的关 目标是建立一个符合题擒足用户警求的①型 22分析面临的主罢阿愿 问题域和系统责任复杂性日益增长 down):被开发系统的应用领域,即 系责任( syst emresponsi bilities):所开发的系统 应该具客的职能 员,多率不是问题域的专家:问题域专家多半 不是软件专家 统所面临的闩题域比以往更为广阔和复杂,系统比 硬件性能提高价格的下降:编程效率不断提高。对雷 求分析的压力比其它开发阶段更为巨大
喷泉模型: 各个阶段之 间没有严格 的界限,其 活动可以交 叠和回溯。 演化 集成 测试 编程 设计 OOA 分析 OOD 有些工作既可在OOA中进行, 也可在OOD中进行。 各阶段概念和表示法的一致为 采用这种模型提供了条件。 面向对象的分析(OOA),就是运用面向对象方法进行系统 分析。 OOA是分析,是软件生命周期的一个阶段,具有一般分析方 法共同具有的内容、目标及策略; 但强调运用面向对象方法进行分析,用面向对象的概念和表 示法表达分析结果。 基本任务是:运用面向对象方法,对问题域和系统责任进行 分析和理解,找出描述问题域及系统责任所需的对象,定义 对象的属性、服务以及它们之间的关系。 目标是建立一个符合问题域、满足用户需求的OOA模型。 2.1 什么是面向对象的分析? 第二章 为什么需要OOA 2.2 分析面临的主要问题 1、问题域和系统责任复杂性日益增长 问题域(pr obl em domai n):被开发系统的应用领域,即 在现实世界中由这个系统进行处理的业务范围。 系统责任(syst em r esponsi bi l i t i es):所开发的系统 应该具备的职能。 困难所在: 分析人员,多半不是问题域的专家;问题域专家多半 不是软件专家; 系统所面临的问题域比以往更为广阔和复杂,系统比 以往更为庞大。 硬件性能提高价格的下降;编程效率不断提高。对需 求分析的压力比其它开发阶段更为巨大
2、交流问题 软件工程是蕃常“面向人的”,是一项思维活动、思想交 流和人为因素十分密集的工作 与用户和领域专家的交流 分析人员之向的交 很什人鹊交袤的交道 与管理人员的交流 如果分析 的文档使分析员以外的其他人 于交流。这会使彼此的思想不 不易沟通 3、需求的不断变化 引起需求变化的因素 观原因,主观原因 软件开发者必须以合作的态度满足用户需求 4、软件复用的要求 复用级别提高—分析结果复用 于多个系统 一个分析模型在多种条件下实 对分新提出了更高解求
2、交流问题 软件工程是非常“面向人的”,是一项思维活动、思想交 流和人为因素十分密集的工作。 ·与用户和领域专家的交流 ·分析人员之间的交流 ·与用户和领域专家的再交流 ·与设计人员的交流 ·与管理人员的交流 如果分析所产生的文档使分析员以外的其他人员都很难 读懂,那就很不利于交流。这会使彼此的思想不易沟通, 并容易隐藏许多错误。 3、需求的不断变化 引起需求变化的因素 用户 客观原因, 主观原因 竞争因素 经费 技术因素 软件开发者必须以合作的态度满足用户需求 易变部分和稳定部分: 功能:最易变 外部接口:很易变 属性:较易变 对象:较稳定 4、软件复用的要求 复用级别提高——分析结果复用 一个分析模型中的可复用部分用于多个系统 一个分析模型在多种条件下实现 对分析提出了更高的要求
22分析方法综述 功能分解法( f unct i on decompose ti on) 功能分解=功能 以系所功能,然后把功能分解为子功能,同时定 的功能为中心来组织系统 较大的子功能进一步分解,直到可给出明确的定义 根据功能/子功能的需要设计数据结构。 对需变挽越圈影 检验分析果的正确性 局部的皓误和局部的修改很容易产生全局性的响 工 层地行功能分解 由换及其搜口构成 嘌 照翻 翩 数据流法( data fI =数据流十数据处理(加工)+数据存储十端 点十处理说明十数据字典 基本策略是跟踪数据流,即研究问题 流动以及在各个环节上进行何种处理,从而 加工,问题域被映射为数据流图(FD 明和数据字典进行详细说明 法则,较强调研究问题域 一,而且没有一种严格的、可操作的 是全以你解起你析
2.2分析方法综述 功能分解法(f unct i on decomposi t i on) 功能分解= 功能 +子功能 +功能接口 以系统需要提供的功能为中心来组织系统。 首先定义各种功能,然后把功能分解为子功能,同时定 义功能之间的接口。 对较大的子功能进一步分解,直到可给出明确的定义。 根据功能/子功能的需要设计数据结构。 优点与缺点: 直接地反映用户的需求,所以工作很容易开始。 不能直接地映射问题域,很难检验分析结果的正确性。 对需求变化的适应能力很差。 局部的错误和局部的修改很容易产生全局性的影响。 功能 功能 功能 系统 子功能 子功能 子功能 子功能 分解 分解 分解 …… …… …… …… 工作过程: 一层层地进行功能分解 功能 模块 功能 模块 功能 模块 功能 模块 功能 模块 功能 模块 功能 模块 功能 模块 功能 模块 功能 模块 得到的系统模型: 由模块及其接口构成 数据流法(dat a f l ow appr oach) 数据流法= 数据流+数据处理(加工)+数据存储+端 点+处理说明+数据字典 又称作结构化分析。基本策略是跟踪数据流,即研究问题 域中数据如何流动以及在各个环节上进行何种处理,从而 发现数据流和加工。问题域被映射为数据流图(DFD), 并用处理说明和数据字典进行详细说明。 优点与缺点: 有严格的法则,较强调研究问题域。 仍然是间接映射; 与结构化设计的表示法不一致,而且没有一种严格的、可操作的 转换规则。因此从分析到设计的过渡比较困难; 大系统数据流和加工的数量常常多到难以控制的程度,引起分析 文档的膨胀
信息建模法( i nf or rat i on nedeli 信思建模一实体(对象)十属性十关系十父类型/子类 型十关联对象 由实体关系法(ER法)发展而来 心概念是实体和关系。实体描述问题域的事物,含有属性 关系描述事物之向在数据方面的联 了类型和子类型 的概念,作为实体《对象)的抽象描述 有人也把它列入面向对象方法,但有 是对象建模 2没有把对实体属性的操作封装 承,不支持服务 没有采用消息通讯。 面向对象的分析 面向对象一对象,类 十结构与连接 是对问题域中事物的完整映射,包括事物的数据特征和行 如实地反映了问题域中事物之问的各种关系,包括分类结 构、组装结构、静态联系和动态联系 采用封装、继承、消息通讯等原则,使问题域的复杂性得 到控制
数据流 加工 数据存储 端点 处理说明 ———— ———— ———— ———— ———— ———— 数据词典 ———— ———— ———— ———— ———— ———— 信息建模法(i nf or mat i on model i ng) 信息建模= 实体(对象)+属性+关系+父类型/子类 型+关联对象 由实体-关系法(E- R方法)发展而来。 与数据库设计有很深的渊源。 核心概念是实体和关系。实体描述问题域的事物,含有属性; 关系描述事物之间在数据方面的联系,也可以带有属性。 发展之后的方法也把实体称作对象,并使用了类型和子类型 的概念,作为实体(对象)的抽象描述。 有人也把它列入面向对象方法,但有以下差别: 1. 强调的重点是信息建模和状态建模,而不是对象建模。 2. 没有把对实体属性的操作封装到实体对象中。 3. 只有属性的继承,不支持服务(操作)的继承。 4. 没有采用消息通讯。 面向对象的分析 面向对象= 对象,类 +结构与连接 +继承 +封装 +消息通讯 是对问题域中事物的完整映射,包括事物的数据特征和行 为特征。 如实地反映了问题域中事物之间的各种关系,包括分类结 构、组装结构、静态联系和动态联系。 采用封装、继承、消息通讯等原则,使问题域的复杂性得 到控制