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

下载本文档

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

文档简介

从封装看计算机高级语言的发展规律,计算机科学与技术学院邱勇,内容,1.高级语言的发展2.非结构化程序设计3.结构化程序设计对实现功能的封装4.相关数据的封装5.进一步提高封装度6.面向对象程序设计中类的封装7.继承也是封装8.oop中其它封装形式9.JAVA,C#新一代语言中的封装10.高级语言的发展总结11结论,1计算机高级语言的发展历程,非结构化程序设计语言结构化程序设计语言面向对象程序设计语言,1计算机高级语言的发展历程,非结构化程序设计语言早期出现的高级语言在程序设计时不划分模块,称为非结构化程序设计语言。如ALGOL,BASIC等。,1计算机高级语言的发展历程,结构化程序设计语言以C语言,PASCAL为代表的语言支持结构化程序设计方法,可以将程序划分为模块,按自上而下,逐步求精的方法设计软件,称为结构化程序设计语言。,1计算机高级语言的发展历程,面向对象程序设计语言是最新一代的程序设计的方法,它的将数据与处理数据的过程作为一个整体对象具有三大特点:(1)封装性和数据隐藏性(2)继承和重用(3)多态性,1计算机高级语言的发展历程,(1)封装性和数据隐藏性:通过建立用户定义类支持封装性和数据隐藏。完好定义的类建立后,便可看成是完全封装的实体,作为一个整体单元来使用。同时,类的实际内部工作及相关数据应当隐藏起来,即无须知道其工作原理,只需知道如何使用类便可。,1计算机高级语言的发展历程,(2)继承和重用:程序可以在扩展现有类型的基础上声明新类型(派生类)。新类型继承原类型属性方法,并增加某些特性。(3)多态性:一个接口,多种方法:通过继承的方法构造类,采用多态性为每个类指定表现行为。,1计算机高级语言的发展历程,从本质上来说,计算机高级语言的发展有什么规律?新一代的的语言究竟先进在什么地方?只有理解了这些问题,才能从本质上掌握新一代计算机语言的先进特性,设计出高质量的软件,对开发出新型的程序设计语言也有一定的启发意义。,2非结构化程序设计,计算机高级语言发展的初期如BASIC,ALGOL等。,1计算机高级语言的发展历程,BASIC程序例子:10LETX=220LETY=SIN(X)30PRINTYRUN0.034899496,1计算机高级语言的发展历程,BASIC语言特点(1)构成简单。BASIC语言的最基本语句只有17种。(2)是一种“人机会话”式的语言。(3)功能较全、适用面广。(4)执行方式灵活。BASIC语言提供两种执行方式,分别是程序执行方式和命令执行方式。,2非结构化程序设计语言,非结构化程序设计的缺点:整个程序不分模块,所有的变量和代码都是全局的.程序结构=变量1,变量2,.,变量m,代码1,代码2,.,代码n,变量1变量2变量3变量4代码1代码2代码3代码4,程序1程序2,变量1代码1变量2代码2变量3代码3,2非结构化程序设计语言,随着计算机应用的发展,当程序稍大一些时,非结构化程序设计语言固有的缺点就会暴露出来:(1)变量是全局的,所有变量都可以被任何代码所使用;(2)代码是全局的,可以随意转向到任何位置去执行,容易造成混乱。,2非结构化程序设计语言,例如,一个程序有三项功能,每个功能与相应的变量和执行相应的代码的关系可能如下图所示,程序功能,图1非结构化程序的结构,我们会发现,多个功能在一个程序中可互相使用变量,互相执行代码,使程序的结构显得混乱。当功能数不多时不会有太大的影响。而当功能数多于十个乃至几十个时,这样的程序结构将复杂至无法控制的地步,主要表现为程序编码难、调试难和维护难。,3结构化程序设计-功能的封装,结构化程序设计语言:为了解决以上的程序结构混乱问题,以适应开发大程序的要求,产生了结构化程序设计语言,如PASCAL,C等。结构化程序设计语言支持模块化的设计方法,可以将一个复杂的程序分解为一个个功能相对简单的模块,再通过对这些模块的调用完成原来程序的功能。,3结构化程序设计-功能的封装,设计模块的原则是(1)高内聚:在每个模块中,只含有单一的功能和与该功能相关的变量;(2)低耦合:模块之间尽量减少联系。模块内的变量被称为局部变量,只在模块内部可见;一个模块也不允许转移到另一个模块内部去。,3结构化程序设计-功能的封装,对于上例,只要将这3个功能有关的代码和变量分别设计成模块,再设计一个主模块调用,就可以避免以上的混乱。如图2所示。,将变量与代码放入模块,3结构化程序设计-功能的封装,可以说,模块如同一个箱子,实现了将一部分程序及变量的封装.,3结构化程序设计-功能的封装,可以说,模块如同一个箱子,装入了一部分程序及变量.也可以成为-封装.那么,一个模块到底该装入什么样的程序代码和变量?,3结构化程序设计-功能的封装,模块如同一个箱子,实现了将程序中按功能逻辑相关的代码与变量的封装,3结构化程序设计-功能的封装,模块封装的原理是:程序中逻辑上有关系元素(变量和代码)应当在物理上也放在一起,加以封装.换句话说,逻辑上相关,物理上也应相关,这就是逻辑物理一致性原理。,3结构化程序设计-功能的封装,封装原理:逻辑上有关系元素,应当在物理上也放在一起,加以封装生活中的封装原理应用.,3结构化程序设计-功能的封装,封装原理:程序中逻辑上有关系元素,应当在物理上也放在一起,加以封装再考察一下,按照封装原理,程序中还能实现什么封装呢?,4、相关数据的封装,程序中的数据(变量与常量)之间是否也可能存在逻辑相关性呢?,4、相关数据的封装,考察以下图中变量定义,4、相关数据的封装,学生变量与教师变量交叉在一起,显得混乱。分析其中的逻辑关系,我们会发现与学生有关的变量是逻辑相关的,同样与教师有关的变量也是逻辑相关的。而这些逻辑相关的变量并没有得到封装,因此,跟据封装的原理,也应加以封装。,4、相关数据的封装,为解决这个问题,可使用现代程序设计语言中普遍支持的高级数据类型-结构类型.例如,图4所示为用C语言结构定义封装了与学生相关的数据。,4、相关数据的封装,4、相关数据的封装,另外,程序中的常量之间也同样可能存在逻辑相关性,例如,多个有关色彩的编码常量,是逻辑相关的,应当在物理上放在一起加以封装。而枚举类型就可实现将这种逻辑相关常量的封装。enumColorred,black,yellow,blue,white;enumColorc;,5进一步提高封装度,以C,pascal等语言为代表的结构化程序设计语言还有没有可能继续提高封装度?或者说程序中是否还有逻辑物理不一致的问题?要回答这个问题,让我们分析一下客观世界。客观世界由许许多多事物组成.每个事物都具有数据和功能。,5进一步提高封装度,如:一个具体的学生是一个事物具有数据:姓名,学号,成绩等具有功能:设置姓名,学号,成绩,显示姓名,学号,成绩等由此可知,客观世界中一个学生的数据及功能是密切相关的。而在采用结构化程序设计语言设计的程序中,有关学生的数据和功能在程序中可能被分散在不同地方。,5进一步提高封装度,5进一步提高封装度,如图所示,客观对象的一体性在程序中没有得到反映,存在逻辑物理不一致问题。为了解决这一问题导致了面向对象程序设计(OOP)语言的产生。,6面向对象程序设计中类的封装,为了使程序中与客观对象取得一致,在面向对象程序设计语言中可以定义类,在类中将与对象相关的变量(在OOP中称为属性)和功能模块(在OOP中称为方法)进行封装。,6面向对象程序设计中类的封装,在OOP中对学生对象和教师对象分别进行封装,形成学生类,教师类:,publicclassStudentprivateintnum,age;privateStringname,sex;privatefloatscore;Student(intnum,intage,Stringname,Stringsex,floatscore)this.num=num;this.age=age;=name;this.sex=sex;this.score=score;publicvoidgetnum()system.out.println(this.num);.,6面向对象程序设计中类的封装,6面向对象程序设计中类的封装,类可以实现将对象的数据与方法的封装,但不同类之间是否存在可封装的内容呢?,7继承也是封装的一种形式,考察下面的两个类:,7继承也是封装的一种形式,我们会发现,这两个类中存在共同的部分,这些共同部分实际上是一般“人”的属性和方法,因些,这些部分是逻辑相关的,有必要进行进一步的封装-封装为基类:人员类,而学生和教师类可以从这个基类继承产生。,7继承也是封装的一种形式,7继承也是封装的一种形式,将多个类中逻辑上相关的一组方法与属性封装到一起,构成这多个类的共同基类,而原多个类变为从该基类的派生的形式,这就是面向对象的继承性继承本质上仍是一种高级封装。当然实际工作中我们可能先设计基类,再设计其派生类。但这也是我们先在头脑中完成了由个别到一般的归纳,在设计中应用了由一般到个别的演绎。,8、OOP中其它封装形式,按照封装原理,OOP中还可进行更高级的封装:(1)类模板如果在程序中要使用一组类,这组类的功能与结构的相似性的,则这种相似性也是一种逻辑相关,应当进行封装。OOP的类模板可以实现这种封装。,templateclasstarrayintsize;T*array;public:tarray(intsz=10)size=sz;array=newTsz;tarray(tarray,8、OOP中其它封装形式,(2)函数模板如果在程序中存在一组方法在功能与结构是相似性的,这也构成逻辑相关,应当加以封装。OOP的函数模板可以实现这种封装。,templateTPower(Tbase,intexponent)Ti,product=1;for(i=1;i=exponent;i+)product*=base;return(product);,8、oop中其它封装形式,(3)函数重载將逻辑上相关的一组方法采用一个函数名,这种物理上的一致性也构成一种封装,这就是函数重载。函数重载是OOP多态性的一种方式。,voiddisplay(inta)coutTheintis:an;voiddisplay(floata)coutThefloatis:an;voiddisplay(chartext)coutThetextis:textn;,8、oop中其它封装形式,(4)方法覆盖在父类中定义虚方法接口,在派生类中覆盖父类的虚方法,可以实现OOP中的高级多态性:动态联编多态性。这其中父子类中相同的方法接口也是对逻辑相关方法的物理封装。,classshapeprotected:inthight,width;public:shape(inth,intw)hight=h;width=w;virtualvoidshowarea();classrectangle:publicsh

温馨提示

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

评论

0/150

提交评论