程序设计是计算机学科的核心和灵魂程序设计是计算机学科的核心和灵魂 程序设计基础 第十一章 面向对象软件构造.

Slides:



Advertisements
Similar presentations
一、统计范围 注册地在湖里区的具有房地产开发资质的 房地产开发企业 无论目前是否有开发项目 无论开发的项目是在湖里区还是在其他区 没有开发项目的企业需要报送年报和月报 中的资金表(空表)。 新成立的项目公司,要先入库,再报报表。
Advertisements

第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
概率统计( ZYH ) 节目录 3.1 二维随机变量的概率分布 3.2 边缘分布 3.4 随机变量的独立性 第三章 随机向量及其分布 3.3 条件分布.
第四章 犯罪概念与犯罪构成. 第一节 犯罪概念 一、犯罪概念的类型  (一)犯罪的形式概念  (二)犯罪的实质概念  (三)犯罪的混合概念.
第二节 Flash 动态按钮的制作 铁王中学 王东强 学习目标: 1 、了解 ActionScript 在交互动画中的重要作 用 2 、知道 ActionsScript 程序的组成 3 、熟练使用按钮中的 ActionScript 控制动画 播放的操作,掌握按钮的创建和使用方法,
HistCite 结果分析示例 罗昭锋. By:SC 可能原因:文献年度过窄,少有相互引用.
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
主要内容  LR(0) 分析. 0 S→  E # E→  E+T E→  T T→  id T→  ( E ) 1 S→E  # E→E  +T 5 T→id  3 E→E+  T T→  id T→  (E) 4 E→E+T  9 E→T  6 T→(  E) E→
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
地理信息系统概述. 数据和信息 (Data & Information) 数据 原始事实 如:员工姓名, 数据可以有数值、图形、声音、视觉数据等 信息 以一定规则组织在一起的事实的集合。
第 4 章 抽象解释 内容概述 以一种独立于编程语言的方式,介绍抽象解释的 一些本质概念 – 将 “ 程序分析对语言语义是正确的 ” 这个概念公式 化 – 用 “ 加宽和收缩技术 ” 来获得最小不动点的较好的 近似,并使所需计算步数得到限制 – 用 “ 伽罗瓦连接和伽罗瓦插入 ” 来把代价较大的属 性空间用代价较小的属性空间来代替.
第 2 章 数据流分析 内容概述 数据流分析推导的是数据沿着程序执行路 径流动的信息 – 过程内的分析:可用表达式分析、到达-定值分 析等 – 过程间分析 –Shape 分析 – 理论基础 – 数据流方程的求解.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
C 语言程序设计 2008 版. C 语言程序设计 教学要求  掌握程序设计语言的基本知识  常用算法  初步的程序设计能力 学习方法  自主学习  重视上机实践.
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十八讲 ) 离散数学. 第八章 格与布尔代数 §8.1 引 言 在第一章中我们介绍了关于集 合的理论。如果将 ρ ( S )看做 是集合 S 的所有子集组成的集合, 于是, ρ ( S )中两个集合的并 集 A ∪ B ,两个集合的交集.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第四十八讲 ) 离散数学. 例 设 S 是一个非空集合, ρ ( s )是 S 的幂集合。 不难证明 :(ρ(S),∩, ∪,ˉ, ,S) 是一个布尔代数。 其中: A∩B 表示 A , B 的交集; A ∪ B 表示 A ,
第十一章 曲线回归 第一节 曲线的类型与特点 第二节 曲线方程的配置 第三节 多项式回归.
第二部分 行政法律关系主体 第一节 行政主体 一、行政主体 (一)行政主体的概念 cc (二)行政主体资格含义及构成要件 CASE1CASE1\CASE2CASE2 (三)行政主体的职权和职责 1 、行政职权的概念及内容 2 、行政职权的特点 3 、行政职责.
协同工作环境研究中心 协同共享 助力科研. 主要内容  认识协同及协同软件  协同科研软件 duckling 介绍.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
第二章 随机变量及其分布 第一节 随机变量及其分布函数 一、随机变量 用数量来表示试验的基本事件 定义 1 设试验 的基本空间为 , ,如果对试验 的每一个基 本事件 ,规定一个实数记作 与之对应,这样就得到一个定义在基本空 间 上的一个单值实函数 ,称变量 为随机变量. 随机变量常用字母 、 、 等表示.或用.
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
OS 进程调度模拟演示 制作人: 钱晶 高上上. OS 进程调度模拟-实验原理 静态优先级原理 在这种方式下,系统一旦把处理机分配给就绪队 列中的优先权最高的进程后,该进程便一直执行下去, 直至完成。或因为发生某事件使该进程放弃处理机,系 统方可再将处理机分配给另一优先级最高的进程。这些 事件包括有优先级更高的进程进入,或是因为某些原因.
1 第 7 章 专家控制系统 概述 专家系统的起源与发展 专家系统的一般结构 专家系统的知识表示和获取 专家系统的特点及分类.
信息利用与学术论文写作 Library of Jiangsu University, Zhenjiang Sha Zhenjiang
第二章 贝叶斯决策理论 3学时.
操作系统原理课程设计指南 姜海燕 设计考核幻灯制作  1.1 封皮:系统名称,研制人员  1.2 目的及意义  1.3 功能设计:功能框图、用例图  1.4 结构设计:系统结构  1.5 核心技术及技术路线:画图  1.6 进度安排  1.7 人员安排  1.8.
UML 对象设计与编程 主 讲 : 董兰芳 副教授 Dept. of Computer Science,USTC
量子化学 第四章 角动量与自旋 (Angular momentum and spin) 4.1 动量算符 4.2 角动量阶梯算符方法
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
Photoshop CS4 标准培训教程 第三章第三章 在 Photoshop CS4 中所谓的不规则选区指的是随意性强,不被局限在几何形状内, 他们可以是鼠标任意创建的也可以是通过计算而得到的单个选区或多个选区。在 Photoshop 中可以用来创建不规则选区的工具被分组放置到套索工具组、魔棒工具组.
1 学籍归档工作 年学籍归档工作安排 从 2008 年开始,改为按届移交档案 从 2008 年开始,改为按届移交档案 今年的归档工作范围: 今年的归档工作范围: 2014 年应届毕业班级 2014 年应届毕业班级 2014 年办理毕业证的往届生。 2014 年办理毕业证的往届生。 整理内容:根据.
第一节 相图基本知识 1 三元相图的主要特点 (1)是立体图形,主要由曲面构成; (2)可发生四相平衡转变; (3)一、二、三相区为一空间。
量子力学教程 ( 第二版 ) 3.4 连 续 谱 本 征 函 数 的 归 一 化 连续谱本征函数是不能归一化的 一维粒子的动量本征值为的本征函数 ( 平面波 ) 为 可以取 中连续变化的一切实数值. 不难看出,只要则 在量子力学中, 坐标和动量的取值是连续变化 的 ; 角动量的取值是离散的.
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
Relevance Theory Lecture 12. Relevance Theory 交际研究的对象是交际的概念、内容、 性质、功能、方法和交际行为、交际参 加者之间的关系等的认识和阐述。 20 世 纪 70 年代末以来, Sperber & Wilson 把认 知与交际结合起来,于 1986.
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
周期信号的傅里叶变换. 典型非周期信号 ( 如指数信号, 矩形信号等 ) 都是满足绝对可 积(或绝对可和)条件的能量信号,其傅里叶变换都存在, 但绝对可积(或绝对可和)条件仅是充分条件, 而不是必 要条件。引入了广义函数的概念,在允许傅里叶变换采用 冲激函数的前提下, 使许多并不满足绝对可积条件的功率.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
1 第 7 章 存储过程、触发器和程序包 在很多时候,都需要保存 PL/SQL 程序块,以便 随后可以重新使用。这也意味着,程序块需要一个名 称,这样需才可以调用或者引用它。命名的 PL/SQL 程序块可被独立编译并存储在数据库中,任何与数据 库相连接的应用程序都可以访问这些存储的 PL/SQL 程序块。
网上预约集港操作指南 一、登录系统 登陆下面图片显示网址:输入堆场用户名、密码和校验码登陆系统.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
1-4 节习题课 山东省淄博第一中学 物理组 阚方海. 2 、位移公式: 1 、速度公式: v = v 0 +at 匀变速直线运动规律: 4 、平均速度: 匀变速直线运动 矢量式 要规定正方向 统一单位 五个量知道了三 个量,就能求出 其余两个量 3 、位移与速度关系:
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
1 、如果 x + 5 > 4 ,那么两边都 可得 x >- 1 2 、在- 3y >- 4 的两边都乘以 7 可得 3 、在不等式 — x≤5 的两边都乘以- 1 可得 4 、将- 7x — 6 < 8 移项可得 。 5 、将 5 + a >- 2 a 移项可得 。 6 、将- 8x < 0.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
1 物体转动惯量的测量 南昌大学理学院
Java 水晶报表. 目录 水晶报表开发 (CrystalReports 2008) Java 水晶报表 (JBuilder 2005) 报表项目布署 (WebSphere v6.1)
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
企业产品标准信息公共服务平台 操作介绍 目录 一 、系统架构介绍 二 、企业产品标准自我声明填报系统 三 、企业产品标准公示系统.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
7 生产费用在完工产品与在产 品之间分配的核算. 2 第七章 生产费用在完工产品与在产品之 间的分配  知识点 :  理解在产品的概念  掌握生产费用在完工产品与在产品之间的分 配.
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
参考文献管理软件. 常见参考文献管理软件 : 中文 : CNKI E-learning (目前免费) NoteExpress NoteFirst 英文: Refworks Endnote (网络版免费) Mendeley……
八. 真核生物的转录 ㈠ 特点 ① 转录单元为单顺反子( single cistron ),每 个蛋白质基因都有自身的启动子,从而造成在功能 上相关而又独立的基因之间具有更复杂的调控系统。 ② RNA 聚合酶的高度分工,由 3 种不同的酶催化转 录不同的 RNA 。 ③ 需要基本转录因子与转录调控因子的参与,这.
张勤 人大报刊复印资料 专题全文数据库 简 介简 介 《人大报刊资料全文数据库》是中国人民大 学书报资料中心与北京博利群电子信息有限 公司联合开发研制的大型数据库光盘。它涵 盖面广、信息量大、分类科学、筛选严谨、 结构合理,是国内最具权威的社会科学、人.
3D 仿真机房建模 哈尔滨工业大学 指导教师:吴勃英、张达治 蒋灿、杜科材、魏世银 机房尺寸介绍.
欢 迎 使 用 《工程流体力学》 多媒体授课系统 燕 山 大 学 《工程流体力学》课程组. 第九章 缝隙流动 概述 9.1 两固定平板间的层流流动 9.2 具有相对运动的两平行平板 间的缝隙流动 9.3 环形缝隙中的层流流动.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
第二节 财政的基本特征 第二节 财政的基本特征 一、财政分配以政府为主体 二、财政分配一般具有强制性 三、财政分配一般具有无偿性 第一章 财政概论 四、财政分配一般具有非营利性.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
§7.2 估计量的评价标准 上一节我们看到,对于总体 X 的同一个 未知参数,由于采用的估计方法不同,可 能会产生多个不同的估计量.这就提出一 个问题,当总体的一个参数存在不同的估 计量时,究竟采用哪一个好呢?或者说怎 样评价一个估计量的统计性能呢?下面给 出几个常用的评价准则. 一.无偏性.
Presentation transcript:

