系統(tǒng)架構(gòu)設(shè)計(jì)筆記(44)——軟件架構(gòu)風(fēng)格

軟件架構(gòu)設(shè)計(jì)的一個(gè)核心問題是能否使用重復(fù)的軟件架構(gòu)模式戒职,即能否達(dá)到架構(gòu)級別的軟件重用。也就是說绢陌,能否在不同的軟件系統(tǒng)中挨下,使用同一架構(gòu)∑晖澹基于這個(gè)目的臭笆,學(xué)者們開始研究和實(shí)踐軟件架構(gòu)的風(fēng)格和類型問題。

軟件架構(gòu)風(fēng)格是描述某一特定應(yīng)用領(lǐng)域中系統(tǒng)組織方式的慣用模式( idiomatic paradigm )秤掌。架構(gòu)風(fēng)格定義了一個(gè)系統(tǒng)家族愁铺,即一個(gè)架構(gòu)定義一個(gè)詞匯表和一組約束。詞匯表中包含一些構(gòu)件和連接件類型闻鉴,而這組約束指出系統(tǒng)是如何將這些構(gòu)件和連接件組合起來的茵乱。架構(gòu)風(fēng)格反映了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語義特性,并指導(dǎo)如何將各個(gè)模塊和子系統(tǒng)有效地組織成一個(gè)完整的系統(tǒng)孟岛。按這種方式理解瓶竭,軟件架構(gòu)風(fēng)格定義了用于描述系統(tǒng)的術(shù)語表和一組指導(dǎo)構(gòu)建系統(tǒng)的規(guī)則督勺。對軟件架構(gòu)風(fēng)格的研究和實(shí)踐促進(jìn)了對設(shè)計(jì)的重用,一些經(jīng)過實(shí)踐證實(shí)的解決方案也可以可靠地用于解決新的問題斤贰。架構(gòu)風(fēng)格不變的部分使不同的系統(tǒng)可以共享同一個(gè)實(shí)現(xiàn)代碼智哀。只要系統(tǒng)是使用常用的 、 規(guī)范的方法來組織荧恍,就可使別的設(shè)計(jì)者很容易地理解系統(tǒng)的架構(gòu)瓷叫。例如,如果某人把系統(tǒng)描述為客戶 / 服務(wù)器模式块饺,則不必給出設(shè)計(jì)細(xì)節(jié)赞辩,我們立刻就會(huì)明白系統(tǒng)是如何組織和工作的。

軟件架構(gòu)風(fēng)格為大粒度的軟件重用提供了可能授艰。然而辨嗽,對于應(yīng)用架構(gòu)風(fēng)格來說,由于視點(diǎn)的不同淮腾,系統(tǒng)設(shè)計(jì)師有很大的選擇馀地糟需。要為系統(tǒng)選擇或設(shè)計(jì)某一個(gè)架構(gòu)風(fēng)格,必須根據(jù)特定項(xiàng)目的具體特點(diǎn)谷朝,進(jìn)行分析比較后再確定洲押,架構(gòu)風(fēng)格的使用幾乎完全是特定的。

1 軟件架構(gòu)風(fēng)格分類

討論架構(gòu)風(fēng)格時(shí)要回答的問題是:

(1)設(shè)計(jì)詞匯表是什么圆凰?
(2)構(gòu)件和連接件的類型是什么杈帐?
(3)可容許的結(jié)構(gòu)模式是什么?
(4)基本的計(jì)算模型是什么专钉?
(5)風(fēng)格的基本不變性是什么挑童?
(6)其使用的常見例子是什么?
(7)使用此風(fēng)格的優(yōu)缺點(diǎn)是什么跃须?
(8)其常見的特例是什么站叼?

這些問題的回答包括了架構(gòu)風(fēng)格的最關(guān)鍵的四要素內(nèi)容,即提供一個(gè)詞匯表 菇民、 定義一套配置規(guī)則 尽楔、 定義一套語義解釋原則和定義對基于這種風(fēng)格的系統(tǒng)所進(jìn)行的分析 。Garlan 和 Shaw 根據(jù)此框架給出了通用架構(gòu)風(fēng)格的分類:

