从封装看计算机高级语言的发展规律概述1

上传人:tang****xu4 文档编号:124357118 上传时间:2020-03-11 格式:PPT 页数:64 大小:254.50KB
返回 下载 相关 举报
从封装看计算机高级语言的发展规律概述1_第1页
第1页 / 共64页
从封装看计算机高级语言的发展规律概述1_第2页
第2页 / 共64页
从封装看计算机高级语言的发展规律概述1_第3页
第3页 / 共64页
从封装看计算机高级语言的发展规律概述1_第4页
第4页 / 共64页
从封装看计算机高级语言的发展规律概述1_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《从封装看计算机高级语言的发展规律概述1》由会员分享,可在线阅读,更多相关《从封装看计算机高级语言的发展规律概述1(64页珍藏版)》请在金锄头文库上搜索。

1、从封装看计算机高级语言的发 展规律 计算机科学与技术学院 邱勇 内 容 1 高级语言的发展 2 非结构化程序设计 3 结构化程序设计对实现功能的封装 4 相关数据的封装 5 进一步提高封装度 6 面向对象程序设计中类的封装 7 继承也是封装 8 oop中其它封装形式 9 JAVA C 新一代语言中的封装 10 高级语言的发展总结 11 结论 1 计算机高级语言的发展历程 非结构化程序设计语言 结构化程序设计语言 面向对象程序设计语言 1 计算机高级语言的发展历程 非结构化程序设计语言 早期出现的高级语言在程序设计时不划分 模块 称为非结构化程序设计语言 如 ALGOL BASIC等 1 计算机

2、高级语言的发展历程 结构化程序设计语言 以C语言 PASCAL为代表的语言支持结构 化程序设计方法 可以将程序划分为模块 按自上而下 逐步求精的方法设计软件 称为结构化程序设计语言 1 计算机高级语言的发展历程 面向对象程序设计语言 是最新一代的程序设计的方法 它的将数 据与处理数据的过程作为一个整体 对 象 具有三大特点 1 封装性和数据隐藏性 2 继承和重用 3 多态性 1 计算机高级语言的发展历程 1 封装性和数据隐藏性 通过建立用户定义类支持封装性和数据隐 藏 完好定义的类建立后 便可看成是完 全封装的实体 作为一个整体单元来使用 同时 类的实际内部工作及相关数据应 当隐藏起来 即无须

3、知道其工作原理 只 需知道如何使用类便可 1 计算机高级语言的发展历程 2 继承和重用 程序可以在扩展现有类型的基础上声明新 类型 派生类 新类型继承原类型属性 方法 并增加某些特性 3 多态性 一个接口 多种方法 通过继承的方法构造 类 采用多态性为每个类指定表现行为 1 计算机高级语言的发展历程 从本质上来说 计算机高级语言的发展有什 么规律 新一代的的语言究竟先进在什么地方 只有理解了这些问题 才能从本质上掌握新 一代计算机语言的先进特性 设计出高质量 的软件 对开发出新型的程序设计语言也有 一定的启发意义 2 非结构化程序设计 计算机高级语言发展的初期 如BASIC ALGOL等 1

4、计算机高级语言的发展历程 BASIC程序例子 10 LET X 2 20 LET Y SIN X 30 PRINT Y RUN 0 034899496 1 计算机高级语言的发展历程 BASIC语言特点 1 构成简单 BASIC语言的最基本语句只有 17种 2 是一种 人机会话 式的语言 3 功能较全 适用面广 4 执行方式灵活 BASIC语言提供两种执行方 式 分别是程序执行方式和命令执行方式 2 非结构化程序设计语言 非结构化程序设计的缺点 整个程序不分模块 所有的变量和代码都是 全局的 程序结构 变量1 变量2 变量m 代 码1 代码2 代码n 变量1 变量2 变量3 变量4 代码1 代码

