从封装看计算机高级语言发展规律_第1页
从封装看计算机高级语言发展规律_第2页
从封装看计算机高级语言发展规律_第3页
从封装看计算机高级语言发展规律_第4页
从封装看计算机高级语言发展规律_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、从封装看计算机高级语言发展规律从封装看计算机高级语言发展规律内 容 1. 高级语言的发展高级语言的发展 2. 非结构化程序设计非结构化程序设计 3. 结构化程序设计对实现功能的封装结构化程序设计对实现功能的封装 4. 相关数据的封装相关数据的封装 5. 进一步提高封装度进一步提高封装度 6. 面向对象程序设计中类的封装面向对象程序设计中类的封装 7. 继承也是封装继承也是封装 8. oop中其它封装形式中其它封装形式 9. JAVA,C#新一代语言中的封装新一代语言中的封装 10.高级语言的发展总结高级语言的发展总结 11 结论结论从封装看计算机高级语言发展规律1 计算机高级语言的发展历程 非

2、结构化程序设计语言 结构化程序设计语言 面向对象程序设计语言从封装看计算机高级语言发展规律1 计算机高级语言的发展历程 非结构化程序设计语言 早期出现的高级语言在程序设计时不划分模块,称为非结构化程序设计语言。如ALGOL,BASIC等。 从封装看计算机高级语言发展规律1 计算机高级语言的发展历程 结构化程序设计语言 以C语言,PASCAL为代表的语言支持结构化程序设计方法,可以将程序划分为模块,按自上而下,逐步求精的方法设计软件,称为结构化程序设计语言。 从封装看计算机高级语言发展规律1 计算机高级语言的发展历程 面向对象程序设计语言 是最新一代的程序设计的方法,它的将数据与处理数据的过程作

3、为一个整体对象 具有三大特点: (1)封装性和数据隐藏性 (2)继承和重用 (3)多态性 从封装看计算机高级语言发展规律1 计算机高级语言的发展历程 (1)封装性和数据隐藏性: 通过建立用户定义类支持封装性和数据隐藏。完好定义的类建立后,便可看成是完全封装的实体,作为一个整体单元来使用。同时,类的实际内部工作及相关数据应当隐藏起来,即无须知道其工作原理,只需知道如何使用类便可。 从封装看计算机高级语言发展规律1 计算机高级语言的发展历程 (2)继承和重用: 程序可以在扩展现有类型的基础上声明新类型(派生类)。新类型继承原类型属性方法,并增加某些特性。 (3)多态性: 一个接口, 多种方法: 通

4、过继承的方法构造类,采用多态性为每个类指定表现行为。 从封装看计算机高级语言发展规律1 计算机高级语言的发展历程 从本质上来说,计算机高级语言的发展有什么规律? 新一代的的语言究竟先进在什么地方? 只有理解了这些问题,才能从本质上掌握新一代计算机语言的先进特性,设计出高质量的软件,对开发出新型的程序设计语言也有一定的启发意义。从封装看计算机高级语言发展规律2 非结构化程序设计非结构化程序设计 计算机高级语言发展的初期 如BASIC,ALGOL等。从封装看计算机高级语言发展规律1 计算机高级语言的发展历程 BASIC程序例子: 10 LET X=2 20 LET Y=SIN(X) 30 PRIN

5、T Y RUN 0.034899496从封装看计算机高级语言发展规律1 计算机高级语言的发展历程 BASIC语言特点 (1)构成简单。 BASIC语言的最基本语句只有17种。 (2)是一种“人机会话”式的语言。 (3)功能较全、适用面广。 (4)执行方式灵活。BASIC语言提供两种执行方式,分别是程序执行方式和命令执行方式。 从封装看计算机高级语言发展规律2 非结构化程序设计语言非结构化程序设计语言 非结构化程序设计的缺点: 整个程序不分模块,所有的变量和代码都是全局的. 程序结构=变量1,变量2,.,变量m,代码1,代码2,.,代码n从封装看计算机高级语言发展规律变量1变量2变量3变量4代码

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

7、码3代码4代码5代码6程序 功能图1 非结构化程序的结构我们会发现,多个功能在一个程序中可互相使用变量,互相执行代码,使程序的结构显得混乱。当功能数不多时不会有太大的影响。 而当功能数多于十个乃至几十个时,这样的程序结构将复杂至无法控制的地步,主要表现为程序编码难、调试难和维护难。 从封装看计算机高级语言发展规律3 结构化程序设计结构化程序设计-功能的封装功能的封装 结构化程序设计语言:结构化程序设计语言: 为了解决以上的程序结构混乱问题,以适应开发大程序的要求,产生了结构化程序设计语言,如PASCAL,C等。 结构化程序设计语言支持模块化的设计方法, 可以将一个复杂的程序分解为一个个功能相对

