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

基于反射機(jī)制的數(shù)據(jù)流Java多態(tài)性實(shí)現(xiàn)及研究

2010-08-23 08:33:42曹大有
制造業(yè)自動(dòng)化 2010年13期
關(guān)鍵詞:方法模型

曹大有

CAO Da-you

(鄖陽(yáng)師范高等專科學(xué)校 計(jì)算機(jī)科學(xué)系,丹江口 442700)

1 數(shù)據(jù)流Java 程序設(shè)計(jì)模型[3]

1.1 傳統(tǒng)數(shù)據(jù)流模型

數(shù)據(jù)流模型很早就被提了出來(lái),一般一個(gè)數(shù)據(jù)流程序由多個(gè)actor 組成。傳統(tǒng)的細(xì)粒度數(shù)據(jù)流模型中,actor 的粒度是一個(gè)操作,而在粗粒度的數(shù)據(jù)流模型中,actor 的粒度可以是一個(gè)函數(shù)。actor 之間只能通過(guò)先入先出的緩沖隊(duì)列進(jìn)行通信。每個(gè)actor有一個(gè)相應(yīng)的觸發(fā)規(guī)則(firing rule)集合,當(dāng)其中某一規(guī)則滿足時(shí),該actor被觸發(fā),讀取輸入隊(duì)列上的數(shù)據(jù),產(chǎn)生輸出數(shù)據(jù)。actor 是沒(méi)有內(nèi)部狀態(tài)的,它的行為只由輸入數(shù)據(jù)和觸發(fā)規(guī)則決定。類似的模型還有進(jìn)程網(wǎng)絡(luò)(process network)。每個(gè)進(jìn)程是一小段串行程序,進(jìn)程之間只能通過(guò)先入先出的緩沖隊(duì)列進(jìn)行同步和通信。當(dāng)一個(gè)進(jìn)程讀一個(gè)空隊(duì)列或者寫一個(gè)滿隊(duì)列時(shí),它會(huì)被阻塞,直到操作完成。

1.2 數(shù)據(jù)流Java[1,3]

在數(shù)據(jù)流和進(jìn)程網(wǎng)絡(luò)模型中,各個(gè)運(yùn)行單元之間的同步和通信是通過(guò)顯式的數(shù)據(jù)傳遞來(lái)完成的。由于禁止了運(yùn)行單元之間的隱式數(shù)據(jù)共享,避免了多線程模型的數(shù)據(jù)競(jìng)爭(zhēng)和沖突,有利于程序的形式化分析和驗(yàn)證。數(shù)據(jù)流模型能夠幫助程序員自然地表達(dá)應(yīng)用程序的內(nèi)部并行性,減少編譯器并行化分析和優(yōu)化的難度。

數(shù)據(jù)流Java中最小的獨(dú)立運(yùn)行的單元叫做組件(component),它對(duì)應(yīng)于我們通常的進(jìn)程或線程。組件內(nèi)只能串行執(zhí)行。一個(gè)數(shù)據(jù)流 Java 程序可以擁有多個(gè)組件,各個(gè)組件之間可以獨(dú)立運(yùn)行。

組件可以定義自己的輸入和輸出端口(port),用于和外部通信。組件之間的顯式數(shù)據(jù)通信只能通過(guò)輸入和輸出端口之間進(jìn)行。通信時(shí)數(shù)據(jù)對(duì)象的發(fā)送和接收是異步的、先入先出的。當(dāng)某個(gè)組件通過(guò)一個(gè)輸出端口對(duì)多個(gè)組件的普通輸入端口發(fā)送數(shù)據(jù)對(duì)象時(shí),可以有兩種發(fā)送方式:將數(shù)據(jù)對(duì)象復(fù)制多個(gè)副本后發(fā)送到所有組件;或者以輪轉(zhuǎn)方式依次發(fā)送。如果是對(duì)多個(gè)組件的參數(shù)端口發(fā)送數(shù)據(jù)對(duì)象,那么也可以有兩種方式:將數(shù)據(jù)對(duì)象的引用發(fā)送給所有組件共享;或者以復(fù)制的方式發(fā)送。數(shù)據(jù)流 Java 采用隱式多線程模型,程序員需要知道組件運(yùn)行時(shí)可能有多個(gè)副本同時(shí)運(yùn)行。如果訪問(wèn)參數(shù)端口傳遞的共享的數(shù)據(jù)對(duì)象,則需要保證操作是原子的。