程序设计是计算机学科的核心和灵魂程序设计是计算机学科的核心和灵魂 程序设计基础 第十一章 面向对象软件构造

11.1 软件质量 11.2 程序断言机制 11.3 异常处理机制 11.4 可重用构件库 11.5 面向对象软件构件 第十一章 面向对象软件构造

11.1 软件质量  一、软件危机 20 世纪 60 年代后期,由于计算机软件的规模和复 杂性的增大,又由于软件开发的合作需求的增强, 使得以前的软件开发过程和控制方法,无法保证软 件项目的开发周期和开发成本的要求,这就产生了 整个软件行业的生产效率低下,这被称为软件危机。  二、软件工程 为了解决软件危机,人们不得不研究软件开发的一 般规律,试图找到一系列的理论方法来指导和规范 软件开发的过程,这就产生了软件工程这门工程学 科。其中软件质量和软件开发模式是关注的重点。

三、软件质量 包括正确性、健壮性、可扩展性、可重用性、有效性等。 面向对象程序设计特别强调:可靠性和可扩展性、可重 用性。 11.1 软件质量

11.2 程序断言机制 一、程序断言 形式上看是一种逻辑表达式,称为 assertion 。 作用: ( 1 )保证程序的正确性与健壮性 ( 2 )可用于形成程序的文档 ( 3 )支持程序的动态调试 ( 4 )构成异常处理的基础

