freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

面向方面的實時系統(tǒng)開發(fā)方法碩士學位終稿畢業(yè)論文-在線瀏覽

2024-08-08 23:07本頁面
  

【正文】 Work 51Bibliography 53Publications During Master39。當前,面向?qū)ο缶幊蹋∣OP)[1]和基于組件的軟件開發(fā)得到了廣泛的使用,面向?qū)ο蠹夹g(shù)能夠很好地將現(xiàn)實世界領(lǐng)域中的實體和它的行為建模為抽象的對象。確實,OOP表明了它處理復雜問題的能力,但是OOP無法模塊化橫切(crosscut)整個系統(tǒng)的關(guān)注點(concern),這些關(guān)注點稱為橫切關(guān)注點(crosscutting concerns),如時間要求、安全、QoS監(jiān)測、日志等等。這樣降低了程序的可理解性、適應(yīng)性、可維護性和可復用性。其它解決方法如行為型設(shè)計模式也是由基本類控制操作邏輯,面向特定領(lǐng)域的解決方式(如框架)僅提供這個領(lǐng)域的處理關(guān)注點的方式,所以屬于這個領(lǐng)域外的關(guān)注點需要特殊處理。這樣開發(fā)功能模塊時無需要考慮非功能需求,在功能模塊里不出現(xiàn)非功能代碼;各個非功能模塊也單獨實現(xiàn)。系統(tǒng)信息主要描述了在何處非功能模塊影響其他模塊的結(jié)構(gòu)和行為,有的方法將這些信息包含在非功能模塊里,有的方法將這些信息放在配置文件內(nèi)。并且當需求改變后,只需修改受影響的模塊,而這些模塊往往只在一處出現(xiàn),這樣避免了在整個程序內(nèi)修改。面向方面編程將關(guān)注點實現(xiàn)為分離的方面,然而實現(xiàn)僅僅是軟件開發(fā)過程中的一個階段。這些研究主要集中在如何擴展UML[3]使其支持面向方面技術(shù)。實時嵌入式設(shè)備被廣泛使用在現(xiàn)代生活中,實時控制系統(tǒng)是現(xiàn)代化生產(chǎn)的保證,復雜的實時系統(tǒng)在國防現(xiàn)代化建設(shè)中發(fā)揮越來越重要的作用。實時系統(tǒng)是面向方面很好的應(yīng)用場所,因為在實時系統(tǒng)中,有很多非功能需求,且這些非功能需求往往橫切整個系統(tǒng)。實時系統(tǒng)的一個重要特點就是要求系統(tǒng)具有可預(yù)報性,要判斷是否調(diào)度是可行的,這需要收集系統(tǒng)當前信息和QoS信息,追蹤系統(tǒng)執(zhí)行情況,這些代碼也混在功能部件里。但是系統(tǒng)故障是不可避免的,因為硬件和軟件不可能設(shè)計的完全正確,所以實時系統(tǒng)需要容錯,這樣一個系統(tǒng)里的容錯代碼也彌漫在整個系統(tǒng)中,導致前述問題。為了提高性能和達到可預(yù)報性,實時系統(tǒng)需要特別的資源管理策略,如為了可預(yù)報性,不使用緩存和虛存機制,因為缺頁會導致時間不可預(yù)報。所以有必要把這些非功能代碼從功能部件里分離出來。實時系統(tǒng)在社會和國家生活中應(yīng)用越來越廣泛,影響也越來越大,系統(tǒng)也越來越復雜。 研究者已經(jīng)開始探索如何將面向方面技術(shù)應(yīng)用在實時系統(tǒng)中。[5]提出了ACCORD(AspeCtual COmponentbased Realtime system Development)設(shè)計方法,也提出了一個RTCOM(RealTime Component Model)模型。RTCOM允許把方面編織到組件里,包括三部分:(1)功能部分。(3)組合部分。(2)運行時方面。嵌入式系統(tǒng)的一個重要特征是依賴環(huán)境。[7]把面向方面編程技術(shù)應(yīng)用到實時操作系統(tǒng)開發(fā)上。[8]展示了如何把面向方面技術(shù)應(yīng)用的分布式實時系統(tǒng)上。[9,10]把面向方面應(yīng)用到DisCo(Distributed Cooperation)系統(tǒng)中,DisCo 是描述反應(yīng)式系統(tǒng)的形式化規(guī)格說明方法。 論文結(jié)構(gòu)安排如下: 第一章介紹了面向方面編程可以模塊化非功能關(guān)注點;分析了實時系統(tǒng)中的非功能關(guān)注點以及實時系統(tǒng)中使用面向方面技術(shù)的現(xiàn)狀。 第三章闡述了實時系統(tǒng)中的實時需求,以及用UML建模實時系統(tǒng)的方法。 第五章提出了一個新的擴展UML來表達面向方面中的元素和機制,闡述如何將這種方法應(yīng)用于實時系統(tǒng)開發(fā)中。對于如何有效的分離關(guān)注點,人們已經(jīng)提出了很多方法。 AspectJGregor Kiczales等人于1997年提出了面向方面編程(AOP, AspectOriented Programming)概念[2],開發(fā)出了第一個基于Java的AOP實現(xiàn)AspectJ[11]。連接點為程序流中的一些特殊點,包括方法調(diào)用與執(zhí)行,構(gòu)造函數(shù)調(diào)用與執(zhí)行,類或?qū)ο蟪跏蓟?,成員變量的訪問和修改,異常處理執(zhí)行,通知執(zhí)行等。切入點組合了連接點,并可以提供連接點處執(zhí)行上下文的信息。AspectJ定義了原子切入點(primitive pointcut),如“call(void (int))”;也定義了與(amp。)、或(||)、非(!)來組合切入點。通知在切入點影響系統(tǒng)的行為。類型間聲明改變程序的結(jié)構(gòu)。方面將這些切入點、通知、類型間聲明封裝起來,形成一個關(guān)注點,與類一樣,方面也可有成員變量和成員函數(shù)。這些概念以及構(gòu)造塊的詳細內(nèi)容可以參考[12]。public aspect Timing {public long = 0。}private Timer = new Timer()。 }after (Connection c): target(c) amp。 call(void ()) {getTimer(c).start()。amp。after(Connection c): endTiming(c) {getTimer(c).stop()。().totalConnectTime += getTimer(c).getTime()。在連接建立完成時開始計時,在連接斷開后,停止計時,并計算連接時間和增加通話用戶的全部連接時間值。這樣,系統(tǒng)的關(guān)注點可以分別編寫,從而有效分離了關(guān)注點,然后將這些模塊化的關(guān)注點通過編織器組合在一起,形成滿足需求的系統(tǒng)。在AspectJ中“*”,表示通配符,但是在C++中“*”用來聲明指針,為避免二義性,在AspectC++中以“%”表示通配符。以“…”來匹配函數(shù)簽名的任意數(shù)量形參。名字切入點是類型、屬性、函數(shù)、變量和名字空間的名字,如“%Array”表示任何以“Array”結(jié)尾的class、struct或union;“void draw(…)”匹配有任意數(shù)量形參和返回類型為“void”的函數(shù)draw。另外,為了重用切入點,可以用pointcut(pointcut為關(guān)鍵字)表達式對切入點命名,即命名切入點(named pointcut),如pointcut Arrays()=derived(“Array”),這樣Arrays能用在表示derived(“Array”)切入點表達式可用的任何地方。對于名字切入點,通知可以擴展程序代碼和數(shù)據(jù)結(jié)構(gòu),即引入(與AspectJ中類型間聲明一樣)。與AspectJ一樣,方面以模塊化的方式收集橫切關(guān)注點的advice代碼和引入。aspect TraceShape{ public: static int m_created,m_destroyed。 advice shapes(): class Helper{ public: Helper(){TraceShape::m_created++。} }m_counter。 } }。int TraceShape::m_destroyed=0。 模塊化的擴展意味著過濾器可以附貼在對象上而不改變對象的定義,這樣過濾器與實現(xiàn)獨立;正交化的擴展即過濾器之間的語義互相獨立,這樣過濾器可以組合[15]。圖23 CF模型的組件[16]上圖描述了一個CF模型中的對象,這個對象包括接口和實現(xiàn)兩部分。對象可以用四元組I,M,S,F表示[17]。狀態(tài)s表示為: 。對象的所有方法U0包括對象內(nèi)部定義的方法M0和接口對象定義的方法(滿足遞歸規(guī)則): 過濾器定義為: handler(f)即過濾器處理器(filterhandler),它定義了當消息到達過濾器時如何操控這個消息。A定義了狀態(tài)-方法對s,m集合,狀態(tài)s決定了消息(方法)m是否被接受。4) forall sj,mj in A(f) = [s1,m1, ..., sk,mk] do5) if (m = mj)∧sj then6) begin7) accept := true。9) break。11) endfor。15) endfor。17) end pass_filters。如果消息不滿足當前過濾器的接受集合所有元素,消息根據(jù)過濾器處理器的類別拒絕消息。預(yù)定義的過濾器類: Dispatch 過濾器:如果接受消息,消息分發(fā)到消息的當前目標對象;否則消息傳遞到下一個過濾器(如果沒有了過濾器,會產(chǎn)生異常)。 Wait過濾器:如果接受消息,消息傳遞到下一個過濾器;否則排隊等待接受。接受到這個新消息對象可以操控這個消息。下面用[18]中的例子介紹實時需求繼承反常以及用CF模型解決的方法。這個節(jié)點有一條電力產(chǎn)生線和多條電力消費線。當生產(chǎn)線斷開時,所有的消費線都要在預(yù)定義的時間內(nèi)斷開。假定有一個FastDistributionNode,它是DistributionNode的子類,F(xiàn)astDistributionNode定義消費線斷開的截至時間比它的父類更緊迫。用CF解決的方法是把時間約束放到過濾器中,過濾器把時間約束加到接受的消息上,如圖25。 (1) class DistributionNode interface(2) begin(3) internals(4) mySwitch: ElMagneticSwitches。(7) disconnectConsumerLine(Integer) returns nil。(10) setTimeForProduction: RealTime = { True = (11) | ( numberOfLines * ) | }。(13) end。消息將接受“|…|”里的時間約束。time定義了一些方法來操作這兩個屬性:如minEnd(time point)給消息設(shè)置最早的截至時間(如果time point的值小于消息當前的截至時間,則消息截至時間為time point,否則不變);setEnd(time point)設(shè)置end屬性為參數(shù);getEnd:返回end屬性。這里條件為“Tue”。如果到來的消息是productionLineDisconnected,它會通過第一個過濾器,在那里設(shè)置其最早截至時間,然后會傳到第二個過濾器,在這里設(shè)置其截至時間為numberOfLines * ,其中numberOfLines是消費線跳數(shù)。(1) class FastDistributionNode interface(2) begin(3) internals(4) myNode: DistributionNode。(8) end。被分發(fā)的消息還要接受父類的過濾器檢查,但是由于新的截至時間小于父類過濾器里的截至時間,所以父類的giveTimeSpec過濾器不會改變截至時間,setTimeForProduction會用消費線條數(shù)乘上新的截至時間設(shè)置productionLineDisconnected消息的截至時間。當同樣的實時需求在一個類系的每個需要的地方都需聲明時,易于出錯,并且不容易加入有同樣實時需求的方法,這樣出現(xiàn)了非多態(tài)(Nonpolymorphic)實時反常。如果相互獨立的實時需求通過繼承組合在一起時,那么它們之間會相互影響,這樣開發(fā)人員需要重新定義相互影響的需求,出現(xiàn)了正交限制反常。 過濾器可以用來表達橫切關(guān)注點,它不但能表示單個對象的關(guān)注點,也可以表示橫跨多個對象的組合關(guān)注點[15]。為了方便軟件維護與演進,要求減少改變帶來的影響,要求模塊的可替換性以及提高軟件生命周期過程中各種制品間的可追蹤性。如面向?qū)ο笾С謱ο蟮姆蛛x,把數(shù)據(jù)封裝在一起,但是阻礙了特征的演進與增加,因為這需要修改和增加多個類里的方法和數(shù)據(jù),需要侵入系統(tǒng)內(nèi)部。為了達到軟件工程的目的,就需要同時分解多種關(guān)注點。下面以[19,20]中的例子來說明主分解專制帶來的問題。SEE支持表達式程序的創(chuàng)建與操作。系統(tǒng)的結(jié)構(gòu)如圖27。圖27 SEE的初始設(shè)計制品[19] 現(xiàn)在為了減少不必要的重新計算而提高性能,需要對計算結(jié)果進行緩存,這樣一個簡單的需求對設(shè)計和代碼帶來了顯著的影響:它需要在基類里增加保存緩存結(jié)果的變量以及這個變量的訪問方法,修改每個類的setter方法,修改每個類的eval()方法使得它能返回一個緩存的結(jié)果。 如果系統(tǒng)要增加風格檢查(style check)功能,并且希望風格檢查能與系統(tǒng)原來的語法語義檢查任意結(jié)合,同樣需要侵入修改,這要影響系統(tǒng)在設(shè)計和編碼的所有模塊。主分解滿足一些重要的需要,但是阻礙了另一些,如數(shù)據(jù)的分解符合了應(yīng)用領(lǐng)域的概念,但是功能特征的代碼分散在多個模塊中并且與其他功能特征代碼混雜在一起[19]。系統(tǒng)的各種關(guān)注點用原來的方法實現(xiàn),然后通過組合規(guī)則把它們組合在一起。單元可分為原子單元和組合單元,原子單元在在特定上下文中不可分割,如方法,實例變量,組合單元由原子單元組成,如類,包,圖等。Hyperspace就是一種支持多維關(guān)注點分離的關(guān)注點空間,它的定義為元組(U,M,H),其中 U是hyperspace里的單元集。它為元組(C,M),其中C為關(guān)注點集,M為關(guān)注點的維集,維代表了關(guān)注點的種類,每個關(guān)注點都在某一維中。 H是hypermodule集合,它表明了如何用單元來構(gòu)建組件和系統(tǒng)。Hypermodule組合了hyperslice,并包括hyperslice間的組合規(guī)則,如hyperslice單元引用聲明與實現(xiàn)單元間的綁定,需求單元與設(shè)計編碼單元的對應(yīng)關(guān)系。初始SEE包括三種關(guān)注點(三維): 類:設(shè)計和編碼的每個類表示一個關(guān)注點。制品(Artifacts):不同的軟件開發(fā)階段都會產(chǎn)生制品,如需求說明書,設(shè)計,代碼,測試計劃。 Hyper/J Hyper/J[20]實現(xiàn)了Hyperspace模型,支持Java語言實現(xiàn)的單元的組合。項目說明書定義了各個單元,為Java的class文件。關(guān)注點映射定義了單元在關(guān)注點矩陣里的組織方式。Hypermodule說明書描述了hypermodule與組合規(guī)則。如果要添加風格檢查功能,開發(fā)者建立一個
點擊復制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1