5、2 代码3 代码4 程序1 程序2 变量1 代码1 变量2 代码2 变量3 代码3 2 非结构化程序设计语言 随着计算机应用的发展 当程序稍大一些时 非 结构化程序设计语言固有的缺点就会暴露出来 1 变量是全局的 所有变量都可以被任何代码所 使用 2 代码是全局的 可以随意转向到任何位置去执 行 容易造成混乱 2 非结构化程序设计语言 例如 一个程序有三项功能 每个功能与 相应的变量和执行相应的代码的关系可能 如下图所示 功能1 功能2 功能3 变量1 变量2 变量3 变量4 代码1 代码2 代码3 代码4 代码5 代码6 程序 功能 图1 非结构化程序的结构 我们会发现 多个功能在一个程序中

6、可互相 使用变量 互相执行代码 使程序的结构显 得混乱 当功能数不多时不会有太大的影响 而当功能数多于十个乃至几十个时 这样的程序结构将复杂至无法控制的地步 主要表现为程序编码难 调试难和维护难 3 结构化程序设计 功能的封装 结构化程序设计语言 为了解决以上的程序结构混乱问题 以适 应开发大程序的要求 产生了结构化程序 设计语言 如PASCAL C等 结构化程序设计语言支持模块化的设计方 法 可以将一个复杂的程序分解为一个个 功能相对简单的模块 再通过对这些模块 的调用完成原来程序的功能 3 结构化程序设计 功能的封装 设计模块的原则是 1 高内聚 在每个模块中 只含有单一的 功能和与该功能

7、相关的变量 2 低耦合 模块之间尽量减少联系 模 块内的变量被称为局部变量 只在模块内 部可见 一个模块也不允许转移到另一个 模块内部去 3 结构化程序设计 功能的封装 对于上例 只要将这3个功能有关的代码和 变量分别设计成模块 再设计一个主模块调 用 就可以避免以上的混乱 如图2所示 主控模块 模块1 模块2模块3 将变量与代码放入模块 3 结构化程序设计 功能的封装 可以说 模块如同一个箱子 实现了将一部分 程序及变量的封装 主控模块 模块1 模块2模块3 3 结构化程序设计 功能的封装 可以说 模块如同一个箱子 装入了一部分程 序及变量 也可以成为 封装 那么 一个模块到底该装入什么样的

8、程序代码 和变量 主控模块 模块1 模块2模块3 3 结构化程序设计 功能的封装 模块如同一个箱子 实现了将程序中按功能逻 辑相关的代码与变量的封装 主控模块 模块1 模块2模块3 3 结构化程序设计 功能的封装 模块封装的原理是 程序中逻辑上有关系元素 变量和代 码 应当在物理上也放在一起 加以封 装 换句话说 逻辑上相关 物理上也应相 关 这就是逻辑物理一致性原理 3 结构化程序设计 功能的封装 封装原理 逻辑上有关系元素 应当在物理上也放在 一起 加以封装 生活中的封装原理应用 3 结构化程序设计 功能的封装 封装原理 程序中逻辑上有关系元素 应当在物理 上也放在一起 加以封装 再考察一

9、下 按照封装原理 程序中还 能实现什么封装呢 4 相关数据的封装 程序中的数据 变量与常量 之间是否也 可能存在逻辑相关性呢 4 相关数据的封装 考察以下图中变量定义 学生信 息 教师信 息 变量1 变量2 变量3 变量4 变量5 4 相关数据的封装 学生变量与教师变量交叉在一起 显得混 乱 分析其中的逻辑关系 我们会发现与 学生有关的变量是逻辑相关的 同样与教 师有关的变量也是逻辑相关的 而这些逻 辑相关的变量并没有得到封装 因此 跟 据封装的原理 也应加以封装 4 相关数据的封装 为解决这个问题 可使用现代程序设计语言 中普遍支持的高级数据类型 结构类型 例 如 图4所示为用C语言结构定义