11.2 程序断言机制 二、程序断言的用法 由于在 C++ 中,仅支持很少的程序断言机制,所 以我们可以参考一些别的程序语言的用法,并将这些 断言写在 C++ 语言的注释中。 三、 C++ 语言中的程序断言 利用 assert 宏(需包含 assert.h )来实现。 用法如下: void assert(int expression);

11.2 程序断言机制 当检测条件 expression 不满足的时候,产生一个 断言,在标准错误输出流上输出信息, 并中止程序执行 Assertion failed:expression file,line 注意:在程序的 release 版本中, assert 不起任何作用, expression 不被执行。

11.2 程序断言机制 例: #include void analyze_string( char *string ); int main( void ) { char test1[] = "abc", *test2 = NULL, test3[] = ""; cout<< test1 ; analyze_string( test1 ); cout<< test2 ; analyze_string( test2 ); cout<< test3 ; analyze_string( test3 ); } void analyze_string( char * string ) { assert( string != NULL ); assert( *string != '\0' ); assert( strlen( string ) > 2 ); }

11.2 程序断言机制 在 VC++ 中,还有两个类似的宏 VERIFY 和 ASSERT 当 debug 版本时, VERIFY 和 ASSERT 与 assert 没有区别。 但是 当是 release 版本时, VERIFY 执行 expression ,但是不产 生中断。而 ASSERT 不执行 expression

