亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇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)師范高等??茖W(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ì)列或者寫(xiě)一個(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í)方法
        可能是方法不對(duì)
        3D打印中的模型分割與打包
        用對(duì)方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        FLUKA幾何模型到CAD幾何模型轉(zhuǎn)換方法初步研究
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        賺錢方法
        中文字幕亚洲综合久久综合| 国产精品乱一区二区三区| 亚洲精品国产不卡在线观看| 香蕉蜜桃av一区二区三区| 久久精品一区午夜视频| 天堂а√在线最新版中文在线| 亚洲日韩欧美一区二区三区| 四虎国产精品成人影院| 日韩在线不卡一区三区av| 加勒比hezyo黑人专区| 久久免费的精品国产v∧| 日韩av一区二区三区四区av| 日本美女性亚洲精品黄色| 丰满人妻一区二区三区视频| 又粗又粗又黄又硬又深色的| 国产成人精品自在线无码| 色婷婷综合一区二区精品久久| 水蜜桃精品视频在线观看| 国产乱国产乱老熟300部视频 | 欧美性猛交xxxx乱大交蜜桃| 日本最新一区二区三区视频 | 国产乱对白刺激视频| 玩两个丰满老熟女| 国产精品涩涩涩一区二区三区免费| 午夜视频一区二区三区四区| 一本一道av无码中文字幕麻豆| 中国精学生妹品射精久久| 国产伪娘人妖在线观看| 中文字幕国产亚洲一区| 中文字幕丰满乱子无码视频| 九九在线视频| 日本一区二区高清视频| 成熟了的熟妇毛茸茸| 中文字幕熟妇人妻在线视频| 久久久高清免费视频| 在线中文字幕一区二区| 久久久久国产综合av天堂| 亚洲国产美女精品久久| 一区二区亚洲精美视频| 永久免费毛片在线播放| 亚洲国产成人va在线观看天堂|