(1)數(shù)據(jù)流風(fēng)格:批處理序列第练;管道/過濾器阔馋。
(2)調(diào)用/返回風(fēng)格:主程序/子程序;面向?qū)ο箫L(fēng)格娇掏;層次結(jié)構(gòu)垦缅。
(3)獨(dú)立構(gòu)件風(fēng)格:進(jìn)程通信;事件系統(tǒng)驹碍。
(4)虛擬機(jī)風(fēng)格:解釋器壁涎;基于規(guī)則的系統(tǒng)凡恍。
(5)倉庫風(fēng)格:數(shù)據(jù)庫系統(tǒng);超文本系統(tǒng)怔球;黑板系統(tǒng)嚼酝。

2 數(shù)據(jù)流風(fēng)格

數(shù)據(jù)流風(fēng)格的軟件架構(gòu)是一種最常見,結(jié)構(gòu)最為簡單的軟件架構(gòu)竟坛。這樣的架構(gòu)下闽巩,所有的數(shù)據(jù)按照流的形式在執(zhí)行過程中前進(jìn),不存在結(jié)構(gòu)的反復(fù)和重構(gòu)担汤,就像工廠中的汽車流水線一樣涎跨,數(shù)據(jù)就像汽車零部件一樣在流水線的各個(gè)節(jié)點(diǎn)上被加工,最終輸出所需要的結(jié)果(一部完整的汽車)崭歧。在流動(dòng)過程中隅很,數(shù)據(jù)經(jīng)過序列間的數(shù)據(jù)處理組件進(jìn)行處理,然后將處理結(jié)果向后傳送率碾,最后進(jìn)行輸出叔营。

數(shù)據(jù)流風(fēng)格架構(gòu)主要包括兩種具體的架構(gòu)風(fēng)格:批處理序列和管道-過濾器。

2.1 批處理序列

批處理風(fēng)格的每一步處理都是獨(dú)立的所宰,并且每一步是順序執(zhí)行的绒尊。只有當(dāng)前一步處理完,后一步處理才能開始仔粥。數(shù)據(jù)傳送在步與步之間作為一個(gè)整體婴谱。

組件為一系列固定順序的計(jì)算單元,組件間只通過數(shù)據(jù)傳遞交互躯泰。每個(gè)處理步驟是一個(gè)獨(dú)立的程序谭羔,每一步必須在前一步結(jié)束后才能開始,數(shù)據(jù)必須是完整的斟冕,以整體的方式傳遞。

批處理的典型應(yīng)用:

(1)經(jīng)典數(shù)據(jù)處理缅阳;
(2)程序開發(fā)磕蛇;
(3)Windows 下的 BAT 程序就是這種應(yīng)用的典型實(shí)例。

2.2 管道和過濾器

在管道 / 過濾器風(fēng)格的軟件架構(gòu)中十办,每個(gè)構(gòu)件都有一組輸入和輸出秀撇,構(gòu)件讀輸入的數(shù)據(jù)流,經(jīng)過內(nèi)部處理向族,然后產(chǎn)生輸出數(shù)據(jù)流呵燕。這個(gè)過程通常通過對輸入流的變換及增量計(jì)算來完成,所以在輸入被完全消費(fèi)之前件相,輸出便產(chǎn)生了再扭。因此氧苍,這里的構(gòu)件被稱為過濾器,這種風(fēng)格的連接件就像是數(shù)據(jù)流傳輸?shù)墓艿婪悍叮瑢⒁粋€(gè)過濾器的輸出傳到另一過濾器的輸入让虐。此風(fēng)格特別重要的過濾器必須是獨(dú)立的實(shí)體,它不能與其他的過濾器共享數(shù)據(jù)罢荡,而且一個(gè)過濾器不知道它上游和下游的標(biāo)識(shí)赡突。一個(gè)管道 / 過濾器網(wǎng)絡(luò)輸出的正確性并不依賴于過濾器進(jìn)行增量計(jì)算過程的順序。

