摘要:為研究分析Python語言與Java語言之間的類似性與區(qū)別,通過文獻(xiàn)研究法、對比分析法等研究方法,從面向?qū)ο髾C(jī)制方面的特性的角度對Java與Python展開比較分析,發(fā)現(xiàn)二者在面向?qū)ο髾C(jī)制方面存在較大的差異,具體體現(xiàn)在頂層object類、類的權(quán)限修飾符、抽象類與接口、構(gòu)造函數(shù)與析構(gòu)函數(shù)幾個(gè)方面,希望能夠引起業(yè)內(nèi)人士的關(guān)注與重視,以促進(jìn)Python語言以及Java語言在編程開發(fā)領(lǐng)域的進(jìn)一步應(yīng)用。
關(guān)鍵詞:Python;Java;面向?qū)ο?;機(jī)制;比較
一、前言
Python語言以及Java語言均是當(dāng)前技術(shù)條件支持下軟件開發(fā)領(lǐng)域面向?qū)ο蟮母呒?jí)程序設(shè)計(jì)語言[1]。Python語言以及Java語言最大的共同點(diǎn)是實(shí)現(xiàn)了面向?qū)ο蟮姆庋b、繼承以及多態(tài)性處理。但受產(chǎn)生背景不同等因素的影響,導(dǎo)致Python語言以及Java語言分別吸收了不同的源語言特點(diǎn),造成二者在面向?qū)ο髾C(jī)制方面存在一定的差異性。以下嘗試對Python語言以及Java語言在面向?qū)ο髾C(jī)制方面的特點(diǎn)進(jìn)行綜合比較,希望引起業(yè)內(nèi)重視。
二、頂層object類比較
在Python語言環(huán)境下,父子關(guān)系的頂端定義為object,object類作為所有類的父類存在,其他Python語言環(huán)境支持下的類都以直接或者間接的方式對object類對應(yīng)方法以及屬性進(jìn)行繼承。需要特別注意的一點(diǎn)是,在Python背景下,必須有明確的父類對應(yīng)關(guān)系才能夠在代碼中指定,如果父類對應(yīng)關(guān)系不明確,則可以省略對object類的描述。此情形下,對于建立Python語言編譯器環(huán)境下的參數(shù)以及函數(shù)關(guān)系而言,均具備繼承object類的特點(diǎn)。不但如此,基于object類支持,能夠?qū)ython語言下以內(nèi)置方式存在的函數(shù)關(guān)系進(jìn)行基本概括,涉及_new(cls,*args,**kwargs)(創(chuàng)建對象時(shí)自動(dòng)調(diào)用的函數(shù))、_init(sel O(初始化或構(gòu)造函數(shù))、-st L(sell)(對象描述函數(shù))、_del_(sel O(析構(gòu)函數(shù))。在Java語言輔助下,基于object類支持的基本定義為類對應(yīng)父類關(guān)系。所有類均在Java語言支持環(huán)境下對父類object類進(jìn)行集成,提示可以采用基于object類支持的方法屬性對所有類參數(shù)進(jìn)行干預(yù)與使用。受此因素影響,object類支持下的編譯處理過程可以與子類保持對應(yīng)關(guān)系,且支持結(jié)合實(shí)際情況采取顯式或者隱式方式存在于object中,這一特性與Python語言環(huán)境支持下的object類支持反應(yīng)存在一定的相似性?;贘ava語言環(huán)境進(jìn)行分析,類的幾個(gè)常見方法:如olean equals(Object obj)(比較兩個(gè)對象是否相等)、protected void finalize O(當(dāng)Gc確定不存在對該對象有引用時(shí)調(diào)用此方法)、String to Strin()(返回對象的字符串表示形式)與Python語言所處環(huán)境存在高度相似性。從這一角度上對Python語言以及Java語言頂層object類進(jìn)行對比,可以發(fā)現(xiàn)兩者對象描述函數(shù)是存在相似性的,意味著Python下的object類具備以下幾個(gè)方面的特點(diǎn):第一是身份,即object類對應(yīng)存儲(chǔ)地址,可以通過引入id()方法的方式進(jìn)行查詢;第二是類型,即object類對象所述類型,可以采取的查詢方法為type();第三是值,即object類對應(yīng)數(shù)據(jù)信息。在Python語言環(huán)境下,還可以借助于isinstance()方法查詢對象是否屬于某一類型,具體代碼如下:
三、類的權(quán)限修飾符比較
在基于Java語言支持下,對應(yīng)類權(quán)限修飾符為實(shí)現(xiàn)對類屬性以及方法訪問方式的限制,嘗試引入訪問控制關(guān)鍵字,如private以及public等,提供訪問曲線默認(rèn)以及protected支持[2]。需要注意的一點(diǎn)是,在Java語言支持環(huán)境下,類對應(yīng)private成員無法在類屬性范圍外實(shí)現(xiàn)調(diào)用或者被訪問,其相關(guān)操作需要在類內(nèi)范疇中完成。而對于public成員而言,則可以實(shí)現(xiàn)在類范圍以外的訪問與調(diào)用。這一特性決定了在Java語言支持環(huán)境下,為實(shí)現(xiàn)對private實(shí)例變量的訪問,必須嘗試將基于public的方法引入其中,在支持變量訪問功能實(shí)現(xiàn)的同時(shí),滿足數(shù)據(jù)封裝操作要求。此情形下,對于基于Java語言的類的protected成員來說,可以以類范疇為環(huán)境,支持類基礎(chǔ)信息的調(diào)用與訪問。但與Python環(huán)境支持下的類權(quán)限修飾符相比不同的是,在Python環(huán)境支持下,圍繞類屬性以及對應(yīng)方法設(shè)置有特定的訪問權(quán)限及其操作范圍,但區(qū)分標(biāo)準(zhǔn)并非傳統(tǒng)意義上的關(guān)鍵詞,而是將特定約定規(guī)則引入其中。Python情景下屬性方法public具有公共特性,在Python環(huán)境下可以通過對方法屬性名或變量屬性名是否對應(yīng)有下劃線“_ ”的方式進(jìn)行類的合理區(qū)分(作為public、private以及protected的區(qū)分依據(jù))。在Python環(huán)境下,數(shù)據(jù)方法對應(yīng)的默認(rèn)類型為public,此狀態(tài)下對應(yīng)變量名以及方法均無下劃線“ _ ” 。而對于以protected類型對應(yīng)的變量或者方法而言,開頭表示需要引入單下劃線“ _ ”作為區(qū)分依據(jù),這一類僅能夠允許類或?qū)?yīng)子類屬性進(jìn)行反應(yīng)。除此以外,在Python環(huán)境下可以通過方法名或變量名實(shí)例添加雙下劃線的方式提示基于private的訪問控制,支持面向本類對private進(jìn)行訪問功能的順利實(shí)現(xiàn)。受此因素影響,訪問僅局限于本類對private的訪問。而以下劃線方式為開頭的成員變量具有獨(dú)特的私有屬性特征,難以通過外部環(huán)境實(shí)現(xiàn)訪問要求,因此意味著此情形下仍然需要搭載定義實(shí)例支持間接性訪問目的的順利實(shí)現(xiàn)。
四、抽象類與接口比較
在Java語言輔助下,面向?qū)ο髴?yīng)當(dāng)將對抽象類接口的訪問作為重要關(guān)注對象之一。然而在Python環(huán)境下有關(guān)抽象類以及接口的機(jī)制與Java語言存在較大的差異性。從抽象類的角度上來說,其作為軟件開發(fā)中關(guān)鍵性的概念之一,需要通過對抽象類進(jìn)行定義的方式,約定子類必須實(shí)現(xiàn)的方法[3]。但在Python環(huán)境下,則基于自帶abc模塊實(shí)現(xiàn)針對抽象類的定義與操作,其具體實(shí)現(xiàn)方式可以概括如下:
在程序設(shè)計(jì)應(yīng)用前期環(huán)節(jié)中,需要引入歸一化處理方式,引入Interface機(jī)制對接口及其響應(yīng)進(jìn)行針對性處理。從Interface機(jī)制運(yùn)行的角度上來說,基于Java語言應(yīng)用視角,輔助對接口名進(jìn)行定義處理,采取抽象化方式處理函數(shù)關(guān)系式,但并沒有可靠的處理方法作為基本依據(jù),進(jìn)而對函數(shù)構(gòu)造關(guān)系功能的實(shí)現(xiàn)產(chǎn)生影響,子類函數(shù)關(guān)系需要作為支持,以確保接口功能的順利實(shí)現(xiàn),這也可以概括為接口繼承關(guān)系的基本依據(jù)。同時(shí)需要注意的是,受到Java語言支持影響,接口繼承必須體現(xiàn)出良好且積極的抽象概念,在Java語言輔助下支持工作接口的兼容性功能,確保在外部調(diào)用的過程中始終保持對構(gòu)造函數(shù)對象細(xì)節(jié)的關(guān)注度,以支持特定接口對應(yīng)對象的全面覆蓋性。但與之對應(yīng)的是,受到Python環(huán)境的影響,引入Interface機(jī)制并非對所有基于對象程序設(shè)計(jì)語言產(chǎn)生影響與作用,而是作為特殊案例引入Java語言設(shè)計(jì)中,以彌補(bǔ)傳統(tǒng)C++語言存在問題與不足。換句話來說,受引入Interface機(jī)制Python環(huán)境特殊性因素影響,導(dǎo)致自身支持多繼承關(guān)系,無須對Interface機(jī)制進(jìn)行獨(dú)立處理。在Python環(huán)境作用下,可以概括性描述代碼例子,并基于用普通類對接口進(jìn)行定義,以此種方式對類對應(yīng)interface進(jìn)行直接定義,借助于pass語句實(shí)現(xiàn),后續(xù)可以引入interface子類對函數(shù)進(jìn)行重寫處理,從本質(zhì)上來說是基于Python語言對Java實(shí)現(xiàn)接口定義抽象方法的模擬。
五、構(gòu)造函數(shù)與析構(gòu)函數(shù)比較
在Python環(huán)境下,針對構(gòu)造函數(shù)以及析構(gòu)函數(shù)所采用的定義方式是基于類代碼方式[4],對應(yīng)構(gòu)造函數(shù)為_init_(),對應(yīng)析構(gòu)函數(shù)為_del_()。但值得注意的是,在Java語言支持下,進(jìn)行構(gòu)造前所采取的命名方法需要以類名代碼為基礎(chǔ)與依據(jù),排除了父類構(gòu)造函數(shù)對其所產(chǎn)生的影響,僅支持調(diào)用關(guān)系的存在。這也就意味著基于構(gòu)造函數(shù)對子類對象進(jìn)行創(chuàng)建操作期間,需要首先以調(diào)用的方式對父類構(gòu)造方法進(jìn)行處理,此過程中引入對Java虛擬機(jī)的應(yīng)用,并按照相同方法對子類構(gòu)造進(jìn)行處理。受此因素影響,若父類構(gòu)造函數(shù)存在調(diào)用關(guān)系但并非表現(xiàn)為顯式模式,則意味著系統(tǒng)對父類無參構(gòu)造函數(shù)的調(diào)用表現(xiàn)形式特殊,可以以super()的方式進(jìn)行表現(xiàn)。但對于析構(gòu)函數(shù)而言,受語言環(huán)境因素影響,導(dǎo)致基于Java語言的析構(gòu)函數(shù)并不存在顯式特征,其原因在于Java對應(yīng)語言環(huán)境設(shè)置有獨(dú)立運(yùn)行的垃圾回收工作機(jī)制,若不對函數(shù)進(jìn)行持續(xù)性使用,則可以搭載Java環(huán)境對對象進(jìn)行自動(dòng)回收處理,并避免對空間產(chǎn)生占用影響。但在Python環(huán)境支持下,在定義子類構(gòu)造函數(shù)關(guān)系過程中,需要重寫父類構(gòu)造函數(shù)方法,此過程涉及對函數(shù)構(gòu)造方法的顯式調(diào)用,因此可以引入函數(shù)關(guān)系super(),以支持重寫功能的實(shí)現(xiàn)。但值得注意的一點(diǎn)是,如果子類構(gòu)造函數(shù)針對_init_()不進(jìn)行重寫,那么就意味著在子類構(gòu)造函數(shù)實(shí)例化的過程中,需要重新定義父類函數(shù)構(gòu)造范疇下的_init_()關(guān)系,并進(jìn)行自動(dòng)調(diào)用。從這一角度上來說,Java語言以及Python針對構(gòu)造函數(shù)以及析構(gòu)函數(shù)的處理是存在一定差異的。在Python中,析構(gòu)函數(shù)對應(yīng)_del_()處于可選擇狀態(tài)下,如果不提供對應(yīng)析構(gòu)函數(shù)_del_(),則可支持Python對后臺(tái)默認(rèn)析構(gòu)函數(shù)進(jìn)行調(diào)用處理。
六、結(jié)語
Python語言以及Java語言受到產(chǎn)生背景不同因素的影響,導(dǎo)致二者在實(shí)際應(yīng)用中存在一定的區(qū)別與差異。Java語言去除了C語言存在的指針問題,采用面向?qū)ο蟮脑O(shè)計(jì)方法進(jìn)行運(yùn)行[5]。而對于Python語言而言,其產(chǎn)生所處環(huán)境以面向過程為主流趨勢,多數(shù)概念直接繼承C語言特點(diǎn),后來才將類概念加入Python語言中。從這一角度上來說,Python語言在面向?qū)ο髾C(jī)制方面與Java語言存在較大差異。上述研究嘗試對Python語言與Java語言在面向?qū)ο髾C(jī)制方面的特點(diǎn)與差異進(jìn)行總結(jié),包括頂層object類比較、類的權(quán)限修飾符比較、抽象類與接口比較、構(gòu)造函數(shù)與析構(gòu)函數(shù)比較這幾個(gè)方面的內(nèi)容,上述研究有助于把握文中提及的語言特征機(jī)制,使程序開發(fā)編寫更為規(guī)范,對軟件設(shè)計(jì)開發(fā)方案的多元化發(fā)展有積極意義,值得業(yè)內(nèi)人士關(guān)注與重視[6]。
參考文獻(xiàn)
[1]宋叢威.Pyrimidine:基于面向?qū)ο蟮倪z傳算法Python框架[J].電腦編程技巧與維護(hù),2021(01):31-33.
[2]郭濤,郭浩.利用Python Remote Objects技術(shù)實(shí)現(xiàn)分布式對象應(yīng)用系統(tǒng)[J].太原理工大學(xué)學(xué)報(bào),2005,36(05):536-538.
[3]亓雪冬,李霞.Python偽裝文件類對象輸入輸出重定向方法研究[J].微型電腦應(yīng)用,2020,36(06):90-92.
[4]羅廣恒.基于Python模塊及XML的自動(dòng)化測試平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J].自動(dòng)化應(yīng)用,2024,65(02):202-206.
[5]李前景,劉珺,米曉飛,等.面向?qū)ο笈c卷積神經(jīng)網(wǎng)絡(luò)模型的GF-6 WFV影像作物分類[J].遙感學(xué)報(bào),2021,25(02):549-558.
[6]張敏,李萬佳.Python文本分析技術(shù)在中華文化對外傳播中的應(yīng)用研究——以YouTube留言數(shù)據(jù)為例[J].西南民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2022,48(05):543-549.