11.3 异常处理机制 当在程序执行的过程中出现了一些不平常的情况,或 运行结果无法定义的情况,而使操作不得不中断时,我们 说程序出现了异常。 对于异常情况的处理, C++ 具有自己的异常处理机 制,其基本思想是:将异常的检验和处理分开,当一个函 数体中检测到异常条件的存在,而无法确定相应的处理方 法时,将引发一个异常,并由函数自己或者函数的直接、 间接调用者检测并处理这个异常。

11.3 异常处理机制 一、 C++ 异常处理机制的使用 ( 1 )我们使用 try 语句来监测异常情况, catch 语句来处 理捕获和处理异常,用 throw 语句抛出异常。 try{ 语句序列 ; } catch( 数据类型 1 [ 参数 ]) { } catch( 数据类型 2 [ 参数 ]) { } …… catch( 数据类型 n [ 参数 ]) { }

11.3 异常处理机制 例 1 #include void Fun(); int main() { cout<<“I tell you a Story.”<<endl; try{cout<<“Princess meets Frog.”<<endl; Fun(); cout<<“What is the result!”<<endl; } catch(int i){ cout<<“Princess kisses Frog.”<<i<<endl; } catch(unsigned){ cout<<“Princess run away in disgust.”<<”<<endl; } cout<<“the End.”<<endl; return 0; } void Fun() { throw 1; }

