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

上传人:j*** 文档编号:30789429 上传时间:2023-10-01 格式:PPTX 页数:67 大小:252.67KB
下载 相关 举报
从封装看计算机高级语言的发展规律概述.pptx_第1页
第1页 / 共67页
从封装看计算机高级语言的发展规律概述.pptx_第2页
第2页 / 共67页
从封装看计算机高级语言的发展规律概述.pptx_第3页
第3页 / 共67页
从封装看计算机高级语言的发展规律概述.pptx_第4页
第4页 / 共67页
从封装看计算机高级语言的发展规律概述.pptx_第5页
第5页 / 共67页
点击查看更多>>
下载资源
资源描述

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

《从封装看计算机高级语言的发展规律概述.pptx》由会员分享,可在线阅读,更多相关《从封装看计算机高级语言的发展规律概述.pptx(67页珍藏版)》请在冰豆网上搜索。

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

从封装看计算机高级语言的发展规律,计算机科学与技术学院邱勇,内容,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;this.name=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:

publicshapepublic:

rectangle(inth,intw):

shape(h,w)voidshowarea()coutrectanglearea=hight*widthendl;classtriangle:

publicshapepublic:

triangle(inth,intw):

shape(h,w)voidshowarea()couttrianglearea=hight*width/2endl;,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)新的程序设计语言可以实现更高级的封装,计算机语言发展的过程就是不断实现更高级封装的过程。

11结论,通过以上分析我们可以得到这样的重要结论:

(1)新的程序设计语言可以实现更高级的封装,计算机语言发展的过程就是不断实现更高级封装的过程。

(2)封装的基本原理是逻辑物理一致性.即:

程序中逻辑上相关的元素应当在物理上也放在一起,加以封装。

这一结论对开发新型程序设计语言以及设计高质量软件有一定的指导意义,思考:

面向方面编程中的封装,AOP为AspectOrientedProgramming的缩写,意为:

面向方面编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。

AOP是OOP的延续,AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

思考:

面向方法编程中的封锁,大作业,题目:

计算机程序设计语言发展规律研究3000字别人的观点要有自己的观点结合AOP分析对下一代PL展望和探讨(4周后上交),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1