JAVA和C++实现面向对象方法的分析
2018-01-17张胜利王鹏
张胜利++王鹏
摘 要 在进行相关探讨分析的时候,本篇论文主要是通过比较面向对象方法的抽象、封装等特性在Java和C++中的具体实现方式,并且在这个基础上研究分析了其中存在的一些主要差异,以此来更加深刻的对面向对象方法进行理解,这样一来,Java以及C++运用面向对象方法进行程序设计等水平就能在最大程度上得到提升。
【关键词】抽象 面向对象方法 程序 设计 水平 运用
1 抽象性
在面向对象中,其拥有的最为主要的特征就是抽象性,抽象性所包含的意义就是从被研究对象中抛除一些次要特征,这些次要特征一般都是不具备本质或者是与研究主旨没有任何关系的。之后,我们就需要抽取那些与研究有关的共性内容,同时对其进行适当的观察,以此来形成研究问题正确等认识。通常在Java和C++当中,抽象性的实现都是通过类来进行实现的,另外在这两者中,其包含的类主要具有以下两个部分:首先拿C++来说,在C++中,它的类主要被称之为数据成员或者是成员函数,而属性以及方法就是Java中的稱谓,但是在类的设计过程中,对两者进行程序设计、系统开发,就是类的设计基础。
但是在Java以及C++实现面向对象的抽象性时,不论是类的设计还是数组的产生等,都会存在一定的差异,通过适当的分析我们得出,主要的差异之如下所示:
首先在C++中,由于其需要对面向过程和结构化的c进行兼容,同时又要对面向对象方法给予一定的支持,所以在这样的情况之下,C++就属于一种混合类型的面向对象程序设计语言。在C++的程序中,不仅仅有类的存在,同时还存有一些一般函数存在,而这些一般函数存在并不属于类,比如main函数,这就是最为典型的一个例子。可是对于Java来说,它从一开始就是完全支持面向对象的,所以它具备的面向对象程序设计语言就是较为纯粹的,并且在Java的程序中,它的构成部分都是由类构成的,不存在任何不属于类的方法,包括main方法,在Java程序中也是属于类的。综上所述,如果我们站在类来实现面向对象的抽象性来看,那么实现的最彻底的就是Java,它也能在最大程度上对面向对象的抽象性进行体现。
其次,在Java中,它的类属性是可以具备或者是不具备赋初值的。要是不对其给予赋初值,那么系统就会给出缺省的初值0。但是在C++中,其是不允许给类的数据成员赋初值的,而static数据成员却是一个例外。
在进行有关考虑的过程中,如果我们是从抽象性角度进行考虑的,那么类的设计就是具备抽象性的,类的属性以及数据成员所描述的也应该是相似对象的共性,所以其也具备相应的抽象性,但是却无法给予定初值。举个例子来说,当我们在进行二维点类设计的过程中,需要对大量相似的具体二维点对象的共性进行抽象,而在这当中,它们的x、y坐标的值都具有一定的差异,但它们都具备相同的共性:都拥有x以及y坐标。所以在这种情况之下,二维点类的设计就可以对x、y坐标进行定义,使其成为属性成员,但是它们不能有初值。
最后在面向对象方法中,类是不能对实际问题进行解决的,造成这种现象的主要原因就是因为类具有抽象性,所以我们必须让类产生实例,从另一个方面来说就是让类产生对象,并且向对象发送相关的消息。之后对象进行响应,我们就可以通过对象间传递的消息等来对实际问题进行解决,这也是面向对象中的含义。
2 封装性
一般情况下,利用抽象的数据类型就是封装的主要内容,在进行封装的过程中,它可以有效的将数据以及基于数据的操作进行绑定,使其成为一个整体。通常而言,数据如果只存在于封装体的内部,那么就可以直接对其进行使用,有关操作可以在封装体内外使用,要是封装体的外部想要使用内部的数据,就必须通过封装体中被授权的操作,以此来完成间接的使用。其次,在封装体外部,我们是不需要对数据或者操作的具体实现细节进行了解的,需要了解的一点内容就是封装体接口提供的功能,这样一来,数据的安全性等就能得到明显的增强,其简洁性也会变得越来越明显。此外,要想将数据和操作实现过程中的不可知性称之为封装性,那么我们就需要将这种数据和基于数据的操作进行封装,让两者封装成为一体,才能达到有关的目的。
不论是在C++还是在Java当中,它们的封装体描述都是用类描述来完成的,同时在类中,它们可以通过设置访问权限,来对数据和操作进行规定,这样一来,数据以及操作的使用范围就得到了相应的规定,封装性也就自然而然的达成了。但是有一点需要注意的是,这两者之间的访问权限的设置和数据操作使用范围的规定是存在一定差异的,通过适当的分析,我们对其具有的差异进行了总结:
首先我们来说C++中具有的访问权限,在C++中,其具有的访问权限主要包含公有、保护、私有这三种类型。而在进行类中设置的过程时,公有权限的成员是完全对外开放的,所以类内外都可以直接对其使用。但是在进行保护权限设置的时候,该成员只能存在于该类内当中,并且在该类内中进行使用。而在设置私有权限的过程中,该权限中的成员只可以在该类中或者是该类的友元中进行使用。可是为了更好的对封装性进行体现,我们就要对C++采取相应的规定,在C++中,类的成员如果没有设置访问权限的话,那么私有权限就应该为默认的权限。其次,在正常的情况下,我们可以将类中含有的数据成员设置成私有权限,公有权限则应该设置成为成员的函数。
其次与C++不同的是,Java所具有的访问权限设置是较为复杂的,其访问权限的种类也与C++有着一定的差异,在Java当中,其含有的访问权限主要包括公有、保护、私有以及默认权限这四种,去除方法设置访问权限等,还可以设置的访问权限就只剩下公有以及默认这两种访问权限了。在对属性以及方法使用的范围进行确定的时候,我们可以按照类的访问权限等来完成相关的操作,要是将类的访问权限设置成为公有的时候,那么该类中公有权限的属性就可以为所有类使用。但是在进行保护权限的属性方法设置的时候,我们就可以根据对象引用的情况来为包中的类进行使用,在类得到定义的时候,包中的类和该类当中包含的所有子类就可以为其使用。endprint
综上所述我们可以得出,不論是C++还是Java,它们为了达到封装性的有关要求,都是通过设置访问权限以此来达成有关的目的,但是经过一番比较,C++不仅访问权限的设置比较简单,使用范围也较为简单,所以综合比较来看的话,C++比Java更加容易理解。但是有一点需要注意的是,C++不光支持了友元的概念,同时也顺利的对友元的概念进行了实现,可是友元却在一定程度上对封装性造成了破坏,由此我们可以看出,在C++中要想使用友元,就必须保持谨慎认真的态度。
3 继承性
在面向对象方法当中,最为重要的一种特性就是继承性,继承性不仅仅是一种演化的过程,同时也是一种发展的过程,简单来说就是利用夸张等,从一个已经知晓的父类出发,以此来创建出一个新的子类,而子类就属于父类的具体化、延续等等。
在C++以及Java中,在实现面向对象方法的特性时,最为重点的就是继承,但是在实现的过程中,两者还是存在一些差异的。通过分析,我们对两者之间的差异做出了以下的汇总:
(1)在对父类和子类继承关系的声明上,两者的方式都是截然不同的,C++主要是通过“class B:public A”这种方式进行声明的,而Java这是采用“class B extends A”的方式。
(2)当继承存在以后,子类要想顺利的对父类当中的成员进行集成,就需要对父类中的成员设置进行考虑,看其是否具有访问权限,一旦父类的成员被子类集成之后,访问权限的变化在两者中都是不同的。
4 总结
综上所述,本篇论文在进行分析的时候,主要是以面向对象方法中的抽象、封装等特性角度出发的,并且通过适当的分析比较,我们得出了Java和C++在实现这些特性时含有的差异。另外,在对这些特性进行实现的时候,不论是实现的程度还是方式,两者都是存在一定的差异的,根据更深一步的分析,我们就可以加深对这些特性的理解,从而对程序设计等水平进行有效的提升。
参考文献
[1]王文龙.Java和C++实现面向对象方法的分析研究[J].喀什大学学报,2017,38(03):56-60.
[2]李健,田立锋,郭瑞.Java SSH框架在Java Web中的应用[J].电脑与电信,2016(03):69-72.
[3]赵彦.Java课程群网络教学平台的构建[J].实验室研究与探索,2015,34(01):199-204.
[4]陆洲.Java EE核心模式研究[J]. 计算机与数字工程,2014,42(01):81-84.
作者简介
张胜利(1995-),男,山西省阳泉市人。大学本科学历。
王鹏(1996-)男,山西省晋中市人。大学本科学历。
作者单位
山西农业大学信息学院 山西省晋中市 030801endprint