版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
从封装看计算机高级语言的发展规律
计算机科学与技术学院邱勇从封装看计算机高级语言的发展规律1内容1.
高级语言的发展2.非结构化程序设计3.结构化程序设计对实现功能的封装4.相关数据的封装5.进一步提高封装度6.面向对象程序设计中类的封装7.继承也是封装8.oop中其它封装形式9.JAVA,C#新一代语言中的封装10.高级语言的发展总结11结论内容1.高级语言的发展21计算机高级语言的发展历程非结构化程序设计语言结构化程序设计语言面向对象程序设计语言1计算机高级语言的发展历程31计算机高级语言的发展历程非结构化程序设计语言早期出现的高级语言在程序设计时不划分模块,称为非结构化程序设计语言。如ALGOL,BASIC等。
1计算机高级语言的发展历程非结构化程序设计语言41计算机高级语言的发展历程结构化程序设计语言
以C语言,PASCAL为代表的语言支持结构化程序设计方法,可以将程序划分为模块,按自上而下,逐步求精的方法设计软件,称为结构化程序设计语言。1计算机高级语言的发展历程结构化程序设计语言51计算机高级语言的发展历程面向对象程序设计语言是最新一代的程序设计的方法,它的将数据与处理数据的过程作为一个整体——对象具有三大特点:(1)封装性和数据隐藏性(2)继承和重用(3)多态性1计算机高级语言的发展历程面向对象程序设计语言61计算机高级语言的发展历程(1)封装性和数据隐藏性:通过建立用户定义类支持封装性和数据隐藏。完好定义的类建立后,便可看成是完全封装的实体,作为一个整体单元来使用。同时,类的实际内部工作及相关数据应当隐藏起来,即无须知道其工作原理,只需知道如何使用类便可。1计算机高级语言的发展历程(1)封装性和数据隐藏性:71计算机高级语言的发展历程(2)继承和重用:程序可以在扩展现有类型的基础上声明新类型(派生类)。新类型继承原类型属性方法,并增加某些特性。(3)多态性:一个接口,多种方法:通过继承的方法构造类,采用多态性为每个类指定表现行为。1计算机高级语言的发展历程(2)继承和重用:81计算机高级语言的发展历程从本质上来说,计算机高级语言的发展有什么规律?新一代的的语言究竟先进在什么地方?只有理解了这些问题,才能从本质上掌握新一代计算机语言的先进特性,设计出高质量的软件,对开发出新型的程序设计语言也有一定的启发意义。1计算机高级语言的发展历程从本质上来说,计算机高级语言的发92非结构化程序设计计算机高级语言发展的初期如BASIC,ALGOL等。2非结构化程序设计计算机高级语言发展的初期101计算机高级语言的发展历程BASIC程序例子:10LETX=220LETY=SIN(X)30PRINTYRUN0.0348994961计算机高级语言的发展历程BASIC程序例子:111计算机高级语言的发展历程BASIC语言特点(1)构成简单。BASIC语言的最基本语句只有17种。(2)是一种“人机会话”式的语言。(3)功能较全、适用面广。(4)执行方式灵活。BASIC语言提供两种执行方式,分别是程序执行方式和命令执行方式。1计算机高级语言的发展历程BASIC语言特点122非结构化程序设计语言非结构化程序设计的缺点:整个程序不分模块,所有的变量和代码都是全局的.程序结构={变量1,变量2,...,变量m,代码1,代码2,...,代码n}2非结构化程序设计语言13变量1变量2变量3变量4代码1代码2代码3代码4……程序1程序2变量1代码1变量2代码2变量3代码3……变量1程序1142非结构化程序设计语言随着计算机应用的发展,当程序稍大一些时,非结构化程序设计语言固有的缺点就会暴露出来:(1)变量是全局的,所有变量都可以被任何代码所使用;(2)代码是全局的,可以随意转向到任何位置去执行,容易造成混乱。2非结构化程序设计语言152非结构化程序设计语言例如,一个程序有三项功能,每个功能与相应的变量和执行相应的代码的关系可能如下图所示2非结构化程序设计语言例如,一个程序有三项功能,每个功能与16功能1功能2功能3变量1变量2变量3变量4代码1代码2代码3代码4代码5代码6程序功能图1非结构化程序的结构我们会发现,多个功能在一个程序中可互相使用变量,互相执行代码,使程序的结构显得混乱。当功能数不多时不会有太大的影响。而当功能数多于十个乃至几十个时,这样的程序结构将复杂至无法控制的地步,主要表现为程序编码难、调试难和维护难。功能1变量1程序173结构化程序设计--功能的封装结构化程序设计语言:为了解决以上的程序结构混乱问题,以适应开发大程序的要求,产生了结构化程序设计语言,如PASCAL,C等。结构化程序设计语言支持模块化的设计方法,可以将一个复杂的程序分解为一个个功能相对简单的模块,再通过对这些模块的调用完成原来程序的功能。3结构化程序设计--功能的封装结构化程序设计语言:183结构化程序设计--功能的封装设计模块的原则是(1)高内聚:在每个模块中,只含有单一的功能和与该功能相关的变量;(2)低耦合:模块之间尽量减少联系。模块内的变量被称为局部变量,只在模块内部可见;一个模块也不允许转移到另一个模块内部去。3结构化程序设计--功能的封装设计模块的原则是193结构化程序设计--功能的封装对于上例,只要将这3个功能有关的代码和变量分别设计成模块,再设计一个主模块调用,就可以避免以上的混乱。如图2所示。主控模块模块1模块2模块3将变量与代码放入模块3结构化程序设计--功能的封装对于上例,只要将这3个功能203结构化程序设计--功能的封装
可以说,模块如同一个箱子,实现了将一部分程序及变量的封装.
主控模块模块1模块2模块33结构化程序设计--功能的封装主控模块模块1模块2模块213结构化程序设计--功能的封装
可以说,模块如同一个箱子,装入了一部分程序及变量.也可以成为---封装.那么,一个模块到底该装入什么样的程序代码和变量?
主控模块模块1模块2模块33结构化程序设计--功能的封装主控模块模块1模块2模块223结构化程序设计--功能的封装
模块如同一个箱子,实现了将程序中按功能逻辑相关的代码与变量的封装
主控模块模块1模块2模块33结构化程序设计--功能的封装主控模块模块1模块2模块233结构化程序设计--功能的封装模块封装的原理是:程序中逻辑上有关系元素(变量和代码)应当在物理上也放在一起,加以封装.
换句话说,逻辑上相关,物理上也应相关,这就是逻辑物理一致性原理。3结构化程序设计--功能的封装243结构化程序设计--功能的封装封装原理:逻辑上有关系元素,应当在物理上也放在一起,加以封装生活中的封装原理应用.3结构化程序设计--功能的封装封装原理:253结构化程序设计--功能的封装封装原理:程序中逻辑上有关系元素,应当在物理上也放在一起,加以封装再考察一下,按照封装原理,程序中还能实现什么封装呢?3结构化程序设计--功能的封装封装原理:264、相关数据的封装程序中的数据(变量与常量)之间是否也可能存在逻辑相关性呢?4、相关数据的封装274、相关数据的封装考察以下图中变量定义学生信息教师信息变量1变量2变量3变量4变量54、相关数据的封装考察以下图中变量定义学生信息变量1284、相关数据的封装学生变量与教师变量交叉在一起,显得混乱。分析其中的逻辑关系,我们会发现与学生有关的变量是逻辑相关的,同样与教师有关的变量也是逻辑相关的。而这些逻辑相关的变量并没有得到封装,因此,跟据封装的原理,也应加以封装。4、相关数据的封装学生变量与教师变量交叉在一起,显得混乱。分294、相关数据的封装为解决这个问题,可使用现代程序设计语言中普遍支持的高级数据类型---结构类型.例如,图4所示为用C语言结构定义封装了与学生相关的数据。4、相关数据的封装为解决这个问题,可使用现代程序设计语言中普304、相关数据的封装教师结构变量:教师变量1教师变量2……学生结构变量:学生变量1学生变量2……4、相关数据的封装教师结构变量:学生结构变量:314、相关数据的封装另外,程序中的常量之间也同样可能存在逻辑相关性,例如,多个有关色彩的编码常量,是逻辑相关的,应当在物理上放在一起加以封装。而枚举类型就可实现将这种逻辑相关常量的封装。enumColor{red,black,yellow,blue,white};enumColorc;4、相关数据的封装325进一步提高封装度以C,pascal等语言为代表的结构化程序设计语言还有没有可能继续提高封装度?或者说程序中是否还有逻辑物理不一致的问题?要回答这个问题,让我们分析一下客观世界。客观世界由许许多多事物组成.每个事物都具有数据和功能。5进一步提高封装度以C,pascal等语言为代表的结构化程335进一步提高封装度如:一个具体的学生是一个事物具有数据:姓名,学号,成绩等具有功能:设置姓名,学号,成绩,显示姓名,学号,成绩等由此可知,客观世界中一个学生的数据及功能是密切相关的。而在采用结构化程序设计语言设计的程序中,有关学生的数据和功能在程序中可能被分散在不同地方。5进一步提高封装度如:一个具体的学生是一个事物345进一步提高封装度
5进一步提高封装度355进一步提高封装度如图所示,客观对象的一体性在程序中没有得到反映,存在逻辑物理不一致问题。为了解决这一问题导致了面向对象程序设计(OOP)语言的产生。5进一步提高封装度366面向对象程序设计中类的封装为了使程序中与客观对象取得一致,在面向对象程序设计语言中可以定义类,在类中将与对象相关的变量(在OOP中称为属性)和功能模块((在OOP中称为方法)进行封装。
6面向对象程序设计中类的封装376面向对象程序设计中类的封装
在OOP中对学生对象和教师对象分别进行封装,形成学生类,教师类:6面向对象程序设计中类的封装38
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面向对象程序设计中类的封装publicclassStudent{6面向对象程39
6面向对象程序设计中类的封装类可以实现将对象的数据与方法的封装,但不同类之间是否存在可封装的内容呢?6面向对象程序设计中类的封装407继承也是封装的一种形式考察下面的两个类:7继承也是封装的一种形式考察下面的两个类:417继承也是封装的一种形式我们会发现,这两个类中存在共同的部分,这些共同部分实际上是一般“人”的属性和方法,因些,这些部分是逻辑相关的,有必要进行进一步的封装---封装为基类:人员类,而学生和教师类可以从这个基类继承产生。7继承也是封装的一种形式我们会发现,这两个类中存在共同的部427继承也是封装的一种形式7继承也是封装的一种形式437继承也是封装的一种形式将多个类中逻辑上相关的一组方法与属性封装到一起,构成这多个类的共同基类,而原多个类变为从该基类的派生的形式,这就是面向对象的继承性继承本质上仍是一种高级封装。当然实际工作中我们可能先设计基类,再设计其派生类。但这也是我们先在头脑中完成了由个别到一般的归纳,在设计中应用了由一般到个别的演绎。7继承也是封装的一种形式将多个类中逻辑上相关的一组方法与属448、OOP中其它封装形式按照封装原理,OOP中还可进行更高级的封装:(1)类模板如果在程序中要使用一组类,这组类的功能与结构的相似性的,则这种相似性也是一种逻辑相关,应当进行封装。OOP的类模板可以实现这种封装。
8、OOP中其它封装形式按照封装原理,OOP中还可进行更45
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);};template<classT>classtar468、OOP中其它封装形式
(2)函数模板如果在程序中存在一组方法在功能与结构是相似性的,这也构成逻辑相关,应当加以封装。OOP的函数模板可以实现这种封装。8、OOP中其它封装形式47template<classT>TPower(Tbase,intexponent){Ti,product=1;for(i=1;i<=exponent;i++)product*=base;return(product);}template<classT>488、oop中其它封装形式
(3)函数重载將逻辑上相关的一组方法采用一个函数名,这种物理上的一致性也构成一种封装,这就是函数重载。函数重载是OOP多态性的一种方式。
8、oop中其它封装形式49voiddisplay(inta){cout<<"Theintis:"<<a<<"\n";}voiddisplay(floata){cout<<"Thefloatis:"<<a<<"\n";}voiddisplay(chartext[]){cout<<"Thetextis:"<<text<<"\n";}voiddisplay(inta)508、oop中其它封装形式
(4)方法覆盖在父类中定义虚方法接口,在派生类中覆盖父类的虚方法,可以实现OOP中的高级多态性:动态联编多态性。这其中父子类中相同的方法接口也是对逻辑相关方法的物理封装。8、oop中其它封装形式51classshape{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;}};classshape529JAVA,C#新一代语言的封装新一代语言在以下几方面进行了封装,将封装提高到了一个新的高度:(1)程序中消除非封装因素:不再支持全局变量和全局方法,这就是完全的OOP。
9JAVA,C#新一代语言的封装新一代语言在以下几方面进行539JAVA,C#新一代语言的封装(2)将封装的着眼点从程序转向运行库?9JAVA,C#新一代语言的封装549JAVA,C#新一代语言的封装(2)将封装的着眼点从程序转向运行库:将运行库中逻辑相关的部分封装为类,这就是类库(packages)。9JAVA,C#新一代语言的封装55
9JAVA,C#新一代语言的封装9JAVA,C#新一代语言的封装569JAVA,C#新一代语言的封装(3)将封装的着眼点从单个应用内部到应用之间?9JAVA,C#新一代语言的封装579JAVA,C#新一代语言的封装(3)将封装的着眼点从单个应用内部到应用之间:将不同应用之间与运行平台逻辑相关部分进行封装,这就是通用语言运行时或虚拟机等,这些内容被从应用中分离出来,这就产生了最令人振奋的跨平台的语言特性。9JAVA,C#新一代语言的封装58
9JAVA,C#新一代语言的封装9JAVA,C#新一代语言的封装599JAVA,C#新一代语言的封装新一代语言在以下几方面进行了封装,将封装提高到了一个新的高度:(1)完全的OOP(2)类库(3)虚拟机,源代码+编译时+运行时的跨平台完全符合封装原理!9JAVA,C#新一代语言的封装新一代语言在以下几方面进行6010高级语言发展总结
10高级语言发展总结6110高级语言发展总结
10高级语言发展总结6211结论通过以上分析我们可以得到这样的重要结论:(1)新的程序设计语言可以实现更高级的封装,计算机语言发展的过程就是不断实现更高级封装的过程。11结论通过以上分析我们可以得到这样的重要结论:6311结论通过以上分析我们可以得到这样的重要结论:(1)新的程序设计语言可以实现更高级的封装,计算机语言发展的过程就是不断实现更高级封装的过程。(2)封装的基本原理是逻辑物理一致性.即:程序中逻辑上相关的元素应当在物理上也放在一起,加以封装。这一结论对开发新型程序设计语言以及设计高质量软件有一定的指导意义11结论通过以上分析我们可以得到这样的重要结论:64思考:面向方面编程中的封装AOP为AspectOrientedProgramming的缩写,意为:面向方面编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP是OOP的延续,AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。思考:面向方面编程中的封装AOP为AspectOrient65思考:面向方法编程中的封锁思考:面向方法编程中的封锁66大作业题目:计算机程序设计语言发展规律研究>3000字别人的观点要有自己的观点结合AOP分析对下一代PL展望和探讨(4周后上交)大作业67演讲完毕,谢谢观看!演讲完毕,谢谢观看!68从封装看计算机高级语言的发展规律
计算机科学与技术学院邱勇从封装看计算机高级语言的发展规律69内容1.
高级语言的发展2.非结构化程序设计3.结构化程序设计对实现功能的封装4.相关数据的封装5.进一步提高封装度6.面向对象程序设计中类的封装7.继承也是封装8.oop中其它封装形式9.JAVA,C#新一代语言中的封装10.高级语言的发展总结11结论内容1.高级语言的发展701计算机高级语言的发展历程非结构化程序设计语言结构化程序设计语言面向对象程序设计语言1计算机高级语言的发展历程711计算机高级语言的发展历程非结构化程序设计语言早期出现的高级语言在程序设计时不划分模块,称为非结构化程序设计语言。如ALGOL,BASIC等。
1计算机高级语言的发展历程非结构化程序设计语言721计算机高级语言的发展历程结构化程序设计语言
以C语言,PASCAL为代表的语言支持结构化程序设计方法,可以将程序划分为模块,按自上而下,逐步求精的方法设计软件,称为结构化程序设计语言。1计算机高级语言的发展历程结构化程序设计语言731计算机高级语言的发展历程面向对象程序设计语言是最新一代的程序设计的方法,它的将数据与处理数据的过程作为一个整体——对象具有三大特点:(1)封装性和数据隐藏性(2)继承和重用(3)多态性1计算机高级语言的发展历程面向对象程序设计语言741计算机高级语言的发展历程(1)封装性和数据隐藏性:通过建立用户定义类支持封装性和数据隐藏。完好定义的类建立后,便可看成是完全封装的实体,作为一个整体单元来使用。同时,类的实际内部工作及相关数据应当隐藏起来,即无须知道其工作原理,只需知道如何使用类便可。1计算机高级语言的发展历程(1)封装性和数据隐藏性:751计算机高级语言的发展历程(2)继承和重用:程序可以在扩展现有类型的基础上声明新类型(派生类)。新类型继承原类型属性方法,并增加某些特性。(3)多态性:一个接口,多种方法:通过继承的方法构造类,采用多态性为每个类指定表现行为。1计算机高级语言的发展历程(2)继承和重用:761计算机高级语言的发展历程从本质上来说,计算机高级语言的发展有什么规律?新一代的的语言究竟先进在什么地方?只有理解了这些问题,才能从本质上掌握新一代计算机语言的先进特性,设计出高质量的软件,对开发出新型的程序设计语言也有一定的启发意义。1计算机高级语言的发展历程从本质上来说,计算机高级语言的发772非结构化程序设计计算机高级语言发展的初期如BASIC,ALGOL等。2非结构化程序设计计算机高级语言发展的初期781计算机高级语言的发展历程BASIC程序例子:10LETX=220LETY=SIN(X)30PRINTYRUN0.0348994961计算机高级语言的发展历程BASIC程序例子:791计算机高级语言的发展历程BASIC语言特点(1)构成简单。BASIC语言的最基本语句只有17种。(2)是一种“人机会话”式的语言。(3)功能较全、适用面广。(4)执行方式灵活。BASIC语言提供两种执行方式,分别是程序执行方式和命令执行方式。1计算机高级语言的发展历程BASIC语言特点802非结构化程序设计语言非结构化程序设计的缺点:整个程序不分模块,所有的变量和代码都是全局的.程序结构={变量1,变量2,...,变量m,代码1,代码2,...,代码n}2非结构化程序设计语言81变量1变量2变量3变量4代码1代码2代码3代码4……程序1程序2变量1代码1变量2代码2变量3代码3……变量1程序1822非结构化程序设计语言随着计算机应用的发展,当程序稍大一些时,非结构化程序设计语言固有的缺点就会暴露出来:(1)变量是全局的,所有变量都可以被任何代码所使用;(2)代码是全局的,可以随意转向到任何位置去执行,容易造成混乱。2非结构化程序设计语言832非结构化程序设计语言例如,一个程序有三项功能,每个功能与相应的变量和执行相应的代码的关系可能如下图所示2非结构化程序设计语言例如,一个程序有三项功能,每个功能与84功能1功能2功能3变量1变量2变量3变量4代码1代码2代码3代码4代码5代码6程序功能图1非结构化程序的结构我们会发现,多个功能在一个程序中可互相使用变量,互相执行代码,使程序的结构显得混乱。当功能数不多时不会有太大的影响。而当功能数多于十个乃至几十个时,这样的程序结构将复杂至无法控制的地步,主要表现为程序编码难、调试难和维护难。功能1变量1程序853结构化程序设计--功能的封装结构化程序设计语言:为了解决以上的程序结构混乱问题,以适应开发大程序的要求,产生了结构化程序设计语言,如PASCAL,C等。结构化程序设计语言支持模块化的设计方法,可以将一个复杂的程序分解为一个个功能相对简单的模块,再通过对这些模块的调用完成原来程序的功能。3结构化程序设计--功能的封装结构化程序设计语言:863结构化程序设计--功能的封装设计模块的原则是(1)高内聚:在每个模块中,只含有单一的功能和与该功能相关的变量;(2)低耦合:模块之间尽量减少联系。模块内的变量被称为局部变量,只在模块内部可见;一个模块也不允许转移到另一个模块内部去。3结构化程序设计--功能的封装设计模块的原则是873结构化程序设计--功能的封装对于上例,只要将这3个功能有关的代码和变量分别设计成模块,再设计一个主模块调用,就可以避免以上的混乱。如图2所示。主控模块模块1模块2模块3将变量与代码放入模块3结构化程序设计--功能的封装对于上例,只要将这3个功能883结构化程序设计--功能的封装
可以说,模块如同一个箱子,实现了将一部分程序及变量的封装.
主控模块模块1模块2模块33结构化程序设计--功能的封装主控模块模块1模块2模块893结构化程序设计--功能的封装
可以说,模块如同一个箱子,装入了一部分程序及变量.也可以成为---封装.那么,一个模块到底该装入什么样的程序代码和变量?
主控模块模块1模块2模块33结构化程序设计--功能的封装主控模块模块1模块2模块903结构化程序设计--功能的封装
模块如同一个箱子,实现了将程序中按功能逻辑相关的代码与变量的封装
主控模块模块1模块2模块33结构化程序设计--功能的封装主控模块模块1模块2模块913结构化程序设计--功能的封装模块封装的原理是:程序中逻辑上有关系元素(变量和代码)应当在物理上也放在一起,加以封装.
换句话说,逻辑上相关,物理上也应相关,这就是逻辑物理一致性原理。3结构化程序设计--功能的封装923结构化程序设计--功能的封装封装原理:逻辑上有关系元素,应当在物理上也放在一起,加以封装生活中的封装原理应用.3结构化程序设计--功能的封装封装原理:933结构化程序设计--功能的封装封装原理:程序中逻辑上有关系元素,应当在物理上也放在一起,加以封装再考察一下,按照封装原理,程序中还能实现什么封装呢?3结构化程序设计--功能的封装封装原理:944、相关数据的封装程序中的数据(变量与常量)之间是否也可能存在逻辑相关性呢?4、相关数据的封装954、相关数据的封装考察以下图中变量定义学生信息教师信息变量1变量2变量3变量4变量54、相关数据的封装考察以下图中变量定义学生信息变量1964、相关数据的封装学生变量与教师变量交叉在一起,显得混乱。分析其中的逻辑关系,我们会发现与学生有关的变量是逻辑相关的,同样与教师有关的变量也是逻辑相关的。而这些逻辑相关的变量并没有得到封装,因此,跟据封装的原理,也应加以封装。4、相关数据的封装学生变量与教师变量交叉在一起,显得混乱。分974、相关数据的封装为解决这个问题,可使用现代程序设计语言中普遍支持的高级数据类型---结构类型.例如,图4所示为用C语言结构定义封装了与学生相关的数据。4、相关数据的封装为解决这个问题,可使用现代程序设计语言中普984、相关数据的封装教师结构变量:教师变量1教师变量2……学生结构变量:学生变量1学生变量2……4、相关数据的封装教师结构变量:学生结构变量:994、相关数据的封装另外,程序中的常量之间也同样可能存在逻辑相关性,例如,多个有关色彩的编码常量,是逻辑相关的,应当在物理上放在一起加以封装。而枚举类型就可实现将这种逻辑相关常量的封装。enumColor{red,black,yellow,blue,white};enumColorc;4、相关数据的封装1005进一步提高封装度以C,pascal等语言为代表的结构化程序设计语言还有没有可能继续提高封装度?或者说程序中是否还有逻辑物理不一致的问题?要回答这个问题,让我们分析一下客观世界。客观世界由许许多多事物组成.每个事物都具有数据和功能。5进一步提高封装度以C,pascal等语言为代表的结构化程1015进一步提高封装度如:一个具体的学生是一个事物具有数据:姓名,学号,成绩等具有功能:设置姓名,学号,成绩,显示姓名,学号,成绩等由此可知,客观世界中一个学生的数据及功能是密切相关的。而在采用结构化程序设计语言设计的程序中,有关学生的数据和功能在程序中可能被分散在不同地方。5进一步提高封装度如:一个具体的学生是一个事物1025进一步提高封装度
5进一步提高封装度1035进一步提高封装度如图所示,客观对象的一体性在程序中没有得到反映,存在逻辑物理不一致问题。为了解决这一问题导致了面向对象程序设计(OOP)语言的产生。5进一步提高封装度1046面向对象程序设计中类的封装为了使程序中与客观对象取得一致,在面向对象程序设计语言中可以定义类,在类中将与对象相关的变量(在OOP中称为属性)和功能模块((在OOP中称为方法)进行封装。
6面向对象程序设计中类的封装1056面向对象程序设计中类的封装
在OOP中对学生对象和教师对象分别进行封装,形成学生类,教师类:6面向对象程序设计中类的封装106
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面向对象程序设计中类的封装publicclassStudent{6面向对象程107
6面向对象程序设计中类的封装类可以实现将对象的数据与方法的封装,但不同类之间是否存在可封装的内容呢?6面向对象程序设计中类的封装1087继承也是封装的一种形式考察下面的两个类:7继承也是封装的一种形式考察下面的两个类:1097继承也是封装的一种形式我们会发现,这两个类中存在共同的部分,这些共同部分实际上是一般“人”的属性和方法,因些,这些部分是逻辑相关的,有必要进行进一步的封装---封装为基类:人员类,而学生和教师类可以从这个基类继承产生。7继承也是封装的一种形式我们会发现,这两个类中存在共同的部1107继承也是封装的一种形式7继承也是封装的一种形式1117继承也是封装的一种形式将多个类中逻辑上相关的一组方法与属性封装到一起,构成这多个类的共同基类,而原多个类变为从该基类的派生的形式,这就是面向对象的继承性继承本质上仍是一种高级封装。当然实际工作中我们可能先设计基类,再设计其派生类。但这也是我们先在头脑中完成了由个别到一般的归纳,在设计中应用了由一般到个别的演绎。7继承也是封装的一种形式将多个类中逻辑上相关的一组方法与属1128、OOP中其它封装形式按照封装原理,OOP中还可进行更高级的封装:(1)类模板如果在程序中要使用一组类,这组类的功能与结构的相似性的,则这种相似性也是一种逻辑相关,应当进行封装。OOP的类模板可以实现这种封装。
8、OOP中其它封装形式按照封装原理,OOP中还可进行更113
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);};template<classT>classtar1148、OOP中其它封装形式
(2)函数模板如果在程序中存在一组方法在功能与结构是相似性的,这也构成逻辑相关,应当加以封装。OOP的函数模板可以实现这种封装。8、OOP中其它封装形式115template<classT>TPower(Tbase,intexponent){Ti,product=1;for(i=1;i<=exponent;i++)product*=base;return(product);}template<classT>1168、oop中其它封装形式
(3)函数重载將逻辑上相关的一组方法采用一个函数名,这种物理上的一致性也构成一种封装,这就是函数重载。函数重载是OOP多态性的一种方式。
8、oop中其它封装形式117voiddisplay(inta){cout<<"Theintis:"<<a<<"\n";}voiddisplay(floata){cout<<"Thefloatis:"<<a<<"\n";}voiddisplay(chartext[]){cout<<"Thetextis:"<<text<<"\n";}voiddisplay(inta)1188、oop中其它封装形式
(4)方法覆盖在父类中定义虚方法接口,在派生类中覆盖父类的虚方法,可以实现OOP中的高级多态性:动态联编多态性。这其中父子类中相同的方法接口也是对逻辑相关方法的物理封装。8、oop中其它封装形式119classshape{protected:inthight,width;public:shape(inth,intw){hight=h;width=w;}virtua
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年课堂教学设计评比
- 2025-2026学年毛绒球雪花教案
- 2025-2026学年美术教案胡桃夹子
- 2025-2026学年袋子绘画教学设计
- 管道焊接动火试压安全操作规范
- 2025-2026学年钱塘江春行教学设计
- 2025-2026学年没有秋虫的地方教学设计
- 2025-2026学年梁拼音教学设计模板
- 河北交通职业技术学院《土力学与基础工程》2024-2025学年第二学期期末试卷
- 武汉学院《电气工程CAD》2024-2025学年第二学期期末试卷
- 2025-2026学年人教鄂教版(新教材)小学科学三年级下学期教学计划及进度表
- JJF 2378-2026数字计量体系框架及应用指南
- (2026年春新版)人教版八年级生物下册全册教案
- 职业健康法培训课件
- 2025-2026学年北京市西城区初二(上期)期末考试物理试卷(含答案)
- 企业管理 华为会议接待全流程手册SOP
- (2025年)(完整)《中华人民共和国妇女权益保障法》知识竞赛题库及答案
- 2026年及未来5年市场数据中国密闭式冷却塔市场竞争格局及投资战略规划报告
- 2025年信阳法院书记员招聘考试真题及答案
- 医学影像学(第8版)第四章呼吸系统
- 四川省2025年高职单招职业技能综合测试(中职类)汽车类试卷(含答案解析)
评论
0/150
提交评论