圖 1 是管道 / 過濾器風(fēng)格的示意圖区赵。一個(gè)典型的管道 / 過濾器架構(gòu)的例子是以 UNIX shell 編寫的程序 惭缰。 UNIX 既提供一種符號,以連接各組成部分( UNIX 的進(jìn)程)笼才,又提供某種進(jìn)程運(yùn)行時(shí)機(jī)制以實(shí)現(xiàn)管道漱受。另一個(gè)著名的例子是傳統(tǒng)的編譯器。傳統(tǒng)的編譯器一直被認(rèn)為是一種管道系統(tǒng)患整,在該系統(tǒng)中拜效,一個(gè)階段(包括詞法分析 、 語法分析 各谚、 語義分析和代碼生成)的輸出是另一個(gè)階段的輸入紧憾。

管道 / 過濾器風(fēng)格的軟件架構(gòu)具有許多很好的特點(diǎn):
(1)使得軟件具有良好的隱蔽性和高內(nèi)聚 、 低耦合的特點(diǎn)昌渤;
(2)允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入 / 輸出行為看成是多個(gè)過濾器的行為的簡單合成赴穗;
(3)支持軟件重用。只要提供適合在兩個(gè)過濾器之間傳送的數(shù)據(jù)膀息,任何兩個(gè)過濾器都可被連接起來般眉;
(4)系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡單。新的過濾器可以添加到現(xiàn)有系統(tǒng)中來潜支;舊的可以被改進(jìn)的過濾器替換掉甸赃;
(5)允許對一些如吞吐量 、 死鎖等屬性的分析冗酿;
(6)支持并行執(zhí)行埠对。每個(gè)過濾器是作為一個(gè)單獨(dú)的任務(wù)完成,因此可與其他任務(wù)并行執(zhí)行裁替。

但是项玛,這樣的系統(tǒng)也存在著若干不利因素。
(1)通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)弱判。這是因?yàn)殡m然過濾器可增量式地處理數(shù)據(jù)襟沮,但它們是獨(dú)立的,所以設(shè)計(jì)者必須將每個(gè)過濾器看成一個(gè)完整的從輸入到輸出的轉(zhuǎn)換;
(2)不適合處理交互的應(yīng)用开伏。當(dāng)需要增量地顯示改變時(shí)膀跌,這個(gè)問題尤為嚴(yán)重;
(3)因?yàn)樵跀?shù)據(jù)傳輸上沒有通用的標(biāo)準(zhǔn)硅则,每個(gè)過濾器都增加了解析和合成數(shù)據(jù)的工作淹父,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(fù)雜性怎虫。

2.3 批處理序列風(fēng)格與管道過濾器風(fēng)格對比

把批處理序列風(fēng)格與管道過濾器風(fēng)格比較:

  • 共同點(diǎn):把任務(wù)分成一系列固定順序的計(jì)算單元(組件)暑认。組件間只通過數(shù)據(jù)傳遞交互。
  • 區(qū)別:批處理是全部的 大审、 高潛伏性的蘸际,輸入時(shí)可隨機(jī)存取,無合作性 徒扶、 無交互性粮彤。而管道過濾器是遞增的,數(shù)據(jù)結(jié)果延遲小姜骡,輸入時(shí)處理局部化导坟,有反饋 、 可交互圈澈。批處理強(qiáng)調(diào)數(shù)據(jù)傳送在步與步之間作為一個(gè)整體惫周,而管理過濾器無此要求。

3 調(diào)用/返回風(fēng)格