2 基于反射機(jī)制的數(shù)據(jù)流Java多態(tài)性實(shí)現(xiàn)

反射是指一個(gè)系統(tǒng)表述和改變自身行為的能力[2],反射機(jī)制允許程序運(yùn)行時(shí)動(dòng)態(tài)地加載一個(gè)類,生成該對(duì)象的實(shí)例和調(diào)用該實(shí)例的方法。下面我們就以數(shù)據(jù)流多態(tài)例,利用Java提供的反射機(jī)制來(lái)實(shí)現(xiàn)數(shù)據(jù)流Java的多態(tài)性。

設(shè)計(jì)出Java的類Shape、Rectangle和Triangle。然后針對(duì)類繼承體系中的每一個(gè)類設(shè)計(jì)出對(duì)應(yīng)的數(shù)據(jù)流Java的組件類,以類Rectangle為例,對(duì)應(yīng)的數(shù)據(jù)流Java的組件類為:

下面我們就要來(lái)研究如何利用Java語(yǔ)言提供的反射機(jī)制來(lái)實(shí)現(xiàn)數(shù)據(jù)流Java多態(tài)性的組件類,該組件類類名我們就命名為PolymorphismComponent。由于在該類體系中每個(gè)類只有一個(gè)構(gòu)造方法且該構(gòu)造方法有兩個(gè)double型的參數(shù),所以對(duì)組件類PolymorphismComponent的輸入?yún)?shù)類型設(shè)為形如"12.3,45.6,Shape"的String類型,其中12.3,45.6為構(gòu)造方法提供參數(shù),Shape為具體類名。

在組件類PolymorphismComponent的execute()方法中,首先通過(guò)輸入端口的receive()方法接收數(shù)據(jù),然后分離出需要?jiǎng)討B(tài)加載的類名classStr,再通過(guò)以下過(guò)程:

來(lái)動(dòng)態(tài)生成對(duì)象obj,其中parts[0]和parts[1]為構(gòu)造方法的參數(shù).對(duì)象obj生成后,再通過(guò)以下條件語(yǔ)句進(jìn)行數(shù)據(jù)的發(fā)送:

上面的條件語(yǔ)句實(shí)際上是在組件類PolymorphismComponent中維護(hù)了一個(gè)稱之為分派樹(shù)(dispatch tree)的數(shù)據(jù)結(jié)構(gòu),分派樹(shù)在運(yùn)行時(shí)構(gòu)建網(wǎng)絡(luò)的時(shí)候創(chuàng)建。輸入端口類型必須是輸出端口類型本身或者其子類,一個(gè)類型只允許有一個(gè)端口。運(yùn)行時(shí),系統(tǒng)根據(jù)類的層次關(guān)系建立一個(gè)反向的樹(shù)結(jié)構(gòu)。樹(shù)的每個(gè)節(jié)點(diǎn)記錄它的類型和對(duì)應(yīng)的出口。輸出端口在發(fā)送數(shù)據(jù)對(duì)象時(shí),根據(jù)分派樹(shù)從上向下進(jìn)行匹配,然后向匹配的端口進(jìn)行發(fā)送。這樣該組件類的主要邏輯就設(shè)計(jì)好了,至于一個(gè)輸入端口可在@InPort()中設(shè)計(jì)完成,多個(gè)輸出端口可在@OutPorts()中設(shè)計(jì)完成,最后通過(guò)方法openPorts()打開(kāi)即可。

測(cè)試工作可在Network類的define()方法中完成.先用component()方法給組件類命名:

然后用connect()方法進(jìn)行組件類之間的連接:

最后用initialize()方法給組件類Polymorphism Component提供初始參數(shù):

由于初始參數(shù)中指定的類名為Shape,所以輸出的是Shape的面積;當(dāng)將類名換為Rectangle,輸出的是Rectangle的面積;當(dāng)將類名換為Triangle,輸出的是Triangle的面積.

若現(xiàn)在要增設(shè)Circle類,只需為Circle類開(kāi)發(fā)一個(gè)對(duì)應(yīng)的組件類Circle Component,然后在Network類的define()方法中加上以下語(yǔ)句即可:

再在由條件語(yǔ)句組成的稱之為分派樹(shù)的數(shù)據(jù)結(jié)構(gòu)加上對(duì)Circle類對(duì)象實(shí)例的判斷即可,這樣當(dāng)將initialize()方法中的類名換為Circle,輸出的是Circle的面積。