11.3 异常处理机制 说明: try 块和 catch 列表被总称为 try 语句,其中的 catch 列 表中的每个项被称为一个异常处理程序。如果 try 块被正 常执行而没有出现异常,则异常处理程序不被执行,程序 接着执行 try 语句之后的语句。如果 try 块的执行导致一个 异常被引发,则 try 块中在异常引发之后的操作不再被执 行, 控制转移到该 try 语句的某个异常处理程序中进行,在 该异常处理程序被执行完之后,程序开始执行 try 语句之 后的语句。

11.3 异常处理机制 如果引发了异常,但 try 语句没有申明处理这个异 常,则控制又转移到该 try 语句所在的函数的调用函数中。 在该调用函数中使用相同的规则去寻找一个异常处理程序。 这个过程一直进行到该异常被我们的程序处理,或被 C++ 运行系统处理为止。如果异常被 C++ 运行系统处理,程序 将被终止运行,我们成这种终止为异常终止。

11.3 异常处理机制 ( 2 ) throw 的用法 throw 变量或常量 ; 表示在 try 块中抛出与变量或常量相同类型和值的异 常。 throw; 表示异常处理程序继续向上一级调 用函数抛出异常。

11.3 异常处理机制 例 2 #include void trigger(); { try{ throw “WARNING”; } catch(char* msg){ cout<<“Catch”<<msg<<“in trigger()”<<endl; throw; } return; } int main() { try{ trigger(); } catch(char* msg){ cout <<“Catch”<<msg<< “in main()”<<endl; } return 0; }

11.3 异常处理机制 ( 3 ) catch 的用法 catch( 数据类型 [ 变量名 ]) 表示在 catch 块中要捕获与变量相同类型和值的异 常。如果没有变量名,表示异常处理程序仅仅对变量 类型感兴趣,对于值则不感兴趣,可以省略。 catch( … ) 表示异常处理程序捕获任何形式的异常。一般要放 在多个异常处理程序的最后。

11.3 异常处理机制 二、异常接口规范申明 为使一个函数的用户能够方便地指导所使用的函 数都能够引发那些异常,可以在函数的原型声明中列 出这个函数可能引发的所有异常。 例如: void fun() throw (A,B,C); 表明函数 fun 能够引发类型为 A,B,C 的异常,在 fun 函数体内只能抛出这三种异常,如果试图抛出其他类 型的异常,运行系统将会终止程序运行。 如果函数 fun 中没有理出异常接口申明,表示 fun 可以引发任何类型的异常

11.3 异常处理机制 如果有: void fun() throw(); 表示 fun 不引发任何异常 注意:异常接口申明不是函数原型的一部分,内联函 数不能申明异常接口。

11.3 异常处理机制 二、异常时的构造函数和析构函数 在构造函数中可以引发异常,但是由于构造函数 没有被执行完,所以,对象并没有被构造。当这个没 有被完全构造的对象被删除时,并不为这个对象调用 析构函数。

11.3 异常处理机制 例 3 #include class Message{ public: Message(const string& s) throw(string) ~Message(); private: string msg; }; Message::Message(const string& s) throw(string) : msg(s) { throw string(“throwing an exception in constructor”); }

11.3 异常处理机制 例 3 Message::Message(const string& s) throw(string) : msg(s) { throw string(“throwing an exception in constructor”); } Message::~Message() { cout<<“Destructor:”<<msg<<endl; } void f() throw(string) { Message a(“Run away from f()”); }