調(diào)用返回風(fēng)格顧名思義康栈,就是指在系統(tǒng)中采用了調(diào)用與返回機(jī)制递递。利用調(diào)用 - 返回實(shí)際上是一種分而治之的策略,其主要思想是將一個(gè)復(fù)雜的大系統(tǒng)分解為一些子系統(tǒng)啥么,以便降低復(fù)雜度登舞,并且增加可修改性。程序從其執(zhí)行起點(diǎn)開始執(zhí)行該構(gòu)件的代碼悬荣,程序執(zhí)行結(jié)束菠秒,將控制返回給程序調(diào)用構(gòu)件。

調(diào)用 / 返回風(fēng)格架構(gòu)主要包括三種具體的架構(gòu)風(fēng)格:主程序 / 子程序氯迂;面向?qū)ο箫L(fēng)格践叠;層次結(jié)構(gòu)。

3.1 主程序/子程序

主程序 / 子程序風(fēng)格是結(jié)構(gòu)化開發(fā)時(shí)期的經(jīng)典架構(gòu)風(fēng)格囚戚。這種風(fēng)格一般采用單線程控制酵熙,把問題劃分為若干處理步驟轧简,構(gòu)件即為主程序和子程序驰坊。子程序通常可合成為模塊哮独。過程調(diào)用作為交互機(jī)制拳芙,即充當(dāng)連接件察藐。調(diào)用關(guān)系具有層次性,其語義邏輯表現(xiàn)為子程序的正確性舟扎,取決于它調(diào)用的子程序的正確性分飞。

3.2 面向?qū)ο箫L(fēng)格

抽象數(shù)據(jù)類型概念對軟件系統(tǒng)有著重要作用,目前軟件界已普遍使用面向?qū)ο笙到y(tǒng)睹限。這種風(fēng)格建立在數(shù)據(jù)抽象和面向?qū)ο蟮幕A(chǔ)上譬猫,數(shù)據(jù)的表示方法和它們的相應(yīng)操作封裝在一個(gè)抽象數(shù)據(jù)類型或?qū)ο笾小_@種風(fēng)格的構(gòu)件是對象羡疗,或者說是抽象數(shù)據(jù)類型的實(shí)例染服。對象是一種被稱作管理者的構(gòu)件,因?yàn)樗?fù)責(zé)保持資源的完整性叨恨。對象是通過函數(shù)和過程的調(diào)用來交互的柳刮。

圖 2 是數(shù)據(jù)抽象和面向?qū)ο箫L(fēng)格的示意圖。

這種風(fēng)格的兩個(gè)重要特征為:

(1)對象負(fù)責(zé)維護(hù)其表示的完整性痒钝;
(2)對象的表示對其他對象而言是隱蔽的秉颗。因?yàn)橐粋€(gè)對象對它的客戶隱藏了自己的表示,所以這些對象可以不影響它的客戶就能改變其實(shí)現(xiàn)方法送矩。

面向?qū)ο蟮南到y(tǒng)有許多優(yōu)點(diǎn)蚕甥,并早已為人所知:
(1)因?yàn)閷ο髮ζ渌麑ο箅[藏它的表示,所以可以改變一個(gè)對象的表示益愈,而不影響其他的對象梢灭;
(2)設(shè)計(jì)者可將一些數(shù)據(jù)存取操作的問題分解成一些交互的代理程序的集合。

但是蒸其,面向?qū)ο蟮南到y(tǒng)也存在著某些問題:
(1)為了使一個(gè)對象和另一個(gè)對象通過過程調(diào)用等進(jìn)行交互敏释,必須知道對象的標(biāo)識(shí)。只要一個(gè)對象的標(biāo)識(shí)改變了摸袁,就必須修改所有其他明確調(diào)用它的對象钥顽;
(2)必須修改所有顯式調(diào)用它的其他對象,并消除由此帶來的一些副作用靠汁。例如蜂大,如果 A 使用了對象 B , C 也使用了對象 B 蝶怔,那么奶浦, C 對 B 的使用所造成的對 A 的影響可能是料想不到的。

