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

下载本文档

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

文档简介

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

计算机科学与技术学院邱勇内容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.0348994961计算机高高级语言的发发展历程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功能2功能3变量1变量2变量3变量4代码1代码2代码3代码4代码5代码6程序功功能图1非非结结构化化程序序的结结构我们会会发现现,多多个功功能在在一个个程序序中可可互相相使用变变量,,互相相执行行代码码,使使程序序的结结构显显得混乱乱。当当功能能数不不多时时不会会有太太大的的影响响。而当当功功能能数数多多于于十十个个乃乃至至几几十十个个时时,,这样样的的程程序序结结构构将将复复杂杂至至无无法法控控制制的的地地步步,,主要要表表现现为为程程序序编编码码难难、、调调试试难难和和维维护护难难。。3结结构构化化程程序序设设计计--功功能能的的封封装装结构构化化程程序序设设计计语语言言::为了了解解决决以以上上的的程程序序结结构构混混乱乱问问题题,,以以适适应应开开发发大大程程序序的的要要求求,,产产生生了了结结构构化化程程序序设设计计语语言言,,如如PASCAL,,C等等。。结构化程程序设计计语言支支持模块块化的设设计方法法,可可以将一一个复杂杂的程序序分解为为一个个个功能相相对简单单的模块块,再通通过对这这些模块块的调用用完成原原来程序序的功能能。3结构构化程序序设计--功能能的封装装设计模块块的原则则是(1)高高内聚:在每个个模块中中,只只含有单单一的功功能和与与该功能能相关的的变量;;(2)低低耦合::模块之之间尽量量减少联联系。模模块内内的变量量被称为为局部变变量,只只在模块块内部可可见;一一个模模块也不不允许转转移到另另一个模模块内部部去。3结结构化程程序设计计--功功能的封封装对于上例例,只要要将这3个功能能有关的的代码和和变量分分别设计计成模块块,再设设计一个个主模块块调用,,就可以以避免以以上的混混乱。如如图2所所示。主控模块模块1模块2模块3将变量与与代码放放入模块块3结结构化程程序设计计--功功能的封封装可以说,,模块如如同一个个箱子,实现现了将一一部分程程序及变变量的封封装.主控模块模块1模块2模块33结结构化程程序设计计--功功能的封封装可以说,,模块如如同一个个箱子,装入了了一部分分程序及及变量.也也可以以成为---封封装.那么,一一个模模块到到底该该装入入什么么样的的程序序代码码和变变量?主控模块模块1模块2模块33结结构构化程程序设设计--功功能的的封装装模块如如同一一个箱箱子,实实现了了将程程序中中按功功能逻逻辑相相关的的代码码与变变量的的封装装主控模块模块1模块2模块33结结构化化程序序设计计--功能能的封封装模块封封装的的原理理是::程序中中逻辑上上有关系系元素素(变变量和和代码码)应应当在在物理上上也放在在一起起,加加以封封装.换句话话说,,逻辑上上相关关,物物理上上也应应相关关,这这就是是逻辑辑物理理一致致性原原理。。3结结构化化程序序设计计--功能能的封封装封装原原理:逻辑上有关系元素素,应当在在物理上也放在一起起,加以封封装生活中的封封装原理应应用.3结构化化程序设计计--功能能的封装封装原理:程序中逻辑上有关系元素素,应当在在物理上也放在一起起,加以封封装再考察一下下,按按照封装原原理,程程序中还还能实现什什么封装呢呢?4、相关数数据的封装装程序中的数数据(变量量与常量))之间是否否也可能存存在逻辑相相关性呢??4、相关数数据的封装装考察以下图图中变量定定义学生信息教师信息变量1变量2变量3变量4变量54、相关数数据的封装装学生变量与与教师变量量交叉在一一起,显得得混乱。分分析其中的的逻辑关系系,我们们会发现与与学生有关关的变量是是逻辑相关关的,同样样与教师有有关的变量量也是逻辑辑相关的。。而这些逻逻辑相关的的变量并没没有得到封封装,因此此,跟据封封装的原理理,也应加加以封装。。4、相关数数据的封装装为解决这个个问题,可可使用现代代程序设计计语言中普普遍支持的的高级数据据类型---结构类类型.例如如,图4所所示为用C语言结构构定义封装装了与学生生相关的数数据。4、相关数数据的封装装教师结构变量:教师变量1教师变量2……学生结构变量:学生变量1学生变量2……4、相关数数据的封装装另外,程序序中的常量量之间也同同样可能存存在逻辑相相关性,例例如,多个个有关色彩彩的编码常常量,是逻逻辑相关的的,应当在在物理上放放在一起加加以封装。。而枚举类类型就可实实现将这种种逻辑相关关常量的封封装。enumColor{red,black,yellow,blue,white};enumColorc;5进进一一步步提提高高封封装装度度以C,,pascal等等语语言言为为代代表表的的结结构构化化程程序序设设计计语语言言还还有有没没有有可可能能继继续续提提高高封封装装度度??或或者者说说程程序序中中是是否否还还有有逻逻辑辑物物理理不不一一致致的的问问题题?要要回回答答这这个个问问题题,,让让我我们们分分析析一一下下客客观观世世界界。。客观世世界由由许许许多多多事物物组成成.每每个个事物物都具具有数数据和和功能能。5进进一步步提高高封装装度如:一一个个具体体的学学生是是一个个事物物具有数数据:姓姓名名,学学号,,成绩绩等具有功功能:设设置置姓名名,学学号,,成绩绩,显显示姓姓名,,学号号,成成绩等等由此可知,,客观世界界中一个学学生的数据据及功能是是密切相关关的。而在采用结结构化程序序设计语言言设计的程程序中,有有关学生的的数据和功功能在程序序中可能被被分散在不不同地方。。5进一步步提高封装装度5进一步步提高封装装度如图所示,,客观对象象的一体性性在程序中中没有得到到反映,存存在逻辑物物理不一致致问题。为为了解决这这一问题导导致了面向向对象程序序设计(OOP)语语言的产生生。6面向对对象程序设设计中类的的封装为了使程序序中与客观观对象取得得一致,在在面向对象象程序设计计语言中可可以定义类类,在类类中将与对对象相关的的变量(在在OOP中中称为属性性)和功能能模块((在OOP中称为方方法)进行行封装。6面向对对象程序设设计中类的的封装在OOP中对对学生对象和和教师对象分分别进行封装装,形成学生生类,教师类类:publicclassStudent{privateintnum,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的类模模板可以实现现这种封装。。template<classT>classtarray{intsize;T*array;public:tarray(intsz=10){size=sz;array=newT[sz];}tarray(tarray<T>&a);~tarray(){delete[]array;}intgetsize(){returnsize;}tarray<T>&operator=(tarray<T>&a);int&operator[](Tn);};8、OOP中中其它封装形形式(2)函数模模板如果在程序中中存在一组方方法在功能与与结构是相似似性的,这也也构成逻辑相相关,应当加加以封装。OOP的函数数模板可以实实现这种封装装。template<classT>TPower(Tbase,intexponent){Ti,product=1;for(i=1;i<=exponent;i++)product*=base;return(product);}8、oop中中其它封装形形式(3)函数重重载將逻辑上相关关的一组方法法采用一个函函数名,这种种物理上的一一致性也构成成一种封装,,这就是函数数重载。函数数重载是OOP多态性的的一种方式。。voiddisplay(inta){cout<<"Theintis:"<<a<<"\n";}voiddisplay(floata){cout<<"Thefloatis:"<<a<<"\n";}voiddisplay(chartext[]){cout<<"Thetextis:"<<text<<"\n";}8、oop中中其它封装形形式(4)方法法覆盖在父类中定义义虚方法接口口,在派生类类中覆盖父类类的虚方法,,可以实现OOP中的高高级多态性::动态联编多多态性。这其其中父子类中中相同的方法法接口也是对对逻辑相关方方法的物理封封装。classshape{protected:inthight,width;public:shape(inth,intw){hight=h;width=w;}virtualvoidshowarea(){}};classrectangle:publicshape{public:rectangle(inth,intw):shape(h,w){}voidshowarea(){cout<<"rectanglearea="<<hight*width<<endl;}};classtriangle:publicshape{public:triangle(inth,intw):shape(h,w){}voidshowarea(){cout<<"trianglearea="<<hight*width/2<<endl;}};9JAVA,C#新一代语语言的封装装新一代语言言在以下几几方面进行行了封装,,将封装提提高到了一一个新的高高度:(1)程序序中消除非非封装因素素:不再支支持全局变变量和全局局方法,这这就是完全全的OOP。9JAVA,C#新一代语语言的封装装(2)将将封装的着着眼点从程程序转向运运行库?9JAVA,C#新一代语语言的封装装(2)将将封装的着着眼点从程程序转向运运行库:将将运行库中中逻辑相关关的部分封封装为类,,这就是类类库(packages)。9JAVA,C#新一代语语言的封装装9JAVA,C#新一代语语言的封装装(3)将封封装的着眼眼点从单个个应用内部部到应用之之间?9JAVA,C#新一代语语言的封装装(3)将封封装的着眼眼点从单个个应用内部部到应用之之间:将不不同应用之之间与运行行平台逻辑辑相关部分分进行封装装,这就是是通用语言言运行时或或虚拟机等等,这些内内容被从应应用中分离离出来,这这就产生了了最令人振振奋的跨平平台的语言言特性。9JAVA,C#新一代语语言的封装装9JAVA,C#新一代语语言的封装装新一代语言言在以下几几方面进行行了封装,,将封装提提高到了一一个新的高高度:(1)完完全的OOP(2)类类库(3)虚虚拟拟机机,源源代代码码+编编译译时时+运运行行时时的的跨跨平平台台完全全符符合合封封装装原原理理!10高高级语语言发发展总总结10高高级语语言发发展总总结11结结论论通过以以上分分析我我们可可以得得到这这样的的重要要结论论:(1))新的程程序设设计语语言可可以

温馨提示

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

评论

0/150

提交评论