C++程序设计语言(李雁妮) 第7章
64页1、第7章 名字空间与异常处理,7.1 模块与接口的基本概念 7.2 名字空间 7.3 异常处理 7.4 综合示例 小结 练习题,7.1 模块与接口的基本概念 任何一个设计、构造良好的实用程序均是由若干模块(Module)/构件(Component)组成的,即使它是一个相对简单的程序。这意味着: (1) 可以将程序划分成一组部件。 (2) 程序模块的划分可以从多个角度来进行:一是按自己写的程序与它所调用的系统支撑功能(如标准库函数或类库)来划分;二是将自己写的程序本身按某种原则(例如按功能)来进行划分,等等。 程序划分是有目的的。将程序划分成模块,不仅能使其程序结构更加清晰,而且其模块更易于被替换与重用。,C+的名字空间(Namespace)和异常处理机制(Exception Handing)就是支持程序模块化组织的强有力机制。 本章我们首先以小型桌面计算器为例,来具体阐述C+用于支持模块化程序设计范型的主要机制名字空间及相关问题。 逻辑上,我们可将小型桌面计算器按功能划分为以下五大模块。 (1) 语法分析器(Parser):完成语言的语法分析; (2) 词法分析器(Lexer):完成语言
2、的词法分析; (3) 符号表(Symbol Table):存储用户标识符的名-值对;,(4) 驱动程序(Driver):main函数; (5) 错误处理器(Error Handler):进行程序的错误处理。 其中,语法分析器、词法分析器和符号表是该程序的三大核心部件。 程序中各模块之间的划分及模块间的相互关系如图7.1和图7.2所示。图中的箭头表示模块之间的调用关系。 通过前面的学习我们已经知道,仅需了解一个函数接口的具体定义,而无需了解函数的具体实现,我们就能够很好地使用函数。,图7.1 桌面计算器的程序逻辑划分,图7.2 桌面计算器的模块关系图,类似地,即使程序的一个部件是由多个函数组成的,或者其中既有自定义类型也有全局变量、还有函数,我们都可以这样来设想:如果这样的部件也像函数那样有一个起包装作用的接口,也同样可以只需要了解接口而不需要了解实现,就能够很好地使用它,这正是信息隐藏原理的实质与宗旨。 以此理念,图7.2中程序各模块之间调用的依赖关系我们可用图7.3描述。,图7.3 程序各模块调用依赖图,图7.3中各个模块均调用错误处理模块,考虑图的清晰性,各模块对错误处理模块接口的
3、调用我们暂未画出。 从图7.3可看出,各模块调用时直接依赖的仅仅是所调用模块的接口,而与其调用的实现无关。 确切地说,若程序中的一个部件具有明确的边界,能够实现接口与实现的分离,并对它的用户而言在使用时只需关心其接口而不管其实现,该部件就叫做模块(Module)。 实现模块的接口与实现的分离,需要程序设计语言提供相应的支持机制。C+提供的支持机制是Namespace和Class。 模块用接口隐蔽了其中的数据和函数的处理细节(这也称做封装,Encapsulation),使得模块可以在保持接口不变的前提下,可改变其数据结构和函数的处理细节。,7.2 名 字 空 间 7.2.1 名字空间的基本概念 C+中的名字空间(Namespace)是一种表现逻辑聚集关系的机制。换句话说,如果一些声明(定义声明与非定义声明)在逻辑上都与某个划分准则有关,就可以把这些声明放入一个共同的名字空间中,以表现这一事实。 同一名字空间中的声明在概念上属于同一个逻辑实体。由于程序中的模块就属于这种逻辑实体,因而我们可用C+的名字空间来封装模块,将程序进行模块化组织。,C+的名字空间的语法形式为 namespace 名
4、字空间名 /逻辑相关的数据、函数、类或其它等 /注意:无“;”号 参照图7.1和第6章桌面计算器的代码,若以模块化的组织形式重构桌面计算器,则其语法分析(parser)模块为 namespace Parser double expr(bool); / 非定义声明 double prim(bool get) /* */ ,上面,我们仅仅是把一些逻辑相关的部分组织到一个名字空间中(模块),并未实现模块接口与其实现的分离。如何实现这种接口与实现的分离呢?关键是在其模块实现部分中出现的成员被该名字空间的名字所约束(Qualified),这样的约束通过约束符( Qualifier :,C+的作用域解析符)来表示。以桌面计算器的Parser模块为例,进行界面/接口与实现分离的程序代码如下:,从上述代码可看出,接口与实现分离的要点是在每个模块接口中仅需非定义声明其中成员的接口部分,其模块成员的实现(如数据、类的定义、函数的定义等)均应以 名字空间名:成员 / 的形式进行名字空间外的定义声明。C+语法规定,利用此形式只能进行名字空间内成员的定义声明,而不能利用此语法新定义声明一个名字空间成员。,7.2
《C++程序设计语言(李雁妮) 第7章》由会员E****分享,可在线阅读,更多相关《C++程序设计语言(李雁妮) 第7章》请在金锄头文库上搜索。
逍遥游复习 知识点整理
近现代法德关系史 高三展示课3稿
当代大学生人生信仰及追求的调查研究
长相思 纳兰性德-ppt课件
课件:危机意识 一
英语ppt演讲关于阿甘正传
发达国家基础教育改革的动向与趋势 修改版
中国民间美术 课件.ppt
生物质发电技术与系统 课程ppt 第1章 生物质发电技术现状及发展趋势 2学时 -----2016
现代信号处理思考题 含答案
执业药师继续教育 抑郁症的药物治疗 100分
小学生的成长档案模板不用修改 万能型
增订六版 现代汉语 上册 第二章文字 思考与练习答案
国家财政ppt课件
加拿大英语介绍
六年级统计图的选择课件
中学生成长档案ppt
中国现代文学史期末复习整理
lohi和hihilo训练对女子赛艇运动员运动能力影响的比较研究
风雨贾平凹阅读答案
2024-03-21 39页
2024-03-21 41页
2024-03-21 40页
2024-03-21 34页
2024-03-21 33页
2024-03-21 35页
2024-03-21 21页
2024-03-21 45页
2024-03-21 33页
2024-02-20 85页