4 層次結(jié)構(gòu)風(fēng)格

層次系統(tǒng)組織成一個(gè)層次結(jié)構(gòu)踢星,每一層為上層服務(wù)澳叉,并作為下層客戶。在一些層次系統(tǒng)中,除了一些精心挑選的輸出函數(shù)外成洗,內(nèi)部的層只對相鄰的層可見五督。這樣的系統(tǒng)中構(gòu)件在一些層實(shí)現(xiàn)了虛擬機(jī)(在另一些層次系統(tǒng)中層是部分不透明的)。連接件通過決定層間如何交互的協(xié)議來定義瓶殃,拓?fù)浼s束包括對相鄰層間交互的約束充包。

這種風(fēng)格支持基于可增加抽象層的設(shè)計(jì)。這樣遥椿,允許將一個(gè)復(fù)雜問題分解成一個(gè)增量步驟序列的實(shí)現(xiàn)基矮。由于每一層最多只影響兩層,同時(shí)只要給相鄰層提供相同的接口冠场,允許每層用不同的方法實(shí)現(xiàn)愈捅,同樣為軟件重用提供了強(qiáng)大的支持。

圖 3 是層次系統(tǒng)風(fēng)格的示意圖慈鸠。層次系統(tǒng)最廣泛的應(yīng)用是分層通信協(xié)議蓝谨。在這一應(yīng)用領(lǐng)域中,每一層提供一個(gè)抽象的功能青团,作為上層通信的基礎(chǔ)譬巫。較低的層次定義低層的交互,最低層通常只定義硬件物理連接督笆。

層次系統(tǒng)有許多可取的屬性:
(1)支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì)芦昔,使設(shè)計(jì)者可以把一個(gè)復(fù)雜系統(tǒng)按遞增的步驟進(jìn)行分解;
(2)支持功能增強(qiáng)娃肿,因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换ス径校虼斯δ艿母淖冏疃嘤绊懴噜彽纳舷聦樱?br> (3)支持重用。只要提供的服務(wù)接口定義不變料扰,同一層的不同實(shí)現(xiàn)可以交換使用凭豪。這樣,就可以定義一組標(biāo)準(zhǔn)的接口晒杈,而允許各種不同的實(shí)現(xiàn)方法嫂伞。

但是,層次系統(tǒng)也有其不足之處:
(1)并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式拯钻,甚至即使一個(gè)系統(tǒng)的邏輯結(jié)構(gòu)是層次化的帖努,出于對系統(tǒng)性能的考慮,系統(tǒng)設(shè)計(jì)師不得不把一些低級或高級的功能綜合起來粪般;
(2)很難找到一個(gè)合適的 拼余、 正確的層次抽象方法。

5 獨(dú)立構(gòu)件風(fēng)格

獨(dú)立構(gòu)件風(fēng)格主要強(qiáng)調(diào)系統(tǒng)中的每個(gè)構(gòu)件都是相對獨(dú)立的個(gè)體亩歹,它們之間不直接通信匙监,以降低耦合度寡润,提升靈活性。

獨(dú)立構(gòu)件風(fēng)格主要包括:進(jìn)程通訊和事件系統(tǒng)子風(fēng)格 舅柜。

5.1 進(jìn)程通信架構(gòu)風(fēng)格

進(jìn)程通信架構(gòu)風(fēng)格:構(gòu)件是獨(dú)立的過程,連接件是消息傳遞躲惰。這種風(fēng)格的特點(diǎn)是構(gòu)件通常是命名過程致份,消息傳遞的方式可以是點(diǎn)到點(diǎn) 、 異步和同步方式及遠(yuǎn)過程調(diào)用等 础拨。

5.2 事件系統(tǒng)風(fēng)格