10、封装了与 学生相关的数据 4 相关数据的封装 教师结构变量 教师变量1 教师变量2 学生结构变量 学生变量1 学生变量2 4 相关数据的封装 另外 程序中的常量之间也同样可能存在 逻辑相关性 例如 多个有关色彩的编码 常量 是逻辑相关的 应当在物理上放在 一起加以封装 而枚举类型就可实现将这 种逻辑相关常量的封装 enum Color red black yellow blue white enum Color c 5 进一步提高封装度 以C pascal等语言为代表的结构化程序设 计语言还有没有可能继续提高封装度 或 者说程序中是否还有逻辑物理不一致的问 题 要回答这个问题 让我们分析一下客

11、观 世界 客观世界由许许多多事物组成 每个事物 都具有数据和功能 5 进一步提高封装度 如 一个具体的学生是一个事物 具有数据 姓名 学号 成绩等 具有功能 设置姓名 学号 成绩 显示姓名 学号 成绩等 由此可知 客观世界中一个学生的数据及 功能是密切相关的 而在采用结构化程序设计语言设计的程序 中 有关学生的数据和功能在程序中可能被 分散在不同地方 5 进一步提高封装度 5 进一步提高封装度 如图所示 客观对象的一体性在程序中没 有得到反映 存在逻辑物理不一致问题 为了解决这一问题导致了面向对象程序设 计 OOP 语言的产生 6 面向对象程序设计中类的封装 为了使程序中与客观对象取得一致 在

12、面向 对象程序设计语言中可以定义类 在类中将 与对象相关的变量 在OOP中称为属性 和功 能模块 在OOP中称为方法 进行封装 6 面向对象程序设计中类的封装 在OOP中对学生对象和教师对象分别进行 封装 形成学生类 教师类 public class Student private int num age private String name sex private float score Student int num int age String name String sex float score this num num this age age this name name th

13、is sex sex this score score public void getnum system out println this num 6 面向对象程序设计中类的封装 6 面向对象程序设计中类的封装 类可以实现将对象的数据与方法的封装 但不同类之间是否存在可封装的内容呢 7 继承也是封装的一种形式 考察下面的两个类 7 继承也是封装的一种形式 我们会发现 这两个类中存在共同的部分 这些共同部分实际上是一般 人 的属性和 方法 因些 这些部分是逻辑相关的 有 必要进行进一步的封装 封装为基类 人 员类 而学生和教师类可以从这个基类继承 产生 7 继承也是封装的一种形式 7 继承也是

14、封装的一种形式 将多个类中逻辑上相关的一组方法与属性 封装到一起 构成这多个类的共同基类 而原多个类变为从该基类的派生的形式 这就是面向对象的继承性 继承本质上仍是一种高级封装 当然实际工作中我们可能先设计基类 再 设计其派生类 但这也是我们先在头脑中 完成了由个别到一般的归纳 在设计中应 用了由一般到个别的演绎 8 OOP中其它封装形式 按照封装原理 OOP中还可进行更高级的 封装 1 类模板 如果在程序中要使用一组类 这组类的功 能与结构的相似性的 则这种相似性也是 一种逻辑相关 应当进行封装 OOP的类 模板可以实现这种封装 template class tarray int size

15、T array public tarray int sz 10 size sz array new T sz tarray tarray tarray delete array int getsize return size tarray int 8 OOP中其它封装形式 2 函数模板 如果在程序中存在一组方法在功能与结构 是相似性的 这也构成逻辑相关 应当加 以封装 OOP的函数模板可以实现这种封 装 template T Power T base int exponent T i product 1 for i 1 i exponent i product base return prod

16、uct 8 oop中其它封装形式 3 函数重载 將逻辑上相关的一组方法采用一个函数名 这种物理上的一致性也构成一种封装 这就是函数重载 函数重载是OOP多态性 的一种方式 void display int a cout The int is a n void display float a cout The float is a n void display char text cout The text is text n 8 oop中其它封装形式 4 方法覆盖 在父类中定义虚方法接口 在派生类中覆 盖父类的虚方法 可以实现OOP中的高级 多态性 动态联编多态性 这其中父子类 中相同的方法接口也是对逻辑相关方法的 物理封装 class shape protected int hight width public shape int h int w hight h width w virtual void showarea class rectangle public shape public rectangle int h int w shape h w void showarea

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号