鎮(zhèn)濤 武昌職業(yè)學(xué)院
在面向?qū)ο笳Z(yǔ)言程序中,對(duì)象是基本單元,是類(lèi)的實(shí)例。面向?qū)ο笳Z(yǔ)言具有獨(dú)特的數(shù)據(jù)結(jié)構(gòu)--封裝數(shù)據(jù)細(xì)節(jié)與代碼以構(gòu)成類(lèi)--極大提升了軟件程序靈活性、擴(kuò)展性以及重用性。近年來(lái),這三種特性得到廣泛推廣,Java 這一完全面向?qū)ο蟮木幊陶Z(yǔ)言也成為研究熱點(diǎn)。該語(yǔ)言具有強(qiáng)大可移植性,但是隨著項(xiàng)目規(guī)模的不斷擴(kuò)大,程序漏洞、可讀性低等問(wèn)題也頻繁發(fā)生。復(fù)雜網(wǎng)絡(luò)理論的引入有助于構(gòu)建程序網(wǎng)絡(luò),提升Java 程序質(zhì)量以及軟件生產(chǎn)效率?;趶?fù)雜網(wǎng)絡(luò)理論的程序分析既全面又能正確定位程序漏洞,能夠幫助程序開(kāi)發(fā)者有效治理漏洞。
當(dāng)前,大型系統(tǒng)常用的程序設(shè)計(jì)開(kāi)發(fā)方法是面向?qū)ο蟪绦蛟O(shè)計(jì)。面向?qū)ο蠼Y(jié)構(gòu)化設(shè)計(jì)具有封裝性、繼承性、多態(tài)性三大基本特性。其中封裝性是指將邏輯和數(shù)據(jù)操作的程序封裝起來(lái),服務(wù)供應(yīng)商隱藏服務(wù)細(xì)節(jié),用戶(hù)只需要了解輸出的結(jié)果而不用知道數(shù)據(jù)具體的運(yùn)算、讀取過(guò)程。封裝是一個(gè)“黑匣子”,保護(hù)對(duì)象內(nèi)部實(shí)現(xiàn)過(guò)程,防止內(nèi)部結(jié)構(gòu)被篡改,有效保障軟件安全。繼承性是指子類(lèi)繼承父類(lèi)的屬性和方法,繼承關(guān)系使得軟件結(jié)構(gòu)更為清晰,提高代碼可重復(fù)利用率,極大減輕軟件開(kāi)發(fā)人員的工作壓力。多態(tài)性則是方法的重載、重寫(xiě)與動(dòng)態(tài)連接,不同的類(lèi)對(duì)象可以響應(yīng)同一個(gè)信息。多態(tài)機(jī)制能夠極大降低信息冗余量,消除不同類(lèi)相互影響作用的關(guān)系,提升軟件可擴(kuò)充性與可替換性。
面向?qū)ο蟮念?lèi)有聚合、組合、泛化、依賴(lài)以及關(guān)聯(lián)五種關(guān)系。其中,泛化的表現(xiàn)方式有繼承關(guān)系與實(shí)現(xiàn)關(guān)系,其本質(zhì)為參數(shù)化類(lèi)型;關(guān)聯(lián)體現(xiàn)在類(lèi)與接口、類(lèi)與類(lèi)之間,不同類(lèi)的對(duì)象之間發(fā)生訪(fǎng)問(wèn),實(shí)例就具備對(duì)應(yīng)關(guān)系,對(duì)象則產(chǎn)生了關(guān)聯(lián)。關(guān)聯(lián)關(guān)系具有方向性、長(zhǎng)期性以及平等性的特點(diǎn);聚合反映整體與部分關(guān)系,是更強(qiáng)的關(guān)聯(lián)關(guān)系,涉及不同層次不同類(lèi)之間的關(guān)系;組合屬于關(guān)聯(lián)特例之一,又稱(chēng)為強(qiáng)聚合。組合關(guān)系中整體與部分不可分割,兩者生命周期一致;依賴(lài)則是描述彼此獨(dú)立的兩個(gè)對(duì)象之間的使用關(guān)系,具有臨時(shí)性與偶然性。
軟件網(wǎng)絡(luò)社區(qū)結(jié)構(gòu)的各個(gè)節(jié)點(diǎn)之間相互作用復(fù)雜,這種作用的相關(guān)性有所不同,即各節(jié)點(diǎn)之間有不同的關(guān)聯(lián)度。不同的關(guān)聯(lián)度便于對(duì)社區(qū)結(jié)構(gòu)進(jìn)行劃分。為了評(píng)估復(fù)雜網(wǎng)絡(luò)的準(zhǔn)確性,研究人員抽象出復(fù)雜網(wǎng)絡(luò)的共性,制定了統(tǒng)一的復(fù)雜網(wǎng)絡(luò)參數(shù)衡量機(jī)制,基本參數(shù)有:(1)聚集系數(shù),節(jié)點(diǎn)聚集系數(shù)反映相鄰節(jié)點(diǎn)聯(lián)系的緊密度,由此可推出網(wǎng)絡(luò)的聚集系數(shù),節(jié)點(diǎn)聚集系數(shù)與其重要程度成反比;(2)平均路徑長(zhǎng)度,也是反映各節(jié)點(diǎn)之間緊密聯(lián)系的程度的參數(shù);(3)節(jié)點(diǎn)介數(shù),是指網(wǎng)絡(luò)中經(jīng)過(guò)某一節(jié)點(diǎn)最短路徑的數(shù)量,反映了傳遞信息過(guò)程中該節(jié)點(diǎn)的中樞特性,介數(shù)的算法較為復(fù)雜,既要計(jì)算不同節(jié)點(diǎn)之間的最短路徑還要將最短路徑存儲(chǔ)起來(lái);(4)網(wǎng)絡(luò)效率,指各節(jié)點(diǎn)之間最短路徑距離倒數(shù)總和的平均值,主要用于解決節(jié)點(diǎn)連接不暢時(shí)平均路徑長(zhǎng)度無(wú)限大的問(wèn)題。
在研究復(fù)雜網(wǎng)絡(luò)理論時(shí),網(wǎng)絡(luò)性質(zhì)、網(wǎng)絡(luò)模型、網(wǎng)絡(luò)行為以及網(wǎng)絡(luò)性能是四項(xiàng)主要研究的內(nèi)容。研究人員認(rèn)為將Java 軟件視為程序網(wǎng)絡(luò),通過(guò)分析其網(wǎng)絡(luò)性質(zhì)以呈現(xiàn)軟件結(jié)構(gòu)特征,并利用網(wǎng)絡(luò)模型定量、定性計(jì)算這些特征,計(jì)算結(jié)果可以作為網(wǎng)絡(luò)行為分析的依據(jù),進(jìn)而設(shè)計(jì)優(yōu)化網(wǎng)絡(luò)性能的方案。
2.1.1 圖的基本概念
圖,是用以表示物體之間關(guān)系的一種方式。在圖中,一個(gè)物體是一個(gè)節(jié)點(diǎn),兩個(gè)節(jié)點(diǎn)的關(guān)系則是一條邊,連接該節(jié)點(diǎn)的邊數(shù)既是節(jié)點(diǎn)的度,由其他節(jié)點(diǎn)指向該節(jié)點(diǎn)的邊的數(shù)量即是輸入度,由該節(jié)點(diǎn)指出的邊的數(shù)量即是輸出度。同時(shí),圖又包含有向圖和無(wú)向圖,前者是指節(jié)點(diǎn)對(duì)之間的邊具有指向性,如類(lèi)的調(diào)用關(guān)系;后者則是指代表節(jié)點(diǎn)關(guān)系的邊不具有指向性。此外,加權(quán)圖的定義是網(wǎng)絡(luò)圖中每條邊具有不同的權(quán)重,權(quán)重是相似度、重要性、依賴(lài)度等的代表。方向與加權(quán)是維度不同的兩個(gè)參數(shù)。因而,圖主要有四種分類(lèi):加權(quán)有向圖、加權(quán)無(wú)向圖、無(wú)權(quán)有向圖、無(wú)權(quán)無(wú)向圖。
2.1.2 圖的計(jì)算機(jī)表達(dá)
通常,圖結(jié)構(gòu)是由計(jì)算機(jī)計(jì)算而來(lái),其主要表示方法有鄰接矩陣與鄰接表。Java 軟件網(wǎng)絡(luò)圖算法的實(shí)現(xiàn)就是通過(guò)應(yīng)用鄰接矩陣的圖結(jié)構(gòu),并在此基礎(chǔ)上對(duì)其網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行分析。在圖算法中,用鄰接矩陣表示圖G 為A=(aij)n*n(即n 階矩陣),以解決網(wǎng)絡(luò)結(jié)構(gòu)的數(shù)據(jù)存儲(chǔ)問(wèn)題。
構(gòu)建Java 軟件結(jié)構(gòu)模型涉及以下內(nèi)容:其一,程序的反編譯,即轉(zhuǎn)換語(yǔ)言的過(guò)程,可以實(shí)現(xiàn)機(jī)器語(yǔ)言編寫(xiě)的程序轉(zhuǎn)變?yōu)楦呒?jí)語(yǔ)言程序。作為8 字節(jié)流文件,.class 文件能夠?yàn)镴ava 提供獨(dú)立的二進(jìn)制服務(wù)。通常,.class 文件不可讀、不可修改,需要利用Java 反編譯工具javap.exe 將其發(fā)編譯為可提取字節(jié)碼信息的.txt 文件,反編譯前后的代碼差異甚小。
其二,代碼的靜態(tài)分析,在編寫(xiě)程序時(shí)即對(duì)代碼做靜態(tài)分析能夠?yàn)槌绦蚝罄m(xù)的測(cè)試工作提供極大便利。研究表明,靜態(tài)分析代碼能夠及時(shí)檢測(cè)并修復(fù)30%~70%的代碼錯(cuò)誤。應(yīng)用Java 靜態(tài)分析代碼工具可以有效定位出錯(cuò)代碼的位置,提高軟件開(kāi)發(fā)效率與安全性。
其三,構(gòu)建復(fù)雜網(wǎng)絡(luò)模型,構(gòu)建流程主要包含查找JDL安裝目錄、jar 文件解壓、遍歷.class 文件、反編譯、提取依賴(lài)關(guān)系、類(lèi)結(jié)構(gòu)解析、集合類(lèi)節(jié)點(diǎn)等。
小世界與無(wú)標(biāo)度特性的發(fā)現(xiàn)推動(dòng)復(fù)雜網(wǎng)絡(luò)研究領(lǐng)域?qū)崿F(xiàn)進(jìn)一步的發(fā)展。由上文可知,網(wǎng)絡(luò)結(jié)構(gòu)的必要元素包含節(jié)點(diǎn)與邊,對(duì)小世界與無(wú)標(biāo)度網(wǎng)絡(luò)模型的深度研究便是基于研究各個(gè)節(jié)點(diǎn)與邊的性質(zhì)。
小世界網(wǎng)絡(luò)模型的構(gòu)建是以平均路徑長(zhǎng)度、聚類(lèi)系數(shù)、度分布等性質(zhì)為基礎(chǔ)。當(dāng)節(jié)點(diǎn)數(shù)相同時(shí),兩個(gè)網(wǎng)絡(luò)的輸出度與輸入度平均值則相同,邊的數(shù)量也相同,這時(shí),區(qū)分兩者就得依據(jù)節(jié)點(diǎn)度的大小,度為n 的節(jié)點(diǎn)數(shù)占整個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)的比例則是該網(wǎng)絡(luò)結(jié)構(gòu)的特有性質(zhì)。小世界網(wǎng)絡(luò)度分布分為離散型與連續(xù)型兩種形式,前者的典型是泊松分布與二項(xiàng)分布,后者有正態(tài)分布。但研究表明,在實(shí)際網(wǎng)絡(luò)中,長(zhǎng)尾分布是度的主要分布形式。
長(zhǎng)尾分布是指網(wǎng)絡(luò)結(jié)構(gòu)的節(jié)點(diǎn)度分布不具備統(tǒng)一性,在坐標(biāo)中難以用均勻刻度表示。因而,長(zhǎng)尾分布又被成為無(wú)標(biāo)度分布,具有這一度分布性質(zhì)的即是無(wú)標(biāo)度網(wǎng)絡(luò)模型。研究表明,長(zhǎng)尾分布主要就是冪律分布,因此判斷網(wǎng)絡(luò)結(jié)構(gòu)是否具有無(wú)標(biāo)度性質(zhì),應(yīng)先證明其是否符合冪律分布。
通過(guò)分析度分布、聚集系數(shù)、平均路徑長(zhǎng)度可知,Java 軟件網(wǎng)絡(luò)結(jié)構(gòu)具備無(wú)標(biāo)度和小世界性質(zhì)。