事件系統(tǒng)風(fēng)格基于事件的隱式調(diào)用風(fēng)格的思想是構(gòu)件不直接調(diào)用一個(gè)過程氮块,而是觸發(fā)或廣播一個(gè)或多個(gè)事件。系統(tǒng)中的其他構(gòu)件中的過程在一個(gè)或多個(gè)事件中注冊诡宗,當(dāng)一個(gè)事件被觸發(fā)滔蝉,系統(tǒng)自動(dòng)調(diào)用在這個(gè)事件中注冊的所有過程厌殉,這樣挤渐,一個(gè)事件的觸發(fā)就導(dǎo)致了另一模塊中的過程的調(diào)用。

從架構(gòu)上說抱怔,這種風(fēng)格的構(gòu)件是一些模塊蛀柴,這些模塊既可以是一些過程螃概,又可以是一些事件的集合。過程可以用通用的方式調(diào)用鸽疾,也可以在系統(tǒng)事件中注冊一些過程吊洼,當(dāng)發(fā)生這些事件時(shí),過程被調(diào)用制肮。

基于事件的隱式調(diào)用風(fēng)格的主要特點(diǎn)是事件的觸發(fā)者并不知道哪些構(gòu)件會(huì)被這些事件影響冒窍。這樣不能假定構(gòu)件的處理順序,甚至不知道哪些過程會(huì)被調(diào)用豺鼻,因此综液,許多隱式調(diào)用的系統(tǒng)也包含顯式調(diào)用作為構(gòu)件交互的補(bǔ)充形式。

支持基于事件的隱式調(diào)用的應(yīng)用系統(tǒng)很多儒飒。例如意乓,在編程環(huán)境中用于集成各種工具,在數(shù)據(jù)庫管理系統(tǒng)中確保數(shù)據(jù)的一致性約束约素,在用戶界面系統(tǒng)中管理數(shù)據(jù)届良,以及在編輯器中支持語法檢查。

例如在某系統(tǒng)中圣猎,編輯器和變量監(jiān)視器可以登記相應(yīng) Debugger 的斷點(diǎn)事件士葫。當(dāng) Debugger 在斷點(diǎn)處停下時(shí),它聲明該事件送悔,由系統(tǒng)自動(dòng)調(diào)用處理程序慢显,如編輯程序可以卷屏到斷點(diǎn)爪模,變量監(jiān)視器刷新變量數(shù)值。

而 Debugger 本身只聲明事件荚藻,并不關(guān)心哪些過程會(huì)啟動(dòng)屋灌,也不關(guān)心這些過程做什么處理。

隱式調(diào)用系統(tǒng)的主要優(yōu)點(diǎn)有:
(1)為軟件重用提供了強(qiáng)大的支持应狱。當(dāng)需要將一個(gè)構(gòu)件加入現(xiàn)存系統(tǒng)中時(shí)共郭,只需將它注冊到系統(tǒng)的事件中。(2)為改進(jìn)系統(tǒng)帶來了方便疾呻。當(dāng)用一個(gè)構(gòu)件代替另一個(gè)構(gòu)件時(shí)除嘹,不會(huì)影響到其他構(gòu)件的接口。

隱式調(diào)用系統(tǒng)的主要缺點(diǎn)有:
(1)構(gòu)件放棄了對系統(tǒng)計(jì)算的控制岸蜗。一個(gè)構(gòu)件觸發(fā)一個(gè)事件時(shí)尉咕,不能確定其他構(gòu)件是否會(huì)響應(yīng)它。而且即使它知道事件注冊了哪些構(gòu)件的過程璃岳,它也不能保證這些過程被調(diào)用的順序年缎。

(2)數(shù)據(jù)交換的問題。有時(shí)數(shù)據(jù)可被一個(gè)事件傳遞铃慷,但另一些情況下晦款,基于事件的系統(tǒng)必須依靠一個(gè)共享的倉庫進(jìn)行交互。在這些情況下枚冗,全局性能和資源管理便成了問題缓溅。

(3)既然過程的語義必須依賴于被觸發(fā)事件的上下文約束,關(guān)于正確性的推理存在問題赁温。