3 結(jié)束語(yǔ)

本文通過(guò)Java語(yǔ)言提供的反射機(jī)制和類動(dòng)態(tài)加載機(jī)制實(shí)現(xiàn)了數(shù)據(jù)流Java多態(tài)性的并行程序設(shè)計(jì)模型,并通過(guò)實(shí)例對(duì)該模型進(jìn)行了驗(yàn)證.從實(shí)現(xiàn)的過(guò)程中可以看出:該過(guò)程具有一定的通用性和實(shí)用性,有利于數(shù)據(jù)流Java程序的并行性和模塊化.實(shí)現(xiàn)的重點(diǎn)是稱之為分派樹(shù)的數(shù)據(jù)結(jié)構(gòu).

[1]劉弢,范彬,吳承勇,張兆慶.數(shù)據(jù)流 Java 并行程序設(shè)計(jì)模型的設(shè)計(jì)、實(shí)現(xiàn)及運(yùn)行時(shí)優(yōu)化[J].軟件學(xué)報(bào),2009,19(9):2184-2185.

[2]程峰,黃若波,章恒翀.Java2核心技術(shù)卷I:基礎(chǔ)知識(shí)[M].北京:機(jī)械工業(yè)出版社,2004:158-190.

[3]Flow·based programming[EB/OL].http://www.Jpaulmorrison.corn/fbp/.

猜你喜歡
方法模型
一半模型
重要模型『一線三等角』
重尾非線性自回歸模型自加權(quán)M-估計(jì)的漸近分布
學(xué)習(xí)方法
3D打印中的模型分割與打包
用對(duì)方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
FLUKA幾何模型到CAD幾何模型轉(zhuǎn)換方法初步研究
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚(yú)
主站蜘蛛池模板: 韩国自拍偷自拍亚洲精品| 国产成人永久免费视频| 午夜不卡视频| 一本色道久久88综合日韩精品| 国产精品一线天| 在线观看免费国产| 久久一日本道色综合久久| 最新精品国偷自产在线| 国产精品亚洲va在线观看| 国产麻豆va精品视频| 欧美国产日韩在线| 激情综合网址| 精品少妇三级亚洲| 亚洲天堂网2014| 亚洲床戏一区| 亚洲婷婷在线视频| 91久久偷偷做嫩草影院| 99热国产在线精品99| 免费AV在线播放观看18禁强制| 日本免费a视频| 亚洲天堂首页| 亚洲国产亚洲综合在线尤物| 一级黄色欧美| 欧美国产在线看| 91久久夜色精品国产网站 | 露脸一二三区国语对白| 中文字幕人成人乱码亚洲电影| 日韩精品久久无码中文字幕色欲| 国产成人久视频免费| 久久女人网| 久久亚洲国产最新网站| 一级成人a做片免费| 成人字幕网视频在线观看| 亚洲最猛黑人xxxx黑人猛交| 国产黄在线观看| AV不卡在线永久免费观看| 国禁国产you女视频网站| www.91中文字幕| 在线观看视频一区二区| 久久综合九九亚洲一区| 亚洲色图欧美在线| 黄色成年视频| 午夜毛片免费观看视频 | 最新精品久久精品| 国产在线视频二区| 国产污视频在线观看| 亚洲成av人无码综合在线观看| 国产va视频| 18禁色诱爆乳网站| 97国产精品视频自在拍| 夜夜操狠狠操| 欧美一级视频免费| 久久综合伊人77777| 免费在线不卡视频| 美女视频黄频a免费高清不卡| AV熟女乱| 国产福利免费视频| 亚洲欧美日韩动漫| 亚洲成综合人影院在院播放| 国产精品成人不卡在线观看| 乱色熟女综合一区二区| 欧美成人午夜影院| 国产在线观看精品| 精品自窥自偷在线看| 日本午夜影院| 国产拍在线| 国产黄色片在线看| 一区二区欧美日韩高清免费| 久久香蕉国产线看观看式| 99久久精品久久久久久婷婷| 亚洲,国产,日韩,综合一区| 影音先锋丝袜制服| 久久综合色播五月男人的天堂| 国产一级妓女av网站| 久久精品嫩草研究院| 人妖无码第一页| 视频二区亚洲精品| 国产久操视频| 在线精品欧美日韩| 亚洲精品国产综合99| 精品久久综合1区2区3区激情| 国产激情无码一区二区免费|