999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Java與Python的面向?qū)ο缶幊痰幕咎卣餮芯?/h1>
2017-09-28 19:16:16韓宏峰馮石羅羿隆
軟件工程 2017年8期

韓宏峰+馮石+羅羿隆

摘 要:Java與Python作為兩種主流的不同類型的面向?qū)ο缶幊陶Z言,有較深的研究價(jià)值。本文簡述并比較了面向?qū)ο缶幊陶Z言的繼承與多態(tài),Java因只支持單繼承而與Python等系列語言不同,因此Java通過設(shè)計(jì)接口以間接實(shí)現(xiàn)多繼承。另一方面,本文闡述了垃圾回收機(jī)制的意義、兩種回收方法和主GC的觸發(fā)條件,并與Python進(jìn)行了對(duì)比,最后進(jìn)行了Java內(nèi)存的概況和結(jié)構(gòu)分析。

關(guān)鍵詞:面向?qū)ο缶幊蹋籎ava與Python;繼承與多態(tài);接口;垃圾回收機(jī)制

中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A

Abstract:Java and Python are two kinds of mainstream object oriented programming languages with comparatively higher research value.This paper sketches and compares the two major features of object oriented programming languages:inheritance and polymorphism.Different from Python and other programming languages,Java only supports single inheritance of classes,so Java indirectly implements multiple inheritance through the design interface.This paper also states the significance of the garbage collection mechanism,two kinds of recovery methods and the trigger condition of the main GC of Java,and then compares with Python.At last,the general situation and structure analysis of Java memory are carried out.

Keywords:object oriented programming;Java and Python;inheritance and polymorphism;interface;garbage collection

mechanism

1 引言(Introduction)

程序設(shè)計(jì)的思想通常分為面向過程的編程和面向?qū)ο蟮木幊蘙1]。面向過程的編程以函數(shù)為主,通常以線性步驟為特征,設(shè)計(jì)起來較為繁雜,需要具備扎實(shí)的基礎(chǔ),以C語言最為流行,是操作系統(tǒng)的設(shè)計(jì)語言;而在面向?qū)ο缶幊讨?,?duì)象指類的實(shí)例,通過將對(duì)象作為程序的基本單元來提高軟件的靈活性。其中面向?qū)ο蟮娜齻€(gè)基本特征是:繼承、封裝和多態(tài)[2]。Java與Python作為兩種主流的不同類型的面向?qū)ο缶幊陶Z言,具有較深的研究價(jià)值。本文在論述時(shí)引入了靜態(tài)語言和動(dòng)態(tài)語言的概念來區(qū)分Java與Python的不同特征,在討論多繼承時(shí)通過接口的引入解決了Java單繼承的局限性,間接實(shí)現(xiàn)了Python的多繼承。另一方面,本文對(duì)Java的垃圾回收機(jī)制進(jìn)行了詳細(xì)解析并對(duì)比了Python。最后介紹了Java的內(nèi)存管理模塊。

2 多態(tài)與繼承(Polymorphism and inheritance)

2.1 多態(tài)

多態(tài)是面向?qū)ο笳Z言里一個(gè)常見的概念,指的是同名而內(nèi)容不同的方法同時(shí)存在于一個(gè)程序中。在Java中,多態(tài)分為動(dòng)態(tài)和靜態(tài)[3]。動(dòng)態(tài)指的是在程序運(yùn)行時(shí)才可以通過虛函數(shù)或重寫來動(dòng)態(tài)地決定指針指向的對(duì)象。靜態(tài)指的是在編譯時(shí)系統(tǒng)能通過重載決定調(diào)用的函數(shù)名[4]。Java屬于一種要求在編譯時(shí)變量的數(shù)據(jù)類型必須確定的語言,即靜態(tài)語言[5]。動(dòng)態(tài)語言(Python)與靜態(tài)語言(Java)相比,其不必檢查變量的數(shù)據(jù)類型,只要方法存在并且參數(shù)正確便可直接調(diào)用。如下面代碼所示,參數(shù)self可以是任何數(shù)據(jù)類型的實(shí)例,只要有g(shù)etName()的方法即可。

class student(object):

def getName(self):

return'I am a student'

2.2 繼承

Java作為一種面向?qū)ο蟮恼Z言,只支持單繼承,即一個(gè)子類不能對(duì)應(yīng)多個(gè)父類。好處在于單繼承能使java的繼承關(guān)系變得簡單,程序變得更易于管理,而對(duì)多繼承的需求可以通過接口實(shí)現(xiàn)。通過多重繼承,一個(gè)子類就可以同時(shí)獲得多個(gè)父類的所有功能。Python作為一種支持多繼承的語言,子類如果沒有寫自己的初始化方法,會(huì)自動(dòng)繼承第一個(gè)父類的方法。為了更好地設(shè)計(jì),通常進(jìn)行一種稱之為Mixin[6,7]的設(shè)計(jì)來減少多層次的復(fù)雜的繼承關(guān)系。