6 虛擬機(jī)風(fēng)格

虛擬機(jī)風(fēng)格的基本思想是人為構(gòu)建一個(gè)運(yùn)行環(huán)境坛怪,在這個(gè)環(huán)境之上,可以解析與運(yùn)行自定義的一些語言股囊,這樣來增加架構(gòu)的靈活性袜匿,虛擬機(jī)風(fēng)格主要包括解釋器和規(guī)則為中心兩種架構(gòu)風(fēng)格。

6.1 解釋器

一個(gè)解釋器通常包括完成解釋工作的解釋引擎稚疹,一個(gè)包含將被解釋的代碼的存儲(chǔ)區(qū)居灯,一個(gè)記錄解釋引擎當(dāng)前工作狀態(tài)的數(shù)據(jù)結(jié)構(gòu),以及一個(gè)記錄源代碼被解釋執(zhí)行進(jìn)度的數(shù)據(jù)結(jié)構(gòu)内狗。

具有解釋器風(fēng)格的軟件中含有一個(gè)虛擬機(jī)怪嫌,可以仿真硬件的執(zhí)行過程和一些關(guān)鍵應(yīng)用。解釋器通常被用來建立一種虛擬機(jī)以彌合程序語義與硬件語義之間的差異柳沙。其缺點(diǎn)是執(zhí)行效率較低岩灭。典型的例子是專家系統(tǒng)。

6.2 規(guī)則為中心

基于規(guī)則的系統(tǒng)包括規(guī)則集赂鲤、規(guī)則解釋器噪径、規(guī)則/數(shù)據(jù)選擇器及工作內(nèi)存柱恤。

7 倉庫風(fēng)格

在倉庫( repository )風(fēng)格中,有兩種不同的構(gòu)件:中央數(shù)據(jù)結(jié)構(gòu)說明當(dāng)前狀態(tài)找爱,獨(dú)立構(gòu)件在中央數(shù)據(jù)存儲(chǔ)上執(zhí)行梗顺,倉庫與外構(gòu)件間的相互作用在系統(tǒng)中會(huì)有大的變化。

倉庫風(fēng)格包括的子風(fēng)格有:數(shù)據(jù)庫系統(tǒng) 车摄、 超文本系統(tǒng) 寺谤、 黑板風(fēng)格。

(1)數(shù)據(jù)庫系統(tǒng)

數(shù)據(jù)庫架構(gòu)是庫風(fēng)格最常見的形式练般。構(gòu)件主要有兩大類,一個(gè)是中央共享數(shù)據(jù)源锈候,保存當(dāng)前系統(tǒng)的數(shù)據(jù)狀態(tài)薄料;另一個(gè)是多個(gè)獨(dú)立處理元素,處理元素對數(shù)據(jù)元素進(jìn)行操作泵琳。

(2)超文本系統(tǒng)

超文本系統(tǒng)的典型代表摄职,就是早期的靜態(tài)網(wǎng)頁。

(3)黑板風(fēng)格

三種架構(gòu)子風(fēng)格中获列,最復(fù)雜的是黑板系統(tǒng)谷市。黑板系統(tǒng)是在抽象與總結(jié)語言理解系統(tǒng) HEARSAY-11 的基礎(chǔ)上產(chǎn)生的,適合于解決復(fù)雜的非結(jié)構(gòu)化的問題击孩,能在求解過程中綜合運(yùn)用多種不同知識(shí)源迫悠,使得問題的表達(dá) 、 組織和求解變得比較容易巩梢。

黑板系統(tǒng)是一種問題求解模型创泄,是組織推理步驟 、 控制狀態(tài)數(shù)據(jù)和問題求解之領(lǐng)域知識(shí)的概念框架括蝠。它將問題的解空間組織成一個(gè)或多個(gè)應(yīng)用相關(guān)的分級結(jié)構(gòu)鞠抑。分級結(jié)構(gòu)的每一層信息由一個(gè)唯一的詞匯來描述,它代表了問題的部分解忌警。