8、简单的模块,再通过对这些模块的调用完成原来程序的功能。 从封装看计算机高级语言发展规律3 结构化程序设计结构化程序设计-功能的封装功能的封装 设计模块的原则是 (1)高内聚:在每个模块中, 只含有单一的功能和与该功能相关的变量; (2)低耦合:模块之间尽量减少联系。 模块内的变量被称为局部变量,只在模块内部可见; 一个模块也不允许转移到另一个模块内部去。 从封装看计算机高级语言发展规律3 结构化程序设计结构化程序设计-功能的封装功能的封装 对于上例,只要将这3个功能有关的代码和变量分别设计成模块,再设计一个主模块调用,就可以避免以上的混乱。如图2所示。 将变量与代码放入模块将变量与代码放入模块

9、主控模块模块1模块2模块3从封装看计算机高级语言发展规律3 结构化程序设计结构化程序设计-功能的封装功能的封装 可以说,模块如同一个箱子, 实现了将一部分程序及变量的封装. 主控模块模块1模块2模块3从封装看计算机高级语言发展规律3 结构化程序设计结构化程序设计-功能的封装功能的封装 可以说,模块如同一个箱子,装入了一部分程序及变量. 也可以成为-封装.那么, 一个模块到底该装入什么样的程序代码和变量? 主控模块模块1模块2模块3从封装看计算机高级语言发展规律3 结构化程序设计结构化程序设计-功能的封装功能的封装 模块如同一个箱子, 实现了将程序中按功能逻辑相关的代码与变量的封装 主控模块模块

10、1模块2模块3从封装看计算机高级语言发展规律3 结构化程序设计结构化程序设计-功能的封装功能的封装 模块封装的原理是: 程序中逻辑上有关系元素(变量和代码)应当在物理上也放在一起,加以封装. 换句话说,逻辑上相关,物理上也应相逻辑上相关,物理上也应相关,这就是逻辑物理一致性原理。关,这就是逻辑物理一致性原理。从封装看计算机高级语言发展规律3 结构化程序设计结构化程序设计-功能的封装功能的封装 封装原理:逻辑上有关系元素,应当在物理上也放在一起,加以封装 生活中的封装原理应用.从封装看计算机高级语言发展规律3 结构化程序设计结构化程序设计-功能的封装功能的封装 封装原理: 程序中逻辑上有关系元素

11、,应当在物理上也放在一起,加以封装 再考察一下, 按照封装原理, 程序中还能实现什么封装呢? 从封装看计算机高级语言发展规律4、相关数据的封装、相关数据的封装 程序中的数据(变量与常量)之间是否也可能存在逻辑相关性呢? 从封装看计算机高级语言发展规律4、相关数据的封装、相关数据的封装 考察以下图中变量定义学 生信息教 师信息变量1变量2变量3变量4变量5从封装看计算机高级语言发展规律4、相关数据的封装、相关数据的封装 学生变量与教师变量交叉在一起,显得混乱。分析其中的逻辑关系, 我们会发现与学生有关的变量是逻辑相关的,同样与教师有关的变量也是逻辑相关的。而这些逻辑相关的变量并没有得到封装,因此

12、,跟据封装的原理,也应加以封装。 从封装看计算机高级语言发展规律4、相关数据的封装、相关数据的封装 为解决这个问题,可使用现代程序设计语言中普遍支持的高级数据类型-结构类型.例如,图4所示为用C语言结构定义封装了与学生相关的数据。从封装看计算机高级语言发展规律4、相关数据的封装、相关数据的封装教师结构变量: 教师变量1 教师变量2 学生结构变量: 学生变量1 学生变量2 从封装看计算机高级语言发展规律4、相关数据的封装、相关数据的封装 另外,程序中的常量之间也同样可能存在逻辑相关性,例如,多个有关色彩的编码常量,是逻辑相关的,应当在物理上放在一起加以封装。而枚举类型就可实现将这种逻辑相关常量的

13、封装。 enum Colorred,black,yellow,blue,white; enum Color c;从封装看计算机高级语言发展规律5 进一步提高封装度进一步提高封装度 以C,pascal等语言为代表的结构化程序设计语言还有没有可能继续提高封装度? 或者说程序中是否还有逻辑物理不一致的问题? 要回答这个问题,让我们分析一下客观世界。 客观世界由许许多多事物组成. 每个事物都具有数据和功能。 从封装看计算机高级语言发展规律5 进一步提高封装度进一步提高封装度 如: 一个具体的学生是一个事物 具有数据: 姓名,学号,成绩等 具有功能: 设置姓名,学号,成绩,显示姓名,学号,成绩等 由此可