3 Java的接口(Java interface)

3.1 接口的引入與形式

正如2.2節(jié)繼承所述,Java不支持類的多重繼承,這使得程序的結(jié)構(gòu)更加簡潔。但是和支持多重繼承的其他語言相比,單繼承有時(shí)并不能很好的表述比較煩瑣的問題。在這種情況下,接口可以用于實(shí)現(xiàn)類似于多重繼承的功能。接口是一種抽象的數(shù)據(jù)類型,也就是說它并不能實(shí)例化。抽象是接口的一大特點(diǎn),因此在接口中并沒有方法和變量,只有方法的定義與常量。聲明接口和聲明一個(gè)類十分相似。其中接口為一個(gè)抽象類,只有虛函數(shù)和靜態(tài)數(shù)據(jù)被聲明,相當(dāng)于定義了一個(gè)程序之間的協(xié)議[8,9]。

3.2 接口的實(shí)現(xiàn)

接口由于自身只是一種抽象的數(shù)據(jù)類型,能避免多繼承帶來的許多矛盾。一個(gè)類可以通過實(shí)現(xiàn)多個(gè)接口來實(shí)現(xiàn)諸如Python的“多繼承”功能。在具體使用中,接口的用法和類很相似,雖然不能直接對(duì)接口使用new操作符,但是可以使用接口作為類型名。endprint

3.3 接口的多繼承

如圖1所示,一個(gè)接口允許同時(shí)繼承(extends)多個(gè)接口。多繼承使得多個(gè)接口規(guī)范能得到合并。程序的抽象結(jié)構(gòu)層次便能產(chǎn)生于此。而由于接口中的方法只是抽象的原型,所以避免了重定義父類方法和重復(fù)繼承的問題,在結(jié)構(gòu)上相對(duì)簡單[10]。

3.4 接口的應(yīng)用

接口在實(shí)際應(yīng)用中能夠?qū)︻惖奶卣鬟M(jìn)行一系列的描述。在Java中,接口也可以作為一個(gè)類使用,只是不能被new操作符直接聲明。在運(yùn)行程序時(shí),調(diào)用的方法屬于哪個(gè)類是在運(yùn)行的時(shí)候被決定,使方法能被動(dòng)態(tài)地調(diào)用。

4 垃圾回收機(jī)制(Garbage collection mechanism)

4.1 Java垃圾回收機(jī)制

4.1.1 垃圾回收的意義

Java的特色之一就是垃圾回收機(jī)制,這使得編程時(shí)令人頭痛的內(nèi)存管理問題得以解決,使得程序員的編程壓力大大減小[11]。垃圾回收機(jī)制在一個(gè)變量或?qū)ο蟮纳芷诮Y(jié)束后釋放它所占用的資源。垃圾回收機(jī)制可以有效地利用空閑的內(nèi)存,從而防止內(nèi)存的浪費(fèi)。由于現(xiàn)代計(jì)算機(jī)的性能不斷提高,現(xiàn)在進(jìn)行垃圾回收所需要的時(shí)間非常少,在這種情況下,就可以頻繁的對(duì)程序進(jìn)行垃圾回收。

4.1.2 垃圾回收方法

(1)finalize()方法

Java通過調(diào)用finalize()方法來回收垃圾,例如打開的URL、端口、文件等,但其只能由垃圾收集器被動(dòng)調(diào)用。

(2)System.gc()方法

如果想要在程序中主動(dòng)請(qǐng)求垃圾回收可以使用System.gc()方法。具體格式如下:

(3)主GC

之前所說的GC對(duì)系統(tǒng)的影響都非常小,但是主GC可以對(duì)系統(tǒng)產(chǎn)生較大的影響,所以它只能在特定的情況下才被觸發(fā)。觸發(fā)主GC的條件有兩個(gè):

(1)在應(yīng)用程序沒有運(yùn)行時(shí),即應(yīng)用線程都處于空閑狀態(tài)時(shí),GC會(huì)被調(diào)用。

(2)堆內(nèi)存不足時(shí),JVM會(huì)強(qiáng)制調(diào)用主GC來回收內(nèi)存[12]。

4.2 Python垃圾回收機(jī)制

