張勝利++王鵬
摘 要 在進(jìn)行相關(guān)探討分析的時候,本篇論文主要是通過比較面向?qū)ο蠓椒ǖ某橄?、封裝等特性在Java和C++中的具體實現(xiàn)方式,并且在這個基礎(chǔ)上研究分析了其中存在的一些主要差異,以此來更加深刻的對面向?qū)ο蠓椒ㄟM(jìn)行理解,這樣一來,Java以及C++運用面向?qū)ο蠓椒ㄟM(jìn)行程序設(shè)計等水平就能在最大程度上得到提升。
【關(guān)鍵詞】抽象 面向?qū)ο蠓椒?程序 設(shè)計 水平 運用
1 抽象性
在面向?qū)ο笾?,其擁有的最為主要的特征就是抽象性,抽象性所包含的意義就是從被研究對象中拋除一些次要特征,這些次要特征一般都是不具備本質(zhì)或者是與研究主旨沒有任何關(guān)系的。之后,我們就需要抽取那些與研究有關(guān)的共性內(nèi)容,同時對其進(jìn)行適當(dāng)?shù)挠^察,以此來形成研究問題正確等認(rèn)識。通常在Java和C++當(dāng)中,抽象性的實現(xiàn)都是通過類來進(jìn)行實現(xiàn)的,另外在這兩者中,其包含的類主要具有以下兩個部分:首先拿C++來說,在C++中,它的類主要被稱之為數(shù)據(jù)成員或者是成員函數(shù),而屬性以及方法就是Java中的稱謂,但是在類的設(shè)計過程中,對兩者進(jìn)行程序設(shè)計、系統(tǒng)開發(fā),就是類的設(shè)計基礎(chǔ)。
但是在Java以及C++實現(xiàn)面向?qū)ο蟮某橄笮詴r,不論是類的設(shè)計還是數(shù)組的產(chǎn)生等,都會存在一定的差異,通過適當(dāng)?shù)姆治鑫覀兊贸?,主要的差異之如下所示?/p>
首先在C++中,由于其需要對面向過程和結(jié)構(gòu)化的c進(jìn)行兼容,同時又要對面向?qū)ο蠓椒ńo予一定的支持,所以在這樣的情況之下,C++就屬于一種混合類型的面向?qū)ο蟪绦蛟O(shè)計語言。在C++的程序中,不僅僅有類的存在,同時還存有一些一般函數(shù)存在,而這些一般函數(shù)存在并不屬于類,比如main函數(shù),這就是最為典型的一個例子??墒菍τ贘ava來說,它從一開始就是完全支持面向?qū)ο蟮?,所以它具備的面向?qū)ο蟪绦蛟O(shè)計語言就是較為純粹的,并且在Java的程序中,它的構(gòu)成部分都是由類構(gòu)成的,不存在任何不屬于類的方法,包括main方法,在Java程序中也是屬于類的。綜上所述,如果我們站在類來實現(xiàn)面向?qū)ο蟮某橄笮詠砜?,那么實現(xiàn)的最徹底的就是Java,它也能在最大程度上對面向?qū)ο蟮某橄笮赃M(jìn)行體現(xiàn)。
其次,在Java中,它的類屬性是可以具備或者是不具備賦初值的。要是不對其給予賦初值,那么系統(tǒng)就會給出缺省的初值0。但是在C++中,其是不允許給類的數(shù)據(jù)成員賦初值的,而static數(shù)據(jù)成員卻是一個例外。
在進(jìn)行有關(guān)考慮的過程中,如果我們是從抽象性角度進(jìn)行考慮的,那么類的設(shè)計就是具備抽象性的,類的屬性以及數(shù)據(jù)成員所描述的也應(yīng)該是相似對象的共性,所以其也具備相應(yīng)的抽象性,但是卻無法給予定初值。舉個例子來說,當(dāng)我們在進(jìn)行二維點類設(shè)計的過程中,需要對大量相似的具體二維點對象的共性進(jìn)行抽象,而在這當(dāng)中,它們的x、y坐標(biāo)的值都具有一定的差異,但它們都具備相同的共性:都擁有x以及y坐標(biāo)。所以在這種情況之下,二維點類的設(shè)計就可以對x、y坐標(biāo)進(jìn)行定義,使其成為屬性成員,但是它們不能有初值。
最后在面向?qū)ο蠓椒ㄖ校愂遣荒軐嶋H問題進(jìn)行解決的,造成這種現(xiàn)象的主要原因就是因為類具有抽象性,所以我們必須讓類產(chǎn)生實例,從另一個方面來說就是讓類產(chǎn)生對象,并且向?qū)ο蟀l(fā)送相關(guān)的消息。之后對象進(jìn)行響應(yīng),我們就可以通過對象間傳遞的消息等來對實際問題進(jìn)行解決,這也是面向?qū)ο笾械暮x。
2 封裝性
一般情況下,利用抽象的數(shù)據(jù)類型就是封裝的主要內(nèi)容,在進(jìn)行封裝的過程中,它可以有效的將數(shù)據(jù)以及基于數(shù)據(jù)的操作進(jìn)行綁定,使其成為一個整體。通常而言,數(shù)據(jù)如果只存在于封裝體的內(nèi)部,那么就可以直接對其進(jìn)行使用,有關(guān)操作可以在封裝體內(nèi)外使用,要是封裝體的外部想要使用內(nèi)部的數(shù)據(jù),就必須通過封裝體中被授權(quán)的操作,以此來完成間接的使用。其次,在封裝體外部,我們是不需要對數(shù)據(jù)或者操作的具體實現(xiàn)細(xì)節(jié)進(jìn)行了解的,需要了解的一點內(nèi)容就是封裝體接口提供的功能,這樣一來,數(shù)據(jù)的安全性等就能得到明顯的增強(qiáng),其簡潔性也會變得越來越明顯。此外,要想將數(shù)據(jù)和操作實現(xiàn)過程中的不可知性稱之為封裝性,那么我們就需要將這種數(shù)據(jù)和基于數(shù)據(jù)的操作進(jìn)行封裝,讓兩者封裝成為一體,才能達(dá)到有關(guān)的目的。
不論是在C++還是在Java當(dāng)中,它們的封裝體描述都是用類描述來完成的,同時在類中,它們可以通過設(shè)置訪問權(quán)限,來對數(shù)據(jù)和操作進(jìn)行規(guī)定,這樣一來,數(shù)據(jù)以及操作的使用范圍就得到了相應(yīng)的規(guī)定,封裝性也就自然而然的達(dá)成了。但是有一點需要注意的是,這兩者之間的訪問權(quán)限的設(shè)置和數(shù)據(jù)操作使用范圍的規(guī)定是存在一定差異的,通過適當(dāng)?shù)姆治觯覀儗ζ渚哂械牟町愡M(jìn)行了總結(jié):
首先我們來說C++中具有的訪問權(quán)限,在C++中,其具有的訪問權(quán)限主要包含公有、保護(hù)、私有這三種類型。而在進(jìn)行類中設(shè)置的過程時,公有權(quán)限的成員是完全對外開放的,所以類內(nèi)外都可以直接對其使用。但是在進(jìn)行保護(hù)權(quán)限設(shè)置的時候,該成員只能存在于該類內(nèi)當(dāng)中,并且在該類內(nèi)中進(jìn)行使用。而在設(shè)置私有權(quán)限的過程中,該權(quán)限中的成員只可以在該類中或者是該類的友元中進(jìn)行使用??墒菫榱烁玫膶Ψ庋b性進(jìn)行體現(xiàn),我們就要對C++采取相應(yīng)的規(guī)定,在C++中,類的成員如果沒有設(shè)置訪問權(quán)限的話,那么私有權(quán)限就應(yīng)該為默認(rèn)的權(quán)限。其次,在正常的情況下,我們可以將類中含有的數(shù)據(jù)成員設(shè)置成私有權(quán)限,公有權(quán)限則應(yīng)該設(shè)置成為成員的函數(shù)。
其次與C++不同的是,Java所具有的訪問權(quán)限設(shè)置是較為復(fù)雜的,其訪問權(quán)限的種類也與C++有著一定的差異,在Java當(dāng)中,其含有的訪問權(quán)限主要包括公有、保護(hù)、私有以及默認(rèn)權(quán)限這四種,去除方法設(shè)置訪問權(quán)限等,還可以設(shè)置的訪問權(quán)限就只剩下公有以及默認(rèn)這兩種訪問權(quán)限了。在對屬性以及方法使用的范圍進(jìn)行確定的時候,我們可以按照類的訪問權(quán)限等來完成相關(guān)的操作,要是將類的訪問權(quán)限設(shè)置成為公有的時候,那么該類中公有權(quán)限的屬性就可以為所有類使用。但是在進(jìn)行保護(hù)權(quán)限的屬性方法設(shè)置的時候,我們就可以根據(jù)對象引用的情況來為包中的類進(jìn)行使用,在類得到定義的時候,包中的類和該類當(dāng)中包含的所有子類就可以為其使用。endprint
綜上所述我們可以得出,不論是C++還是Java,它們?yōu)榱诉_(dá)到封裝性的有關(guān)要求,都是通過設(shè)置訪問權(quán)限以此來達(dá)成有關(guān)的目的,但是經(jīng)過一番比較,C++不僅訪問權(quán)限的設(shè)置比較簡單,使用范圍也較為簡單,所以綜合比較來看的話,C++比Java更加容易理解。但是有一點需要注意的是,C++不光支持了友元的概念,同時也順利的對友元的概念進(jìn)行了實現(xiàn),可是友元卻在一定程度上對封裝性造成了破壞,由此我們可以看出,在C++中要想使用友元,就必須保持謹(jǐn)慎認(rèn)真的態(tài)度。
3 繼承性
在面向?qū)ο蠓椒ó?dāng)中,最為重要的一種特性就是繼承性,繼承性不僅僅是一種演化的過程,同時也是一種發(fā)展的過程,簡單來說就是利用夸張等,從一個已經(jīng)知曉的父類出發(fā),以此來創(chuàng)建出一個新的子類,而子類就屬于父類的具體化、延續(xù)等等。
在C++以及Java中,在實現(xiàn)面向?qū)ο蠓椒ǖ奶匦詴r,最為重點的就是繼承,但是在實現(xiàn)的過程中,兩者還是存在一些差異的。通過分析,我們對兩者之間的差異做出了以下的匯總:
(1)在對父類和子類繼承關(guān)系的聲明上,兩者的方式都是截然不同的,C++主要是通過“class B:public A”這種方式進(jìn)行聲明的,而Java這是采用“class B extends A”的方式。
(2)當(dāng)繼承存在以后,子類要想順利的對父類當(dāng)中的成員進(jìn)行集成,就需要對父類中的成員設(shè)置進(jìn)行考慮,看其是否具有訪問權(quán)限,一旦父類的成員被子類集成之后,訪問權(quán)限的變化在兩者中都是不同的。
4 總結(jié)
綜上所述,本篇論文在進(jìn)行分析的時候,主要是以面向?qū)ο蠓椒ㄖ械某橄?、封裝等特性角度出發(fā)的,并且通過適當(dāng)?shù)姆治霰容^,我們得出了Java和C++在實現(xiàn)這些特性時含有的差異。另外,在對這些特性進(jìn)行實現(xiàn)的時候,不論是實現(xiàn)的程度還是方式,兩者都是存在一定的差異的,根據(jù)更深一步的分析,我們就可以加深對這些特性的理解,從而對程序設(shè)計等水平進(jìn)行有效的提升。
參考文獻(xiàn)
[1]王文龍.Java和C++實現(xiàn)面向?qū)ο蠓椒ǖ姆治鲅芯縖J].喀什大學(xué)學(xué)報,2017,38(03):56-60.
[2]李健,田立鋒,郭瑞.Java SSH框架在Java Web中的應(yīng)用[J].電腦與電信,2016(03):69-72.
[3]趙彥.Java課程群網(wǎng)絡(luò)教學(xué)平臺的構(gòu)建[J].實驗室研究與探索,2015,34(01):199-204.
[4]陸洲.Java EE核心模式研究[J]. 計算機(jī)與數(shù)字工程,2014,42(01):81-84.
作者簡介
張勝利(1995-),男,山西省陽泉市人。大學(xué)本科學(xué)歷。
王鵬(1996-)男,山西省晉中市人。大學(xué)本科學(xué)歷。
作者單位
山西農(nóng)業(yè)大學(xué)信息學(xué)院 山西省晉中市 030801endprint