11.3 异常处理机制 例 3 int main() { try{ f(); } catch(const string& m) { cout<<“The exception is caught:”<<m<<endl; } return 0; } 程序的运行结果为: The exception is caught: throwing an exception in constructor 注意:对象 a 的析构函数没有被调用。

11.3 异常处理机制 说明: ( 1 )当创建一个局部生存期的数组对象时,如果它的 一个元素对象的构造函数引发了异常,则只有这个数组 中被构造的元素对象的析构函数被执行,那些没有被构 造或没有被完全构造的元素对象的析构函数不被执行。 ( 2 )对于使用继承机制或者对象成员建立的包含子对 象的对象,如果在创建该对象时引发了异常,则该对象 只被部分构造,只有该对象所包含的被完全构造的子对 象的析构函数被执行。

11.4 可重用构件库 一、可重用构件 可重用构件包括源代码,需求分析、系统设 计、测试用例、各种开发流程、开发文档等。 源代码级的可重用构件指的是可供程序设计过 程重新利用的基本程序单位,主要形式是源程序一 级的子程序、函数、过程、模块或者类。在面向对 象程序设计中可重用构件通常表现为类的形式。

11.4 可重用构件库 可重用构件库 由许多构件的构件规范、构件实现、构件目标 以及构件演示组成的集合。 构件库规范 对构件库中各个构件的说明。用户通过构 件库规范使用构件。 构件规范 对构件的说明。 构件实现 对构件规范的实现。 构件目标 由构件实现编译得到的目标文件。

11.4 可重用构件库 构件演示 用于演示构件基本功能与特点的源程序文件与可 执行文件。 构件库规范首部注释 在构件库规范的开头对整个构件库进行说明和解 释。 构件规范首部注释 在每一个构件规范的开头对整个构件进行说明和解释 构件规范注释 在每一个构件规范中的注释,它包括构件规范首 部注释、构件规范中声明的所有含事故的函数首部注 释、函数形式参数注释、各种变量注释等等。

11.4 可重用构件库 构件实现首部注释 在每一个构件实现的开头对整个构件实现情况 进行说明和解释。 构件实现注释 在每一个构件实现中的注释,它包括构件实现首 部注释、构件实现中引入的内部函数的首部注释、函 数形式参数的注释一级构件实现中引入的内部变量的 注释等。

11.4 可重用构件库 二、构件库组织形式与使用方法 构件库是按应用领域来划分的。所有可重用构 件均以面向对象程序设计语言实现,每一个面向专 门领域的构件库都由类组成,即构件库存放的构件 必须是类,而不能是例程(如过程、函数、子程序 等)。 每个构件库应包括以下文件: ( 1 )一个或多个构件库规范 ( 2 )多个构件实现 ( 3 )多个构件目标 ( 4 )多个构件演示

11.4 可重用构件库 用户要使用构件库,经常使用下面的方法:首 先将构件库规范文件(库头文件)包含在使用此构 件的源程序中;接着将构件库文件(.LIB )列入项 目连结库中。 三、构件库设计风格 (1) 命名风格 包括命名大小写、命名长度和命名选择。 (2) 注释风格 包括注释原则、构件库规范首部注释、构件规范 首部注释构件规范注释、构件实现首部注释、构件 实现注释和构件演示首部注释。 (3) 版面风格 缩进与分隔符和标准版面

11.4 可重用构件库 三、构件库设计原则 (1) 模块封装 每一构件都是一个类,类是唯一的模块形式。 (2) 利用继承机制组织构件库 (3) 继承和多态性 在使用继承机制的基础上,可充分利用面向对象程序 设计语言的多态性特征。 (4) 对象实例和对象指针 (5) 单实例类 (6) 缺省参数表与可变数目参数 (7) 书写注释 (8) 其它 避免使用全局变量、全局 ( 非成员 ) 函数、公有数据成 员;避免直接访问另一对象的数据成员;尽量不使用内联。

11.4 可重用构件库 三、构件库文档编制指南