簡潔作為Python的最重要特征,程序員同樣無須關(guān)心對(duì)象的內(nèi)存分配和釋放等原理,取而代之的由Python解釋器負(fù)責(zé),是一種自動(dòng)回收內(nèi)存資源的技術(shù)。最簡單的GC算法就是引用計(jì)數(shù),一種效率不高的實(shí)現(xiàn)算法,意味著在每次內(nèi)存對(duì)象被引用或引用被銷毀的時(shí)候都必須修改引用計(jì)數(shù),極大的影響性能。未來的Python解釋器也許會(huì)采用更高效的方法來實(shí)現(xiàn)垃圾收集[13]。

5 Java內(nèi)存管理(Java memory management)

5.1 Java內(nèi)存概況

在Java中,內(nèi)存是通過new分配給對(duì)象。例如:object obj=new object()而且在程序?qū)嶋H運(yùn)行的過程中,每個(gè)對(duì)象所擁有的內(nèi)存也是動(dòng)態(tài)的。上文提到的垃圾處理機(jī)制是JAVA的一個(gè)顯著的特色機(jī)制,它能使系統(tǒng)資源得到充分的利用,同時(shí)也防止了由程序員錯(cuò)誤操作引起的故障。垃圾回收機(jī)制有效地防止了內(nèi)存的浪費(fèi),大大降低了編程的煩瑣度,避免了內(nèi)存分配不均導(dǎo)致的系統(tǒng)崩潰。

5.2 Java內(nèi)存結(jié)構(gòu)

如圖2所示,Java內(nèi)存主要分為四個(gè)部分:堆、棧、方法區(qū)和程序計(jì)數(shù)器。其中方法區(qū)和堆是用于給進(jìn)程分配空間,也是所有線程共享的。而棧和程序計(jì)數(shù)器是分配資源給每一個(gè)獨(dú)立的線程。

(1)方法區(qū)

這是線程共享的區(qū)域,通常來說這個(gè)區(qū)域很少出現(xiàn)垃圾收集行為。若出現(xiàn)內(nèi)存已滿不足以進(jìn)行新的內(nèi)存分配時(shí),程序?qū)?huì)拋出OutOfMemoryError異常。

(2)堆

堆用于給進(jìn)程分配空間使用,是垃圾回收處理的主要區(qū)域。從內(nèi)存分配上來說,Java堆可以分成多個(gè)線程獨(dú)有的分配緩沖區(qū),但是這些緩沖區(qū)存放的內(nèi)容都是線程中的對(duì)象實(shí)例,之所以細(xì)分成獨(dú)立的區(qū)域是為了更快的分配和回收。如果Java堆不能進(jìn)行內(nèi)存擴(kuò)展,將會(huì)拋出OutOfMemoryError異常。

(3)程序計(jì)數(shù)器

程序計(jì)數(shù)器分配給每一個(gè)獨(dú)立的線程,作為當(dāng)前線程所運(yùn)行的字節(jié)碼的指示器。在線程執(zhí)行方法時(shí),程序計(jì)數(shù)器將指向運(yùn)行代碼的地址。

(4)棧

棧也是分配給每個(gè)線程的內(nèi)存空間,它描述的是每個(gè)Java方法執(zhí)行時(shí)調(diào)用內(nèi)存的過程。??赡軖伋鯯tackOverflowError和OutOfMemoryError兩種異常[14]。

6 結(jié)論(Conclusion)

本文對(duì)基于面向?qū)ο缶幊痰腏ava與Python進(jìn)行了基本特征研究,在介紹OOP的三個(gè)基本特征繼承、封裝和多態(tài)時(shí)引入了靜態(tài)語言和動(dòng)態(tài)語言的概念,在討論多繼承時(shí)通過接口的引入解決了java單繼承的局限性,實(shí)現(xiàn)了類的多繼承。同時(shí)對(duì)Java的垃圾回收機(jī)制進(jìn)行了詳細(xì)解析,并與Python進(jìn)行了對(duì)比。最后介紹了Java的內(nèi)存管理模塊。本文旨在讓讀者了解基本的面向?qū)ο缶幊痰奶卣?,熟悉兩種代表性的語言Java和Python,為今后的編程打下良好的基礎(chǔ)。

參考文獻(xiàn)(References)

[1] 張豐,等.面向?qū)ο蟮牡丶畷r(shí)空過程表達(dá)與數(shù)據(jù)更新模型研究[J].測繪學(xué)報(bào),2010,39(03):303-309.

[2] Deshpande S.Collaboration of Object Oriented Programming and Software Development[J].International Research Journal of Engineering and Technology(IRJET),2016,03(09):524-527.

[3] 余雙雙,等.基于UML模型的多態(tài)性與Java接口代碼信息一致性檢測的方法[J].計(jì)算機(jī)應(yīng)用與軟件,2017,34(02):8-13;47.endprint

[4] 黎海生.Java語言中的繼承與多態(tài)[J].科技廣場,2008(05):231-232.