14、知,客观世界中一个学生的数据及功能是密切相关的。 而在采用结构化程序设计语言设计的程序中,有关学生的数据和功能在程序中可能被分散在不同地方。 从封装看计算机高级语言发展规律5 进一步提高封装度进一步提高封装度 从封装看计算机高级语言发展规律5 进一步提高封装度进一步提高封装度 如图所示,客观对象的一体性在程序中没有得到反映,存在逻辑物理不一致问题。为了解决这一问题导致了面向对象程序设计(OOP)语言的产生。 从封装看计算机高级语言发展规律6 面向对象程序设计中类的封装面向对象程序设计中类的封装 为了使程序中与客观对象取得一致,在面向对象程序设计语言中可以定义类, 在类中将与对象相关的变量(在O

15、OP中称为属性)和功能模块(在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;th

16、=name; this.sex=sex; this.score=score; public void getnum() system.out.println(this.num); . 6 面向对象程序设计中类的封装面向对象程序设计中类的封装从封装看计算机高级语言发展规律 6 面向对象程序设计中类的封装面向对象程序设计中类的封装 类可以实现将对象的数据与方法的封装,但不同类之间是否存在可封装的内容呢?从封装看计算机高级语言发展规律7 继承也是封装的一种形式继承也是封装的一种形式考察下面的两个类:从封装看计算机高级语言发展规律7 继承也是封装的一种形式继承也是封装的一种形式 我们会发

17、现,这两个类中存在共同的部分,这些共同部分实际上是一般“人”的属性和方法,因些,这些部分是逻辑相关的,有必要进行进一步的封装-封装为基类:人员类,而学生和教师类可以从这个基类继承产生。从封装看计算机高级语言发展规律7 继承也是封装的一种形式继承也是封装的一种形式从封装看计算机高级语言发展规律7 继承也是封装的一种形式继承也是封装的一种形式 将多个类中逻辑上相关的一组方法与属性封装到一起,构成这多个类的共同基类,而原多个类变为从该基类的派生的形式,这就是面向对象的继承性 继承本质上仍是一种高级封装。继承本质上仍是一种高级封装。 当然实际工作中我们可能先设计基类,再设计其派生类。但这也是我们先在头

18、脑中完成了由个别到一般的归纳,在设计中应用了由一般到个别的演绎。从封装看计算机高级语言发展规律8、OOP中其它封装形式中其它封装形式 按照封装原理, OOP中还可进行更高级的封装: (1)类模板 如果在程序中要使用一组类,这组类的功能与结构的相似性的,则这种相似性也是一种逻辑相关,应当进行封装。OOP的类模板可以实现这种封装 。 从封装看计算机高级语言发展规律 template class tarray int size; T *array; public: tarray(int sz=10) size=sz; array=new Tsz; tarray(tarray &a); tarray(

19、) deletearray; int getsize()return size; tarray &operator=(tarray &a); int & operator(T n); ;从封装看计算机高级语言发展规律8、OOP中其它封装形式中其它封装形式 (2)函数模板 如果在程序中存在一组方法在功能与结构是相似性的,这也构成逻辑相关,应当加以封装。OOP的函数模板可以实现这种封装。 从封装看计算机高级语言发展规律 template T Power( T base, int exponent ) T i, product = 1; for ( i=1; i=exponent; i+ ) pro

20、duct *= base; return( product ); 从封装看计算机高级语言发展规律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; 从封装看

21、计算机高级语言发展规律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,in

22、t w):shape( h, w) void showarea()coutrectangle area=hight*widthendl; ; class triangle : public shape public: triangle(int h,int w):shape( h, w) void showarea()couttriangle area=hight*width/2endl; ;从封装看计算机高级语言发展规律9 JAVA,C#新一代语言的封装新一代语言的封装 新一代语言在以下几方面进行了封装,将封装提高到了一个新的高度: (1)程序中消除非封装因素:不再支持全局变量和全局方法,这就

23、是完全的OOP。 从封装看计算机高级语言发展规律9 JAVA,C#新一代语言的封装新一代语言的封装 (2) 将封装的着眼点从程序转向运行库?从封装看计算机高级语言发展规律9 JAVA,C#新一代语言的封装新一代语言的封装 (2) 将封装的着眼点从程序转向运行库:将运行库中逻辑相关的部分封装为类,这就是类库( packages)。从封装看计算机高级语言发展规律 9 JAVA,C#新一代语言的封装新一代语言的封装从封装看计算机高级语言发展规律9 JAVA,C#新一代语言的封装新一代语言的封装 (3)将封装的着眼点从单个应用内部到应用之间?从封装看计算机高级语言发展规律9 JAVA,C#新一代语言的封装新一代语言的封装 (3)将封装的着眼点从单个应用内部到应用之间:将不同应用之间与运行平台逻辑相关部分进行封装,这就是通用语言运行时或虚拟机等,这些内容被从应用中分离出来,这就产生了最令人振奋的跨平台的语言特性。从封装看计算机高级语言发展规律 9 JAVA,C#新一代语言的封装新一代语言的封装从封装看计算机高级语言发展规律9 JAVA,C#新一代语

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论