領(lǐng)域相關(guān)的知識(shí)被分成獨(dú)立的知識(shí)模塊搁拙,它將某一層次中的信息轉(zhuǎn)換成同層或相鄰層的信息。各種應(yīng)用通過不同知識(shí)表達(dá)方法 法绵、 推理框架和控制機(jī)制的組合來實(shí)現(xiàn)箕速。

影響黑板系統(tǒng)設(shè)計(jì)的最大因素是應(yīng)用問題本身的特性,但是支撐應(yīng)用程序的黑板體系結(jié)構(gòu)有許多相似的特征和構(gòu)件朋譬。對于特定應(yīng)用問題弧满,黑板系統(tǒng)可通過選取各種黑板 、 知識(shí)源和控制模塊的構(gòu)件來設(shè)計(jì)此熬;也可以利用預(yù)先定制的黑板體系結(jié)構(gòu)的編程環(huán)境庭呜。

圖 4 是黑板系統(tǒng)的組成滑进。黑板系統(tǒng)的傳統(tǒng)應(yīng)用是信號處理領(lǐng)域,如語音和模式識(shí)別募谎。另一應(yīng)用是松耦合代理數(shù)據(jù)共享存取扶关。

我們從圖 4 中可以看出,黑板系統(tǒng)主要由三部分組成:
(1)知識(shí)源数冬。知識(shí)源中包含獨(dú)立的 节槐、 與應(yīng)用程序相關(guān)的知識(shí),知識(shí)源之間不直接進(jìn)行通信拐纱,它們之間的交互只通過黑板來完成铜异。
(2)黑板數(shù)據(jù)結(jié)構(gòu)。黑板數(shù)據(jù)是按照與應(yīng)用程序相關(guān)的層次來組織的解決問題的數(shù)據(jù)秸架,知識(shí)源通過不斷地改變黑板數(shù)據(jù)來解決問題揍庄。
(3)控制《ǎ控制完全由黑板的狀態(tài)驅(qū)動(dòng)蚂子,黑板狀態(tài)的改變決定使用的特定知識(shí)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缭黔,一起剝皮案震驚了整個(gè)濱河市食茎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馏谨,老刑警劉巖别渔,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惧互,居然都是意外死亡钠糊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門壹哺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抄伍,“玉大人,你說我怎么就攤上這事管宵〗卣洌” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵箩朴,是天一觀的道長岗喉。 經(jīng)常有香客問我,道長炸庞,這世上最難降的妖魔是什么钱床? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮埠居,結(jié)果婚禮上查牌,老公的妹妹穿的比我還像新娘事期。我一直安慰自己,他們只是感情好纸颜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布兽泣。 她就那樣靜靜地躺著,像睡著了一般胁孙。 火紅的嫁衣襯著肌膚如雪唠倦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天涮较,我揣著相機(jī)與錄音稠鼻,去河邊找鬼。 笑死狂票,一個(gè)胖子當(dāng)著我的面吹牛候齿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苫亦,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼毛肋,長吁一口氣:“原來是場噩夢啊……” “哼怨咪!你這毒婦竟也來了屋剑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤诗眨,失蹤者是張志新(化名)和其女友劉穎唉匾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匠楚,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巍膘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芋簿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峡懈。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖与斤,靈堂內(nèi)的尸體忽然破棺而出肪康,到底是詐尸還是另有隱情,我是刑警寧澤撩穿,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布磷支,位于F島的核電站,受9級特大地震影響食寡,放射性物質(zhì)發(fā)生泄漏雾狈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一抵皱、第九天 我趴在偏房一處隱蔽的房頂上張望善榛。 院中可真熱鬧辩蛋,春花似錦、人聲如沸锭弊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽味滞。三九已至樱蛤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剑鞍,已是汗流浹背昨凡。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚁署,地道東北人便脊。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像光戈,于是被迫代替她去往敵國和親哪痰。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345