[5] 錢宇虹.基于Java平臺(tái)的多語言混合編程[J].軟件工程師,2014(11):39-41.

[6] Burton E,Sekerinski E.An Object Model for Dynamic Mixins[D].Computer Languages,Systems & Structures,2017.

[7] Burton E,Sekerinski E.An object model for a dynamic mixin based language[C].Proceedings of the 31st Annual ACM Symposium on Applied Computing.ACM,2016:1986-1992.

[8] 楊曉霞,候銳鋒.VisualC#.NET,DELPHI,JAVA與MATLAB接口技術(shù)的研究[J].云南大學(xué)學(xué)報(bào)(自然科學(xué)版),2008,30(S2):

247-249.

[9] 姜慧霖,喬麗.淺析C++和Java的繼承機(jī)制[J].開封大學(xué)學(xué)報(bào),2005(03):85-87.

[10] Kramer S.A modularity bug in Java 8[J].arXiv preprint arXiv:1701.02189,2017.

[11] 張衛(wèi).綜述java運(yùn)行中垃圾回收機(jī)制[J].數(shù)字技術(shù)與應(yīng)用,2017(02):231.

[12] 池?zé)槼?Java垃圾收集的機(jī)制及調(diào)優(yōu)[J].計(jì)算機(jī)應(yīng)用研究,2004(03):144-148.

[13] 郭芬,劉明.Python垃圾收集器原理研究及應(yīng)用[J].信息技術(shù),2009(07):93-97.

[14] Dietrich J,Jezek K,Brada P.What Java developers know about compatibility,and why this matters[J].Empirical Software Engineering,2016,21(3):1371-1396.

作者簡介:

韓宏峰(1996-),男,本科生.研究領(lǐng)域:物聯(lián)網(wǎng)工程,編程語言,人工智能,區(qū)塊鏈.

馮 石(1994-),男,本科生.研究領(lǐng)域:物聯(lián)網(wǎng)工程.

羅羿隆(1996-),男,本科生.研究領(lǐng)域:物聯(lián)網(wǎng)工程.endprint

主站蜘蛛池模板: 国产成人亚洲精品无码电影| 夜色爽爽影院18禁妓女影院| 亚洲男人天堂久久| 国产视频欧美| 午夜啪啪网| 亚洲日韩精品欧美中文字幕| 亚洲国产看片基地久久1024| 国产乱子伦视频三区| 欧美色视频在线| 精品国产污污免费网站| 欧美色视频在线| 99re精彩视频| 亚洲精品无码日韩国产不卡| 国产在线观看一区二区三区| 香蕉视频在线观看www| 亚洲国内精品自在自线官| 成人毛片在线播放| 99视频在线免费| 亚洲日本中文综合在线| 国产成人精品一区二区三在线观看| 国产99精品久久| 高h视频在线| 亚洲人网站| 国产99在线| 最新日韩AV网址在线观看| 最新国产网站| 在线高清亚洲精品二区| 国产一区二区人大臿蕉香蕉| 久久伊人久久亚洲综合| 国产一区二区精品高清在线观看| 夜夜操国产| 日本一区高清| 91免费片| 91免费观看视频| 精品国产免费第一区二区三区日韩| 国产成人成人一区二区| 亚洲日韩Av中文字幕无码| 伊人婷婷色香五月综合缴缴情| 日韩专区欧美| 91亚洲国产视频| 91视频青青草| 88av在线播放| 1024你懂的国产精品| 国产精品99r8在线观看| 五月婷婷亚洲综合| 国产欧美日韩18| 久久性视频| 国产亚洲精| 久久黄色毛片| 亚洲中文字幕av无码区| 亚洲综合极品香蕉久久网| 欧美精品1区| 久久精品亚洲中文字幕乱码| 亚洲精品视频在线观看视频| 中国黄色一级视频| 国产人免费人成免费视频| 99这里精品| 强乱中文字幕在线播放不卡| 亚洲床戏一区| 婷婷伊人五月| 欧美成人第一页| 99精品热视频这里只有精品7| 国产超碰在线观看| 久久伊人色| 国产欧美视频在线观看| 狠狠亚洲五月天| 国产swag在线观看| 丝袜亚洲综合| 亚洲精选无码久久久| 午夜精品福利影院| 丝袜亚洲综合| 国产在线观看第二页| 国产一区二区三区在线观看视频| 国产精品男人的天堂| 国内精品一区二区在线观看| 国产白浆在线| 国产永久免费视频m3u8| 国产特级毛片aaaaaaa高清| 色婷婷色丁香| 日本午夜网站| 亚洲黄色激情网站| 日韩一级二级三级|