《軟件體系結(jié)構(gòu)(龐東)》期末復(fù)習(xí)綱要.doc_第1頁
《軟件體系結(jié)構(gòu)(龐東)》期末復(fù)習(xí)綱要.doc_第2頁
《軟件體系結(jié)構(gòu)(龐東)》期末復(fù)習(xí)綱要.doc_第3頁
《軟件體系結(jié)構(gòu)(龐東)》期末復(fù)習(xí)綱要.doc_第4頁
《軟件體系結(jié)構(gòu)(龐東)》期末復(fù)習(xí)綱要.doc_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

復(fù)習(xí)綱要課程名稱:軟件體系結(jié)構(gòu)考試時(shí)間:120 分鐘考核方式:筆試、閉卷題型:選擇、填空、簡(jiǎn)答、分析、綜合應(yīng)用分?jǐn)?shù)分配:10、10、30、30、20第一章 知識(shí)要點(diǎn):1、 技術(shù)的發(fā)展:(1)傳統(tǒng)軟件技術(shù): 關(guān)注指令、數(shù)據(jù)、算法(2)現(xiàn)代軟件技術(shù):關(guān)注構(gòu)件、裝配(3)體系結(jié)構(gòu)是“高層次模型”2、 軟件危機(jī)產(chǎn)生軟件危機(jī):軟件的規(guī)模越來越龐大;復(fù)雜度越來越高;交付時(shí)間相對(duì)短軟件危機(jī)的表現(xiàn):軟件成本日益增長(zhǎng);開發(fā)進(jìn)度難以控制;軟件質(zhì)量差;軟件維護(hù)困難3、 體系結(jié)構(gòu)基礎(chǔ)概念、定義、屬性。(1)軟件體系結(jié)構(gòu)是系統(tǒng)的一個(gè)或多個(gè)結(jié)構(gòu),它包括:軟件的組成元素(構(gòu)件),這些(構(gòu)件)元素的外部可見特性,以及這些元素(構(gòu)件)之間的相互關(guān)系。軟件體系結(jié)構(gòu)是一套關(guān)于軟件結(jié)構(gòu)和組織的概念和設(shè)計(jì)決策,它必須在并行工程之前進(jìn)行,以確保有效滿足體系結(jié)構(gòu)的顯式功能和質(zhì)量需求以及產(chǎn)品家族、問題和解決方案方面的隱式需求。(2)基本術(shù)語:模型:現(xiàn)實(shí)的簡(jiǎn)化抽象建模技術(shù):形式化、半形式化、非形式化GARLAN 1993,學(xué)院派定義:定義1:SA=Components,Connectors,Constraints 構(gòu)件 連接器 約束構(gòu)件:反映服務(wù)連接器:連接器定義了交互協(xié)議和策略,形成動(dòng)態(tài)關(guān)系與面向?qū)ο蟛煌?,并非靜態(tài)的單元,是動(dòng)態(tài)的單元構(gòu)件是客戶機(jī)、服務(wù)器,連接件可以是多種形式BOSCH 2000,定義:定義2:SA是系統(tǒng)的頂級(jí)分解,分解的產(chǎn)物是系統(tǒng)的主要構(gòu)件說明:與模塊技術(shù)等價(jià),僅有靜態(tài)結(jié)構(gòu),與定義1相差甚遠(yuǎn)。GACEK 1995,定義:定義3:SA=Components,Connectors,Constraints,Stakeholder,Needs,Rationale 構(gòu)件, 連接器, 約束, 利益關(guān)系者, 推理 說明:與定義1對(duì)比,增加了功能和其它質(zhì)量2、模塊化技術(shù)、抽象化技術(shù)、軟件工程的基本概念3、體系結(jié)構(gòu)與描述首個(gè)標(biāo)準(zhǔn),統(tǒng)一認(rèn)識(shí)和概念為核心目的四個(gè)核心原則:1、每個(gè)系統(tǒng)都有自己的體系結(jié)構(gòu),各不相同。2、體系結(jié)構(gòu)與體系結(jié)構(gòu)描述不同。體系結(jié)構(gòu):一個(gè)系統(tǒng)的基礎(chǔ)組織,體現(xiàn)在系統(tǒng)的構(gòu)件、構(gòu)件之間的關(guān)系、構(gòu)件與環(huán)境的關(guān)系和指導(dǎo)系統(tǒng)設(shè)計(jì)和演化的準(zhǔn)則。體系結(jié)構(gòu)描述:一組對(duì)系統(tǒng)結(jié)構(gòu)進(jìn)行編檔的產(chǎn)品。體系結(jié)構(gòu)不可見。3、無論研究還是應(yīng)用,體系結(jié)構(gòu)、體系結(jié)構(gòu)描述、開發(fā)過程都是分離的。4、體系結(jié)構(gòu)的建立模型時(shí),應(yīng)留有一定的自由空間,便于具體定制。通常體系結(jié)構(gòu)應(yīng)描述為至少包含什么,而非指明它是什么。目前標(biāo)準(zhǔn)仍為參考模型。要求:標(biāo)記、理解、應(yīng)用題型分布:選擇、填空模型:現(xiàn)實(shí)的簡(jiǎn)化抽象建模技術(shù):形式化、半形式化、非形式化第二章 知識(shí)要點(diǎn)1、 構(gòu)件、連接件、約束的定義構(gòu)件:(Component)是軟件系統(tǒng)的結(jié)構(gòu)塊單元,是軟件功能設(shè)計(jì)和實(shí)現(xiàn)的承載體,因此,每個(gè)構(gòu)件都承擔(dān)著一定的功能并發(fā)揮著一定的作用,例如,中斷程序、設(shè)備驅(qū)動(dòng)程序、過程、各種功能庫、文件等。連接器:(Connector)當(dāng)構(gòu)件間聯(lián)系關(guān)系復(fù)雜時(shí),需要建立專門的連接構(gòu)件以調(diào)度和協(xié)調(diào)構(gòu)件間的關(guān)聯(lián)關(guān)系,實(shí)現(xiàn)構(gòu)件間聯(lián)系的特殊構(gòu)件稱為連接器。2、 構(gòu)件-連接器視圖及其作用構(gòu)件-連接器視圖,最重要的視圖,反映運(yùn)行時(shí)模型。(1)構(gòu)件:(Component)是軟件系統(tǒng)的結(jié)構(gòu)塊單元,是軟件功能設(shè)計(jì)和實(shí)現(xiàn)的承載體,因此,每個(gè)構(gòu)件都承擔(dān)著一定的功能并發(fā)揮著一定的作用,例如,中斷程序、設(shè)備驅(qū)動(dòng)程序、過程、各種功能庫、文件等。(2)構(gòu)件可以看做是模塊、類、對(duì)象等一個(gè)相關(guān)功能的集合。(3)構(gòu)件大都作為一個(gè)分狀的實(shí)體,其內(nèi)部結(jié)構(gòu)和信息隱藏起來。每個(gè)構(gòu)件至少有一個(gè)接口。接口是構(gòu)件與外界發(fā)生交互的窗口。與其他構(gòu)件交互時(shí),只需了解此構(gòu)件對(duì)外的接口和提供的操作服務(wù)。構(gòu)件-連接器結(jié)構(gòu):動(dòng)態(tài)的,運(yùn)行時(shí)的結(jié)構(gòu)進(jìn)程結(jié)構(gòu)并發(fā)結(jié)構(gòu)共享數(shù)據(jù)或存貯庫客戶機(jī)-服務(wù)器分解視圖,靜態(tài)結(jié)構(gòu)描述。分配視圖,投影到外部環(huán)境,又從軟件/硬件方面分為實(shí)現(xiàn)視圖(制品視圖)和部署視圖。行為視圖,考慮時(shí)間因素,追蹤和控制系統(tǒng),又分為基于消息、概要活動(dòng)、單元素行為視圖,以及轉(zhuǎn)化為用例視圖。UML是最普遍的視圖。為什么軟件體系結(jié)構(gòu)是必要的1、表述系統(tǒng)的初始概要信息,為開發(fā)早期進(jìn)行質(zhì)量分析和評(píng)估提供幫助。2、為系統(tǒng)實(shí)現(xiàn)提供約束條件。3、支撐重用和軟件生產(chǎn)線的實(shí)現(xiàn)。4、為涉眾之間的交流奠定基礎(chǔ)。5、決定如何組織團(tuán)隊(duì)和分配任務(wù)。3、 體系結(jié)構(gòu)活動(dòng):使用體系結(jié)構(gòu)稱為體系結(jié)構(gòu)活動(dòng)具體活動(dòng)包括:建模、由需求導(dǎo)出體系結(jié)構(gòu)、編檔體系結(jié)構(gòu)、基于體系結(jié)構(gòu)文檔討論、分析、評(píng)估、實(shí)現(xiàn)系統(tǒng)與體系結(jié)構(gòu)一致、用體系結(jié)構(gòu)引導(dǎo)測(cè)試、從遺留系統(tǒng)中重構(gòu)體系結(jié)構(gòu)等。4、 模式與風(fēng)格模式確定了解決一個(gè)特定問題的基本結(jié)構(gòu),但是它還是沒有給出完整詳細(xì)的方案。一個(gè)模式提供了某問題族的一般解決方案的圖式(Schema),而不是可以使用的預(yù)制模塊。你必須根據(jù)當(dāng)前設(shè)計(jì)問題的特定需求來實(shí)施這個(gè)圖式。模式有助于相似單元的構(gòu)造,這些單元在更寬泛的結(jié)構(gòu)上是相似的,但在詳細(xì)的層面上則往往很不一樣。模式有助于解決問題,但它不能提供完整的解決方案。體系結(jié)構(gòu)風(fēng)格定義了一個(gè)系統(tǒng)家族,即一個(gè)體系結(jié)構(gòu)定義一個(gè)詞匯表和一組約束。風(fēng)格與模式通常從兩個(gè)方面分類: 數(shù)據(jù)和控制風(fēng)格與模式劃分的具體為:數(shù)據(jù)流系統(tǒng)、調(diào)用返回系統(tǒng)、獨(dú)立構(gòu)件系統(tǒng)、虛擬機(jī)系統(tǒng)、中央存儲(chǔ)系統(tǒng)。數(shù)據(jù)流系統(tǒng):批處理、管道-過濾器風(fēng)格調(diào)用返回系統(tǒng):面向?qū)ο?、分層風(fēng)格面向?qū)ο箫L(fēng)格描述獨(dú)立構(gòu)件系統(tǒng):通信過程、事件驅(qū)動(dòng)風(fēng)格基于事件(event-based)的風(fēng)格,又被稱為隱式調(diào)用(implicit invocation)的風(fēng)格。在此類風(fēng)格的系統(tǒng)結(jié)構(gòu)中,組件并不直接調(diào)用一個(gè)過程,而是聲明或廣播一個(gè)或多個(gè)事件。系統(tǒng)中的其他組件可以把某一過程注冊(cè)為與它所關(guān)心的事件相關(guān)聯(lián)。當(dāng)某一事件發(fā)生時(shí),系統(tǒng)會(huì)調(diào)用所有與之相關(guān)聯(lián)的過程,即一個(gè)事件的激發(fā)隱含地導(dǎo)致了對(duì)其他模塊的過程調(diào)用隱式調(diào)用的最大不足之處在于,組件對(duì)系統(tǒng)進(jìn)行的計(jì)算放棄了主動(dòng)控制。一個(gè)組件不能假設(shè)其他組件將會(huì)對(duì)它的請(qǐng)求做出響應(yīng),也不能知道事件被處理的先后順序虛擬機(jī)系統(tǒng):翻譯、基于系統(tǒng)規(guī)則風(fēng)格中央存儲(chǔ)系統(tǒng)(倉庫):數(shù)據(jù)庫、超文本、黑板等風(fēng)格過程控制風(fēng)格:開環(huán),閉環(huán)其它系統(tǒng):C/S、B/S、WEB、P2P、BT等風(fēng)格Garlan 和Shaw給出了通用體系結(jié)構(gòu)風(fēng)格的分類 (經(jīng)典的軟件體系結(jié)構(gòu)風(fēng)格)數(shù)據(jù)流風(fēng)格:批處理序列、管道/過濾器風(fēng)格(1)管道和過濾器體系結(jié)構(gòu)模式把系統(tǒng)任務(wù)分成幾個(gè)序貫的處理步驟。這些步驟采用通過系統(tǒng)的數(shù)據(jù)流連接一個(gè)步驟的輸出是下一個(gè)步驟的輸入。每個(gè)處理步驟由一個(gè)過濾器組件實(shí)現(xiàn)。過濾器組件:是處理單元。長(zhǎng)處:系統(tǒng)易于升級(jí);過濾器組件的重用;通過重組增加了靈活性;支持并發(fā):每個(gè)過濾器作為一個(gè)單獨(dú)的執(zhí)行任務(wù),可以與其它過濾器并發(fā)執(zhí)行。短處:共享狀態(tài)信息或者昂貴或者不靈活(如果處理階段需要共享大量的全局?jǐn)?shù)據(jù),則應(yīng)用該模式就低效)不適于交互處理。往往導(dǎo)致批處理的方式。數(shù)據(jù)轉(zhuǎn)換的額外開銷(考慮進(jìn)行數(shù)值計(jì)算并使用unix管道的系統(tǒng),必須在每個(gè)過濾器中把ASCII字符轉(zhuǎn)換成實(shí)數(shù)或者將實(shí)現(xiàn)轉(zhuǎn)換成ASCII字符。一個(gè)簡(jiǎn)單的過濾器,如兩個(gè)數(shù)相加,它的絕大部分處理時(shí)間消耗在格式轉(zhuǎn)換上過程控制風(fēng)格:開環(huán),閉環(huán)調(diào)用/返回風(fēng)格:主程序/子程序、面向?qū)ο箫L(fēng)格、層次結(jié)構(gòu)獨(dú)立構(gòu)件風(fēng)格:進(jìn)程通信、事件系統(tǒng)虛擬機(jī)風(fēng)格:解釋器倉庫風(fēng)格:數(shù)據(jù)庫系統(tǒng)、黑板系統(tǒng)(2)批處理風(fēng)格(3)黑板風(fēng)格:專家系統(tǒng)Component:中央數(shù)據(jù)單元知識(shí)源控制單元中央數(shù)據(jù)單元是整個(gè)系統(tǒng)的核心部件它對(duì)系統(tǒng)需要解決的問題預(yù)先進(jìn)行了分析和定義,總結(jié)出了系統(tǒng)運(yùn)行過程中將要出現(xiàn)的各種狀態(tài),并制定了這些狀態(tài)下系統(tǒng)的相應(yīng)策略。其中的數(shù)據(jù)不只是單純的數(shù)據(jù)信息,它們代表了狀態(tài)是狀態(tài)信息。這些數(shù)據(jù)由數(shù)據(jù)源提供數(shù)據(jù)隨數(shù)據(jù)源信息的改變而變化,從而實(shí)現(xiàn)系統(tǒng)的功能。知識(shí)源:它們是知識(shí)庫中信息的來源;彼此之間在邏輯上和物理上是相互獨(dú)立的多個(gè)數(shù)據(jù)源之間通過中央數(shù)據(jù)單元協(xié)調(diào)進(jìn)行交互控制單元的驅(qū)動(dòng)完全是由知識(shí)庫的狀態(tài)變化承擔(dān)的;知識(shí)源將系統(tǒng)需要處理的信息源源不斷地輸入到知識(shí)庫中,導(dǎo)致知識(shí)庫的狀態(tài)信息發(fā)生變化,當(dāng)狀態(tài)信息的變化符合系統(tǒng)預(yù)先定義好的某些控制策略時(shí),相應(yīng)的控制單元就被觸發(fā),也就實(shí)現(xiàn)了系統(tǒng)的功能控制。(4)解釋器風(fēng)格解釋器風(fēng)格,通常被用來建立一種虛擬機(jī)以彌合程序的語義與作為 計(jì)算引擎的硬件的間隙。 解釋器實(shí)際上創(chuàng)建了一個(gè)軟件虛擬出來的機(jī)器,因此該風(fēng)格又稱為虛擬機(jī)風(fēng)格。在機(jī)器和編譯程序之間增加了一層虛擬的抽象機(jī)器。這臺(tái)虛擬的機(jī)器在任何平臺(tái)上都提供給編譯程序一個(gè)共同的接口。編譯程序只需面向虛擬機(jī),生成虛擬機(jī)能夠理解的代碼,然后由解釋器來將虛擬機(jī)代碼轉(zhuǎn)換為特定系統(tǒng)的機(jī)器碼執(zhí)行。連接件:過程調(diào)用或直接存儲(chǔ)器訪問優(yōu)點(diǎn):有助于應(yīng)用程序的可移植性和程序設(shè)計(jì)語言的跨平臺(tái)能力可以對(duì)未實(shí)現(xiàn)的硬件進(jìn)行仿真(有時(shí)實(shí)際測(cè)試可能是復(fù)雜的、昂貴的或危險(xiǎn)的)缺點(diǎn):額外的間接層次帶來了系統(tǒng)性能的下降。例如:如果不引入JIT (just in time)技術(shù)的話,java應(yīng)用程序的速度相當(dāng)慢。應(yīng)用:程序設(shè)計(jì)語言的編譯器(如java編譯器,Smalltalk編譯器)基于規(guī)則的系統(tǒng),比如Prolog語言腳本語言:比如Perl等(5)反饋控制環(huán)風(fēng)格過程控制風(fēng)格(控制流):開環(huán),閉環(huán)所謂對(duì)某個(gè)過程進(jìn)行控制,指設(shè)法使該控制過程的功能或特性有效達(dá)到所期望的目標(biāo)。目標(biāo)可以是滿足所規(guī)定的各種性能特征,也可以是在一定限制條件下,某個(gè)代表性能的量達(dá)到或者接近最佳。如果過程被充分的定義,而且操作完全是可重復(fù)的,則過程就可以在無監(jiān)督的情況下運(yùn)行。這樣的系統(tǒng)稱為開環(huán)系統(tǒng)。開環(huán)控制:是指被控對(duì)象的輸出(被控制量)對(duì)控制器(controller)的輸出沒有影響。在這種控制系統(tǒng)中,不依賴將被控量反送回來以形成任何閉環(huán)回路。閉環(huán)控制:特點(diǎn)是系統(tǒng)被控對(duì)象的輸出(被控制量)會(huì)反送回來影響控制器的輸出,形成一個(gè)或多個(gè)閉環(huán)。閉環(huán)控制系統(tǒng)有正反饋和負(fù)反饋,若反饋信號(hào)與系統(tǒng)給定值信號(hào)相反,則稱為負(fù)反饋( Negative Feedback),若極性相同,則稱為正反饋,一般閉環(huán)控制系統(tǒng)均采用負(fù)反饋,又稱負(fù)反饋控制系統(tǒng)。反饋系統(tǒng):通過對(duì)被控變量的度量來調(diào)整過程。(如PPT的供暖系統(tǒng)設(shè)計(jì)例子,根據(jù)室溫反饋控制暖氣供應(yīng)量)主要問題是數(shù)據(jù)怎樣在運(yùn)算單元之間流動(dòng)數(shù)據(jù)到了,控制(計(jì)算)單元便開始工作我們關(guān)心數(shù)據(jù)是否可用,轉(zhuǎn)換,潛伏.主要問題是控制點(diǎn)怎樣在程序或系統(tǒng)之間移動(dòng)數(shù)據(jù)可能跟著控制走,但是并不起推動(dòng)系統(tǒng)運(yùn)轉(zhuǎn)的作用關(guān)注的核心是計(jì)算順序(6)調(diào)用返回風(fēng)格主程序、子調(diào)用抽象數(shù)據(jù)類型,面向?qū)ο蟮娘L(fēng)格層次結(jié)構(gòu)調(diào)用者把要傳給被調(diào)用者的參數(shù)放在明確定義好的位置,然后調(diào)用者把控制轉(zhuǎn)交到被調(diào)用者的過程中,最后得到返回的控制。在返回點(diǎn)上,被調(diào)用的過程結(jié)果從明確定義好的位置取出,調(diào)用者繼續(xù)執(zhí)行。典型的層次,即樹狀的拓?fù)浣Y(jié)構(gòu):子程序的正確性依賴于它所調(diào)用的子程序的正確性RPC是把傳統(tǒng)本地過程調(diào)用的概念加以擴(kuò)充后引入分布式環(huán)境的一種形式. RPC的形式和行為與傳統(tǒng)本地過程調(diào)用極為相似, 差別僅在于被調(diào)用的procedure(過程)實(shí)際運(yùn)行在與調(diào)用者的場(chǎng)點(diǎn)不同的場(chǎng)點(diǎn)上遠(yuǎn)程過程調(diào)用也是相似的,一個(gè)調(diào)用進(jìn)程,一個(gè)服務(wù)器進(jìn)程;調(diào)用進(jìn)程發(fā)送給服務(wù)器進(jìn)程一條調(diào)用消息,并等待直接收到響應(yīng)的消息,調(diào)用消息包含被調(diào)用過程的參數(shù)等,響應(yīng)消息包含被調(diào)用過程的結(jié)果。一旦收到響應(yīng)消息,被調(diào)用過程的結(jié)果就會(huì)被取出,調(diào)用者將恢復(fù)執(zhí)行。遠(yuǎn)程過程調(diào)用系統(tǒng)被分解成若干部分,分別運(yùn)行于通過網(wǎng)絡(luò)連接的各臺(tái)計(jì)算機(jī)上。這種系統(tǒng)的目標(biāo)是要通過將運(yùn)算分布到多臺(tái)計(jì)算機(jī)上來充分利用多臺(tái)處理器,最終達(dá)到提高系統(tǒng)性能的目的。特點(diǎn):用共享數(shù)據(jù)獲得性能;共享數(shù)據(jù)的結(jié)構(gòu)是所有模塊必須知道的優(yōu)點(diǎn):系統(tǒng)自然分解,符合人的處理習(xí)慣;數(shù)據(jù)共享,處理效率高缺點(diǎn):改變數(shù)據(jù)的表示將影響所有的模塊數(shù)據(jù)存儲(chǔ)對(duì)所有的模塊而言都是顯式的,沒有信息隱藏系統(tǒng)構(gòu)件緊耦合,難以支持復(fù)用(7)獨(dú)立構(gòu)件風(fēng)格獨(dú)立組件風(fēng)格的體系結(jié)構(gòu)由很多獨(dú)立的通過消息交互的過程或者對(duì)象組成。這種軟件體系結(jié)構(gòu)通過對(duì)各自部分計(jì)算的解耦操作來達(dá)到易更改的目的。它們之間相互的傳輸數(shù)據(jù),但是不直接控制雙方。消息可能傳遞給:指定的參與項(xiàng) (交互過程風(fēng)格); 未指定的參與項(xiàng) 使用發(fā)布/登陸范型(事件風(fēng)格) 。獨(dú)立組件架構(gòu)的特點(diǎn)是:系統(tǒng)由松耦合的一些獨(dú)立運(yùn)行的計(jì)算單元構(gòu)成,這些單元之間通過消息傳遞信息。一般情況下,這些獨(dú)立的計(jì)算單元能夠自主地完成一些計(jì)算任務(wù)。消息的發(fā)出者通常并不知道誰會(huì)接收并處理這些消息,更不了解這些消息是如何被處理的。由于系統(tǒng)基于消息,因此有較好的并發(fā)性能,容錯(cuò)性和可伸縮性。獨(dú)立組件系統(tǒng)中通常不存在比較明顯的主-從結(jié)構(gòu)。通常只有一個(gè)比較弱的服務(wù)器,甚至沒有服務(wù)器。(8)C/S風(fēng)格適用于這樣的應(yīng)用系統(tǒng):它的數(shù)據(jù)和處理分布在一定范圍的多個(gè)構(gòu)件上,構(gòu)件之間通過網(wǎng)絡(luò)連接。簡(jiǎn)單的客戶機(jī)/服務(wù)器系統(tǒng)結(jié)構(gòu)中,應(yīng)分成兩部分??蛻魴C(jī)負(fù)責(zé)用戶輸入和展示,服務(wù)器則處理低層的功能,例如數(shù)據(jù)庫的運(yùn)作等。如果一個(gè)系統(tǒng)被劃分為兩類不同的但相互聯(lián)系的組成部分,其中一方提出對(duì)信息或服務(wù)的請(qǐng)求,而另一方提供這種信息或者服務(wù),那么這種體系結(jié)構(gòu)就可看作是一種客戶機(jī)/服務(wù)器模型。2-tier客戶機(jī)/服務(wù)器結(jié)構(gòu)兩層客戶/服務(wù)器結(jié)構(gòu):由于客戶程序直接訪問數(shù)據(jù)庫,因而每一臺(tái)客戶機(jī)都必須安裝數(shù)據(jù)庫驅(qū)動(dòng)程序,增加了系統(tǒng)安裝與維護(hù)的工作量。由于數(shù)據(jù)庫由眾多的客戶程序直接訪問,造成系統(tǒng)數(shù)據(jù)的完整性與安全性難以維護(hù)。兩層的結(jié)構(gòu)可擴(kuò)展性較差,由于客戶端組件含有數(shù)據(jù)庫訪問功能,對(duì)軟件系統(tǒng)的業(yè)務(wù)邏輯、數(shù)據(jù)庫訪問,甚至數(shù)據(jù)庫本身的任何修改常常導(dǎo)致要求在所有客戶機(jī)上重新部署客戶端組件。Client/Servers:構(gòu)件之間通過網(wǎng)絡(luò)相連接;數(shù)據(jù)和處理分布在一定范圍內(nèi)的多個(gè)構(gòu)件上表示一種把客戶應(yīng)用程序和它們使用的服務(wù)分離開的系統(tǒng)視圖。一種基于功能的分解。Component: server(服務(wù)器組件)client (客戶組件)Connector: 某種進(jìn)程間的通信機(jī)制,通常是基于RPC的交互協(xié)議; 請(qǐng)求-應(yīng)答的非對(duì)稱形式。Server組件:向多個(gè)客戶提供服務(wù),它永遠(yuǎn)處在激活狀態(tài),監(jiān)聽用戶請(qǐng)求;被動(dòng);擁有接口,接口能描述它提供的服務(wù);在收到服務(wù)請(qǐng)求之前不了解客戶機(jī)的身份client(客戶組件):通信一般是成對(duì)的,且由客戶組件發(fā)起;往返風(fēng)格;客戶需了解服務(wù)器的身份說明:通信一般是成對(duì)的,且由客戶組件發(fā)起理想情況下,這種訪問是透明的,即客戶和服務(wù)器可以運(yùn)行在同一臺(tái)機(jī)器上,也可以跨進(jìn)程、跨機(jī)器運(yùn)行。是編程語言中過程/函數(shù)/方法調(diào)用的一種泛化Client和Server都是軟件的組件,而非兩臺(tái)機(jī)器(9) Broker風(fēng)格(代理風(fēng)格)優(yōu)點(diǎn):有利于分布式的數(shù)據(jù)組織;構(gòu)件間位置透明,客戶和服務(wù)器都不用考慮對(duì)方的運(yùn)行位置;具有良好的可擴(kuò)展性,易于對(duì)服務(wù)器進(jìn)行修改、擴(kuò)展或增加服務(wù)。 (10)C2風(fēng)格構(gòu)件和構(gòu)件之間不能直接相連C2風(fēng)格是一種基于component和消息的體系結(jié)構(gòu),用于購建靈活的、可擴(kuò)展的軟件系統(tǒng)。C2風(fēng)格的體系結(jié)構(gòu)是一種層次網(wǎng)絡(luò),該網(wǎng)絡(luò)由相互協(xié)作的構(gòu)件和負(fù)責(zé)將它們鏈接在一起的連接件按照一套風(fēng)格規(guī)則組成。是一種基于構(gòu)件和消息的體系結(jié)構(gòu)風(fēng)格是一種層次網(wǎng)絡(luò)某一構(gòu)件只能感知層次高于自己的構(gòu)件所提供的服務(wù),而不能感知層次比自己更低的構(gòu)件的服務(wù)C2風(fēng)格主要用于具有圖形化用戶界面的應(yīng)用程序C2風(fēng)格之所以得名,是因?yàn)樗暮芏嗨枷雭碓从贑hiron-1用戶界面系統(tǒng),所以被命名為Chiron-2,簡(jiǎn)稱為C2。有以下幾個(gè)特點(diǎn):(1)組成規(guī)則:C2也是以構(gòu)件和連接件為基礎(chǔ)的。C2風(fēng)格中定義了構(gòu)件和連接件的頂端和底端。構(gòu)件的頂端與連接件的底端相連接構(gòu)件的底端與連接件的頂端相連接對(duì)連接到某個(gè)連接件上的構(gòu)件或連接件的數(shù)目沒有限制如果是兩個(gè)連接件發(fā)生聯(lián)系,必須要從一者的底端到另一者的頂端構(gòu)件和構(gòu)件之間不能直接相連(2)通信規(guī)則:所有構(gòu)件間的通信必須通過消息來實(shí)現(xiàn),這是構(gòu)件之間的唯一通信途徑。每個(gè)構(gòu)件都有一個(gè)頂端域、底端域。構(gòu)件的頂端域定義了構(gòu)件可以對(duì)哪些通知做出響應(yīng),以及可以發(fā)出哪些請(qǐng)求;構(gòu)件的底端域定義了可以向下層發(fā)出哪些通知,以及可以響應(yīng)下層的哪些請(qǐng)求。特點(diǎn):1. 基于組件的風(fēng)格??梢允褂萌魏纬绦蛟O(shè)計(jì)語言開發(fā)組件,并且易于重用或替換它。2. 可擴(kuò)展能力。可以有多種粒度的組件。它們可以在一個(gè)分布的、異構(gòu)的環(huán)境中運(yùn)行。對(duì)組件沒有共享地址空間的要求。組件可以是多線程的;3.組件相對(duì)獨(dú)立,組件之間的依賴比較少。4.所有組件之間的通信都通過以連接件為中介的異步消息交換機(jī)制實(shí)現(xiàn)。5、 體系結(jié)構(gòu)風(fēng)格比較(1) 管道-過濾器風(fēng)格:過濾器獨(dú)立,便于重用易于維護(hù)評(píng)估,但缺乏交互性,一般用于通信和編譯器(2)面向?qū)ο箫L(fēng)格:模塊化好,代碼封裝好,易于維護(hù)擴(kuò)展,但引用需要較高的耦合,需知道知道對(duì)象,比較適合JAVA、C#應(yīng)用(3)事件驅(qū)動(dòng)風(fēng)格:適合多元素、并發(fā)系統(tǒng)、擴(kuò)展性好,缺點(diǎn)是對(duì)系統(tǒng)控制力弱,共享數(shù)據(jù)困難,對(duì)象間關(guān)系復(fù)雜,常用于集成環(huán)境(4)分層風(fēng)格:支持抽象和重用,擴(kuò)展與維護(hù)好,但性能可能不高。一般用于通信協(xié)議(5)數(shù)據(jù)中心風(fēng)格:知識(shí)庫擴(kuò)展好,易于擴(kuò)展,適合專家系統(tǒng)、自然語言處理和模式識(shí)別應(yīng)用(6)解釋器風(fēng)格:固定的偽碼和解釋器引擎結(jié)構(gòu),適合語言解釋器(7)反饋環(huán)風(fēng)格:通過學(xué)習(xí)構(gòu)件和決策者構(gòu)件的運(yùn)用,利用學(xué)習(xí)和信息更新增強(qiáng)自身功能,適合于生產(chǎn)管理系統(tǒng)6、 異構(gòu)風(fēng)格的集成對(duì)于不能歸于某種風(fēng)格的系統(tǒng),稱為復(fù)合系統(tǒng)。對(duì)于復(fù)合系統(tǒng)的構(gòu)件模型被稱為異構(gòu)風(fēng)格。一個(gè)完善的系統(tǒng)可能由各種風(fēng)格組成。恰當(dāng)?shù)倪\(yùn)用體系結(jié)構(gòu)風(fēng)格、滿足需要的質(zhì)量屬性是最好的設(shè)計(jì)。7、 各種模式風(fēng)格的定義及其應(yīng)用領(lǐng)域8、 各種模式風(fēng)格:數(shù)據(jù)流風(fēng)格:批處理序列、管道/過濾器風(fēng)格;過程控制風(fēng)格:開環(huán),閉環(huán);調(diào)用/返回風(fēng)格:主程序/子程序、面向?qū)ο箫L(fēng)格、層次結(jié)構(gòu);獨(dú)立構(gòu)件風(fēng)格:進(jìn)程通信、事件系統(tǒng);虛擬機(jī)風(fēng)格:解釋器;倉庫風(fēng)格:數(shù)據(jù)庫系統(tǒng)、黑板系統(tǒng);其它:C/S;C2、異構(gòu)風(fēng)格、復(fù)合風(fēng)格等要求:標(biāo)記、理解、應(yīng)用題型分布:填空、選擇、分析、綜合第三章 知識(shí)要點(diǎn)1、軟件體系結(jié)構(gòu)描述非形式化的問題當(dāng)前對(duì)軟件體系結(jié)構(gòu)的描述在很大程度上還停留在非形式化的基礎(chǔ)上,依賴于軟件設(shè)計(jì)師個(gè)人的經(jīng)驗(yàn)和技巧。非形式化的描述不易被開發(fā)人員理解,不利于分析和開發(fā)的進(jìn)行。形式化的、規(guī)范化的體系結(jié)構(gòu)描述對(duì)于體系結(jié)構(gòu)的設(shè)計(jì)和理解都是非常重要的。由非形式化到形式化的過程。非形式化問題:(1)語義模糊(2)溝通障礙,模糊是根源(3)無法實(shí)現(xiàn)系統(tǒng)驗(yàn)證,缺乏一致性和完整性(4)不適合描述體系結(jié)構(gòu)行為,模糊,無法計(jì)算,不能表示動(dòng)態(tài)行為,不能超越功能和模塊交互描述形式化方法:可在不同層次描述系統(tǒng)利于計(jì)算和分析驗(yàn)證可采用自動(dòng)化方法典型方法:Petri網(wǎng),1962Z語言,1997體系結(jié)構(gòu)描述語言(ADL)描述方法的種類: 圖形表達(dá)工具 模塊內(nèi)連接語言 基于軟構(gòu)件的系統(tǒng)描述語言 軟件體系結(jié)構(gòu)描述語言 - 圖形表達(dá)工具:簡(jiǎn)潔易懂,容易使用,使用廣泛,不規(guī)范,不精確 模塊內(nèi)連接語言 :采用將一種或幾種傳統(tǒng)程序設(shè)計(jì)語言的模塊連接起來的模塊內(nèi)連接語言(MIL)。由于程序設(shè)計(jì)語言和模塊內(nèi)連接語言具有嚴(yán)格的語義基礎(chǔ),因此它們能支持對(duì)較大的軟件單元進(jìn)行描述,諸如定義/使用和扇入/扇出等操作。例如,Ada語言采用use實(shí)現(xiàn)包的重用,Pascal語言采用過程(函數(shù))模塊的交互等。MIL方式對(duì)模塊化的程序設(shè)計(jì)和分段編譯等程序設(shè)計(jì)與開發(fā)技術(shù)確實(shí)發(fā)揮了很大的作用。但是由于這些語言處理和描述的軟件設(shè)計(jì)開發(fā)層次過于依賴程序設(shè)計(jì)語言,因此限制了它們處理和描述比程序設(shè)計(jì)語言元素更為抽象的高層次軟件體系結(jié)構(gòu)元素的能力。 基于軟構(gòu)件的系統(tǒng)描述語言基于軟構(gòu)件的系統(tǒng)描述語言將軟件系統(tǒng)描述成一種是由許多以特定形式相互作用的特殊軟件實(shí)體構(gòu)造組成的組織或系統(tǒng)。例如,一種多變配置語言就可以用來在一個(gè)較高的抽象層次上對(duì)系統(tǒng)的體系結(jié)構(gòu)建模,Darwin最初用作設(shè)計(jì)和構(gòu)造復(fù)雜分布式系統(tǒng)的配置說明語言,因具有動(dòng)態(tài)特性,也可用來描述動(dòng)態(tài)體系結(jié)構(gòu)。這種表達(dá)和描述方式雖然也是較好的一種以構(gòu)件為單位的軟件系統(tǒng)描述方法,但是他們所面向和針對(duì)的系統(tǒng)元素仍然是一些層次較低的以程序設(shè)計(jì)為基礎(chǔ)的通信協(xié)作軟件實(shí)體單元,而且這些語言所描述和表達(dá)的系統(tǒng)一般而言都是面向特定應(yīng)用的特殊系統(tǒng),這些特性使得基于軟構(gòu)件的系統(tǒng)描述仍然不是十分適合軟件體系結(jié)構(gòu)的描述和表達(dá)。 軟件體系結(jié)構(gòu)描述語言軟件體系結(jié)構(gòu)的第四種描述和表達(dá)方法是參照傳統(tǒng)程序設(shè)計(jì)語言的設(shè)計(jì)和開發(fā)經(jīng)驗(yàn),重新設(shè)計(jì)、開發(fā)和使用針對(duì)軟件體系結(jié)構(gòu)特點(diǎn)的專門的軟件體系結(jié)構(gòu)描述語言ADL。由于ADL是在吸收了傳統(tǒng)程序設(shè)計(jì)中的語義嚴(yán)格精確的特點(diǎn)基礎(chǔ)上,針對(duì)軟件體系結(jié)構(gòu)的整體性和抽象性特點(diǎn),定義和確定適合于軟件體系結(jié)構(gòu)表達(dá)與描述的有關(guān)抽象元素,因此,ADL是當(dāng)前軟件開發(fā)和設(shè)計(jì)方法學(xué)中一種發(fā)展很快的軟件體系結(jié)構(gòu)描述方法,目前,已經(jīng)有幾十種常見的ADL。軟件體系結(jié)構(gòu)描述語言簡(jiǎn)介:ADL(體系結(jié)構(gòu)描述語言)提供了具體的語法與刻畫體系結(jié)構(gòu)的概念框架。ADL使得系統(tǒng)開發(fā)者能夠很好地描述他們?cè)O(shè)計(jì)的體系結(jié)構(gòu),以便與他人交流,能夠用提供的工具對(duì)許多實(shí)例進(jìn)行分析。基于RUP(Rational United Process)、采用UML模型描述軟件的體系結(jié)構(gòu),認(rèn)為體系結(jié)構(gòu)描述的關(guān)鍵是定義視點(diǎn)、視圖以及建模元素之間的映射關(guān)系。(4個(gè)視點(diǎn)、7個(gè)體系結(jié)構(gòu)視圖)ADL是在底層語義模型的支持下,為軟件系統(tǒng)的概念體系結(jié)構(gòu)建模提供了具體語法和概念框架?;诘讓诱Z義的工具為體系結(jié)構(gòu)的表示、分析、演化、細(xì)化、設(shè)計(jì)過程等提供支持。其三個(gè)基本元素是:構(gòu)件、連接件、體系結(jié)構(gòu)配置。主要的體系結(jié)構(gòu)描述語言有Aesop、MetaH、C2、Rapide、SADL、Unicon和Wright等,盡管它們都描述軟件體系結(jié)構(gòu),卻有不同的特點(diǎn)。這些ADL強(qiáng)調(diào)了體系結(jié)構(gòu)不同的側(cè)面,對(duì)體系結(jié)構(gòu)的研究和應(yīng)用起到了重要的作用,但也有負(fù)面的影響。每一種ADL都以獨(dú)立的形式存在,描述語法不同且互不兼容,同時(shí)又有許多共同的特征,這使設(shè)計(jì)人員很難選擇一種合適的ADL,若設(shè)計(jì)特定領(lǐng)域的軟件體系結(jié)構(gòu)又需要從頭開始描述。 軟件體系結(jié)構(gòu)的定義 Mary Shaw和David Garlan (1993年)軟件體系結(jié)構(gòu)是軟件設(shè)計(jì)過程中的一個(gè)層次,這一層次超越計(jì)算過程中的算法設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)。體系結(jié)構(gòu)問題包括總體組織和全局控制,通訊協(xié)議,同步,數(shù)據(jù)存取,給設(shè)計(jì)元素分配特定功能,設(shè)計(jì)元素的組織、規(guī)模和性能,在各設(shè)計(jì)方案間進(jìn)行選擇等。軟件體系結(jié)構(gòu)處理算法與數(shù)據(jù)結(jié)構(gòu)之上關(guān)于整體系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和描述方面的一些問題,如全局組織和全局控制結(jié)構(gòu)、關(guān)于通訊、同步與數(shù)據(jù)存取的協(xié)議,設(shè)計(jì)構(gòu)件功能定義,物理分布與合成,設(shè)計(jì)方案的選擇、評(píng)估與實(shí)現(xiàn)等。軟件體系結(jié)構(gòu) 構(gòu)件,連接件,約束 ADL與其他語言的比較:典型的ADL在充分繼承和吸收傳統(tǒng)程序設(shè)計(jì)語言的精確性和嚴(yán)格性特點(diǎn)的同時(shí),還應(yīng)具有:構(gòu)造、抽象、重用、組合、異構(gòu)、分析和推理等各種能力和特性。 構(gòu)造能力:ADL能夠使用較小的獨(dú)立體系結(jié)構(gòu)元素來建造大型軟件系統(tǒng); 抽象能力:ADL使得軟件體系結(jié)構(gòu)中的構(gòu)件和連接件描述可以只關(guān)注它們的抽象特性,而不管其具體的實(shí)現(xiàn)細(xì)節(jié); 重用能力:ADL使得組成軟件系統(tǒng)的構(gòu)件、連接件甚至是軟件體系結(jié)構(gòu)都成為軟件系統(tǒng)開發(fā)和設(shè)計(jì)的可重用部件; 組合能力:ADL使得其描述的每一系統(tǒng)元素都有其自己的局部結(jié)構(gòu),這種描述局部結(jié)構(gòu)的特點(diǎn)使得ADL支持軟件系統(tǒng)的動(dòng)態(tài)變化組合; 異構(gòu)能力:ADL允許多個(gè)不同的體系結(jié)構(gòu)描述關(guān)聯(lián)存在; 分析和推理能力:ADL允許對(duì)其描述的體系結(jié)構(gòu)進(jìn)行多種不同的性能和功能上的多種推理分析。 ADL與需求語言的區(qū)別:后者描述的是問題空間,而前者扎根于解空間。 ADL與建模語言的區(qū)別:后者對(duì)整體行為的關(guān)注要大于對(duì)部分的關(guān)注,而ADL集中在構(gòu)件的表示上。 ADL與傳統(tǒng)的程序設(shè)計(jì)語言的構(gòu)成元素既有許多相同和相似之處,又各自有著很大的不同。 典型元素含義比較 常見的軟件體系結(jié)構(gòu)元素軟件體系結(jié)構(gòu)的基本構(gòu)成要素:構(gòu)件、連接件、體系結(jié)構(gòu)配置。(1)構(gòu)件:一個(gè)計(jì)算單元或數(shù)據(jù)存儲(chǔ);是計(jì)算與狀態(tài)存在的場(chǎng)所。構(gòu)件包含的多種屬性:接口、類型、語義、約束、演化和非功能屬性等。(2)連接件:用來建立構(gòu)件間的交互以及支配這些交互規(guī)則的體系結(jié)構(gòu)構(gòu)造模塊。連接件可以不與實(shí)現(xiàn)系統(tǒng)中的編譯單元對(duì)應(yīng)。異構(gòu)連接。連接件包含的屬性:角色。(3)體系結(jié)構(gòu)配置或拓?fù)洌好枋鲶w系結(jié)構(gòu)的構(gòu)件與連接件的連接圖。同時(shí)檢查語法、說明語義。多視圖、多場(chǎng)景的體系結(jié)構(gòu)說明方法。在不同層次上描述軟件系統(tǒng);異構(gòu)情況下的配置。 ADL的構(gòu)成要素 軟件體系結(jié)構(gòu)的設(shè)計(jì)在需求分析之后,軟件設(shè)計(jì)之前。描述好體系結(jié)構(gòu),做好承上啟下的工作很重要。一方面:體系結(jié)構(gòu)描述如何向其他文檔轉(zhuǎn)移;另一方面:如何利用需求分析成果來直接生成系統(tǒng)的體系結(jié)構(gòu)說明。現(xiàn)在的ADL大多與領(lǐng)域相關(guān)。目前還沒有通用的體系結(jié)構(gòu)描述語言。當(dāng)前常見的一些體系結(jié)構(gòu)描述語言、方法:ACME 、Wright 、C2、UniCon 、Darwin、AESOP Rapide、Weaves、SADL、UML、Gestalt、Demeter、FR、ControlH & MetaH C2風(fēng)格 通過連接件綁定在一起的按照一組規(guī)則運(yùn)作的并行構(gòu)件網(wǎng)絡(luò)。C2風(fēng)格中的系統(tǒng)組織規(guī)則如下: 系統(tǒng)中的構(gòu)件和連接件都有一個(gè)頂部和一個(gè)底部; 構(gòu)件的頂部應(yīng)連接到某連接件的底部,構(gòu)件的底部則應(yīng)連接到某連接件的頂部,而構(gòu)件與構(gòu)件之間的直接連接是不允許的; 一個(gè)連接件可以和任意數(shù)目的其它構(gòu)件和連接件連接; 當(dāng)兩個(gè)連接件進(jìn)行直接連接時(shí),必須由其中一個(gè)的底部到另一個(gè)的頂部。 C2背景知識(shí) C2是一種用于用戶界面密集的系統(tǒng)的軟件體系結(jié)構(gòu)風(fēng)格。在C2風(fēng)格的體系結(jié)構(gòu)中,連接件在構(gòu)件之間轉(zhuǎn)發(fā)消息,構(gòu)件負(fù)責(zé)維護(hù)狀態(tài),進(jìn)行操作,通過兩個(gè)接口(頂端接口和底端接口)和其他構(gòu)件交換消息。構(gòu)件之間不能發(fā)送消息,必須通過連接件。構(gòu)件之間的通信只能通過消息傳遞來實(shí)現(xiàn),不允許使用共享內(nèi)存方式通信。 C2風(fēng)格的中心原則C2風(fēng)格的中心原則是有限可視原則,或者說是下層獨(dú)立的原則:在C2風(fēng)格的體系結(jié)構(gòu)中,某一構(gòu)件只能感知層次高于自己的構(gòu)件所提供的服務(wù),而不能感知到層次比自己更低的構(gòu)件的服務(wù)。這種單向的傳遞性,有利于系統(tǒng)的維護(hù)和擴(kuò)展。 C2風(fēng)格的通信規(guī)則C2中,所有構(gòu)件間的通信必須通過消息來實(shí)現(xiàn),這也是構(gòu)件之間的唯一通信途徑。每個(gè)構(gòu)件都有一個(gè)頂端域、一個(gè)底端域。構(gòu)件的頂端域定義了構(gòu)件可以對(duì)哪些通知做出響應(yīng),以及可以發(fā)出哪些請(qǐng)求;構(gòu)件的底端域定義了可以向下層發(fā)送哪些通知,以及可以響應(yīng)下層的哪些請(qǐng)求。 C2概述 C2和其提供的設(shè)計(jì)環(huán)境(Argo)支持采用基于時(shí)間的風(fēng)格來描述用戶界面系統(tǒng),并支持使用可替換、可重用的構(gòu)件開發(fā)GUI的體系結(jié)構(gòu)。 在C2中,連接件負(fù)責(zé)構(gòu)件之間消息的傳遞,而構(gòu)件維持狀態(tài)、執(zhí)行操作并通過兩個(gè)名字分別為“top”和“bottom”的端口和其它的構(gòu)件交換信息。 每個(gè)接口包含一種可發(fā)送的消息和一組可接收的消息。構(gòu)件之間的消息要么是請(qǐng)求其它構(gòu)件執(zhí)行某個(gè)操作的請(qǐng)求消息,要么是通知其他構(gòu)件自身執(zhí)行了某個(gè)操作或狀態(tài)發(fā)生改變的通知消息。 構(gòu)件之間的消息交換不能直接進(jìn)行,而只能通過連接件來完成。每個(gè)構(gòu)件接口最多只能和一個(gè)連接件相連,而連接件可以和任意數(shù)目的構(gòu)件或連接件相連。 請(qǐng)求消息只能向上層傳送而通知消息只能向下層傳送。 通知消息的傳遞只對(duì)應(yīng)于構(gòu)件內(nèi)部的操作,而和接收消息的構(gòu)件的需求無關(guān)。 C2對(duì)構(gòu)件和連接件的實(shí)現(xiàn)語言、實(shí)現(xiàn)構(gòu)件的線程控制、構(gòu)件的部署以及連接件使用的通訊協(xié)議等都不加限制。1、 軟件體系結(jié)構(gòu)描述2、 軟件體系結(jié)構(gòu)的定義 Mary Shaw和David Garlan (1993年)軟件體系結(jié)構(gòu)是軟件設(shè)計(jì)過程中的一個(gè)層次,這一層次超越計(jì)算過程中的算法設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)。體系結(jié)構(gòu)問題包括總體組織和全局控制,通訊協(xié)議,同步,數(shù)據(jù)存取,給設(shè)計(jì)元素分配特定功能,設(shè)計(jì)元素的組織、規(guī)模和性能,在各設(shè)計(jì)方案間進(jìn)行選擇等。軟件體系結(jié)構(gòu)處理算法與數(shù)據(jù)結(jié)構(gòu)之上關(guān)于整體系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和描述方面的一些問題,如全局組織和全局控制結(jié)構(gòu)、關(guān)于通訊、同步與數(shù)據(jù)存取的協(xié)議,設(shè)計(jì)構(gòu)件功能定義,物理分布與合成,設(shè)計(jì)方案的選擇、評(píng)估與實(shí)現(xiàn)等。軟件體系結(jié)構(gòu) 構(gòu)件,連接件,約束 3、 UML UML(Unified Modeling Language)是下面這些最好的建模方法中最好部分的集成: 商務(wù)流程模型(Work Flow) 對(duì)象建模方法 軟構(gòu)件建模思想 UML是一種用可視化方法對(duì)軟件系統(tǒng)進(jìn)行描述、實(shí)施和說明的標(biāo)準(zhǔn)語言。 支持用不同實(shí)現(xiàn)技術(shù)進(jìn)行的軟件開發(fā)全過程。用例圖:用于顯示若干角色以及這些角色與系統(tǒng)提供的用例之間的連接關(guān)系。用例是系統(tǒng)提供的功能的描述。類圖:表示系統(tǒng)中的類和類與類之間的關(guān)系,它是對(duì)系統(tǒng)靜態(tài)結(jié)構(gòu)的描述順序圖:用來反映若干個(gè)對(duì)象之間的動(dòng)態(tài)協(xié)作關(guān)系,也就是隨著時(shí)間的推移,對(duì)象之間是如何交互的 協(xié)作圖:描述對(duì)象間的協(xié)作關(guān)系,協(xié)作圖跟順序圖相似,顯示對(duì)象間的動(dòng)態(tài)合作關(guān)系。如果強(qiáng)調(diào)時(shí)間和順序,則使用順序圖;如果強(qiáng)調(diào)上下級(jí)關(guān)系,則選擇協(xié)作圖。這兩種圖合稱為交互圖。 狀態(tài)圖:描述類的對(duì)象所有可能的狀態(tài)以及事件發(fā)生時(shí)狀態(tài)的轉(zhuǎn)移條件。通常,狀態(tài)圖是對(duì)類圖的補(bǔ)充活動(dòng)圖:描述滿足用例要求所要進(jìn)行的活動(dòng)以及活動(dòng)間的約束關(guān)系,有利于識(shí)別并行活動(dòng)構(gòu)建圖:描述代碼構(gòu)件的物理結(jié)構(gòu)及各構(gòu)件之間的依賴關(guān)系部署圖:部署圖定義系統(tǒng)中軟硬件的物理體系結(jié)構(gòu)(1) 用例圖:用于顯示若干角色以及這些角色與系統(tǒng)提供的用例之間的連接關(guān)系。用例是系統(tǒng)提供的功能的描述。(2) 類圖:表示系統(tǒng)中的類和類與類之間的關(guān)系,它是對(duì)系統(tǒng)靜態(tài)結(jié)構(gòu)的描述(3) 順序圖:用來反映若干個(gè)對(duì)象之間的動(dòng)態(tài)協(xié)作關(guān)系,也就是隨著時(shí)間的推移,對(duì)象之間是如何交互的(4) 協(xié)作圖:描述對(duì)象間的協(xié)作關(guān)系,協(xié)作圖跟順序圖相似,顯示對(duì)象間的動(dòng)態(tài)合作關(guān)系。如果強(qiáng)調(diào)時(shí)間和順序,則使用順序圖;如果強(qiáng)調(diào)上下級(jí)關(guān)系,則選擇協(xié)作圖。這兩種圖合稱為交互圖。 (5) 狀態(tài)圖:描述類的對(duì)象所有可能的狀態(tài)以及事件發(fā)生時(shí)狀態(tài)的轉(zhuǎn)移條件。通常,狀態(tài)圖是對(duì)類圖的補(bǔ)充(6) 活動(dòng)圖:描述滿足用例要求所要進(jìn)行的活動(dòng)以及活動(dòng)間的約束關(guān)系,有利于識(shí)別并行活動(dòng)(7) 構(gòu)建圖:描述代碼構(gòu)件的物理結(jié)構(gòu)及各構(gòu)件之間的依賴關(guān)系(8) 部署圖:部署圖定義系統(tǒng)中軟硬件的物理體系結(jié)構(gòu)4、 直接使用UML建模:UML的四層元模型體系結(jié)構(gòu):元-元模型層定義了元模型層的規(guī)格說明語言;元模型層為給定的建模語言定義規(guī)格說明;模型層用來定義特定軟件系統(tǒng)的模型;用戶對(duì)象用來構(gòu)建給定模型的特定實(shí)例。 語義約束由對(duì)象約束語言O(shè)CL表示,OCL基于一階謂詞邏輯,每一個(gè)OCL表達(dá)式都處于一些UML模型元素的背景下(由“self”引用),可使用該元素的屬性和關(guān)系作為其項(xiàng)(term),同時(shí)OCL定義了在集合(sets)、袋(bags)等上的公共操作集和遍歷建模元素間關(guān)系的構(gòu)造,因此,其它建模元素的屬性也可以作為它的項(xiàng)。 UML中的通用表示 (1)字符串:表示有關(guān)模型的信息;(2)名字:表示模型元素;(3)標(biāo)號(hào):不同于編程語言中的標(biāo)號(hào),是用于表示或說明圖形符號(hào)的字符串;(4)特殊字符串:表示某一模型元素的特性;(5)類型表達(dá)式:聲明屬性、變量及參數(shù),含義同編程語言中的類型表達(dá)式;(6)實(shí)體類型:它是UML的擴(kuò)充機(jī)制,運(yùn)用實(shí)體類型可定義新類型的模型元素;(7)語義部分是對(duì)UML的準(zhǔn)確表示,由三部分組成。 UML語義部分 通用元素:主要描述UML中各元素的語義。通用元素是UML中的基本構(gòu)造單位,包括模型元素和視圖元素,模型元素用來構(gòu)造系統(tǒng),視圖元素用來構(gòu)成系統(tǒng)的表示成分; 通用機(jī)制:主要描述使UML保持簡(jiǎn)單和概念上一致的機(jī)制的語義。包括定制、標(biāo)記值、注記、約束、依賴關(guān)系、類型-實(shí)例、類型-類的對(duì)應(yīng)關(guān)系等機(jī)制; 通用類型:主要描述UML中各種類型的語義。這些類型包括布爾類型、表達(dá)式類型、列表類型、多重性類型、名字類型、坐標(biāo)類型、字符串類型、時(shí)間類型、用戶自定義類型等。三部分不是相互獨(dú)立的,而是相互交叉重疊、緊密相連,共同構(gòu)成了UML的完整語義。5、 UML模型6、 面向?qū)ο?、面向體系結(jié)構(gòu)7、 各種風(fēng)格特性、要求:標(biāo)記、理解、應(yīng)用題型分布:簡(jiǎn)答、分析、綜合第四章 軟件體系結(jié)構(gòu)級(jí)別的設(shè)計(jì)策略(課件第五章)1、 軟件體系結(jié)構(gòu)的設(shè)計(jì)(1)體系結(jié)構(gòu)設(shè)計(jì)的原則基本原則: 抽象:抽象是人們用來處理復(fù)雜性問題的基本原理之一。抽象有幾種形式,如數(shù)據(jù)抽象、對(duì)象抽象、實(shí)體抽象、行為抽象、過程抽象、虛擬機(jī)抽象等。數(shù)據(jù)、實(shí)體的抽象使得軟件操作的對(duì)象和參數(shù)是針對(duì)邏輯結(jié)構(gòu),而非存儲(chǔ)結(jié)構(gòu)的。行為、過程的抽象使得操作的指派是依據(jù)標(biāo)識(shí)而非地址,由此產(chǎn)生了操作的接口和動(dòng)態(tài)約束描述。在處理系統(tǒng)復(fù)雜性方面,抽象起到了重要作用。減少部件耦合、接口與實(shí)現(xiàn)的分離等,都得益于抽象。抽象的一個(gè)重要特性就是可替換性。對(duì)象的抽象把具有相同基類的導(dǎo)出類看作是同類,加上過程抽象帶來的在過程名稱下的“偷梁換柱”,因此實(shí)現(xiàn)了動(dòng)態(tài)約束,使面向抽象問題而不是實(shí)際結(jié)構(gòu)的抽象程序設(shè)計(jì)得以實(shí)現(xiàn)。大量的結(jié)構(gòu)模式和應(yīng)用問題都是基于這個(gè)思想而得到實(shí)現(xiàn)的。 分而治之:這條原理是眾所周知的,它來自古時(shí)的政治,也來自諸如歸并分類的組合算法。在軟件體系結(jié)構(gòu)中該原理得到大量應(yīng)用。例如,自上而下設(shè)計(jì)將一個(gè)任務(wù)或部件分成可以獨(dú)立設(shè)計(jì)的更小的部分。該原理經(jīng)常被用來作為實(shí)現(xiàn)注意點(diǎn)分離的方法。 封裝和信息隱蔽:封裝是將構(gòu)成抽象的屬性和行為結(jié)合在一起,并區(qū)分不同抽象的方法。封裝為不同抽象之間提供了明確的界限。封裝有利于非功能特性實(shí)現(xiàn),例如可變性和可重用性。封裝包括內(nèi)部構(gòu)成和操作服務(wù)兩個(gè)方面。例如,通過對(duì)象、模塊設(shè)計(jì)和訪問接口設(shè)計(jì)分別提供了這兩種封裝。信息隱蔽是軟件工程的最基本和最重要的原理之一。信息隱蔽對(duì)用戶隱藏了部件的實(shí)現(xiàn)細(xì)節(jié),用來更好地處理系統(tǒng)的復(fù)雜性和減少各部件之間的耦合。為了更好地應(yīng)用,用戶不需要知道的細(xì)節(jié)都應(yīng)該由部件隱藏起來。封裝原理經(jīng)常被用來作為實(shí)現(xiàn)信息隱藏的方法。信息隱藏也可以通過接口與實(shí)現(xiàn)的分離的原理來實(shí)現(xiàn)。然而,部件應(yīng)該隱藏什么取決于具體的應(yīng)用。在一個(gè)應(yīng)用中客戶不需要知道的方面或許在另外一個(gè)應(yīng)用中就需要看到。例如,在一個(gè)應(yīng)用中為了提高運(yùn)行性能,可能需要對(duì)某一部件的內(nèi)部數(shù)據(jù)結(jié)構(gòu)進(jìn)行直接訪問;而在另外一個(gè)應(yīng)用中,可能因?yàn)閷?duì)其性能已經(jīng)滿意了,就不需要對(duì)其數(shù)據(jù)的直接訪問了。 模塊化:模塊化主要關(guān)心的是如何將一個(gè)軟件系統(tǒng)分解成子系統(tǒng)和部件,其主要任務(wù)就是決定怎樣將構(gòu)成應(yīng)用的邏輯結(jié)構(gòu)物理地分割成代碼實(shí)體。模塊化的主要做法,就是在一個(gè)系統(tǒng)內(nèi)引入具有良好定義的分界,依此來處理系統(tǒng)的復(fù)雜性。模塊的作用是為了一個(gè)應(yīng)用的功能和責(zé)任的物理容器。模塊化與封裝原理的聯(lián)系非常密切。由此帶來了復(fù)雜系統(tǒng)資源管理、維護(hù)和應(yīng)用的邏輯和條理性,增加了應(yīng)用設(shè)計(jì)的靈活性。另外它對(duì)于系統(tǒng)的運(yùn)行設(shè)計(jì)和管理調(diào)度也提供了方便,例如,對(duì)于動(dòng)態(tài)鏈接庫的選擇應(yīng)用、程序運(yùn)行體的覆蓋和交換都是十分有益的。 高內(nèi)聚和低耦合:耦合和內(nèi)聚最初是作為結(jié)構(gòu)化設(shè)計(jì)方法的部分原理而提出的。耦合強(qiáng)調(diào)模塊之間的特征,而內(nèi)聚強(qiáng)調(diào)模塊內(nèi)部的特性。耦合是用來衡量一個(gè)模塊同另一個(gè)模塊的聯(lián)系的緊密程度的(模塊之間)。緊密的耦合就會(huì)使系統(tǒng)變得復(fù)雜,因?yàn)槿绻粋€(gè)模塊和另外的模塊有很密切的關(guān)聯(lián)的話,這個(gè)模塊就很難理解、調(diào)試、維護(hù)。通過弱耦合部件的設(shè)計(jì)可以降低系統(tǒng)的復(fù)雜性。內(nèi)聚用來衡量單一模塊內(nèi)功能和元素間聯(lián)系性的程度。內(nèi)聚有幾種形式。最期望獲得的是功能內(nèi)聚,它說明一個(gè)模塊或是部件內(nèi)的所有元素都協(xié)同來提供具有良好邊界的行為。最差的形式是偶然內(nèi)聚,這種形式將毫無聯(lián)系的抽象放置在同一模塊之中。其他形式的內(nèi)聚還有:邏輯內(nèi)聚、時(shí)間內(nèi)聚、過程內(nèi)聚、通信內(nèi)聚、順序內(nèi)聚和不規(guī)則內(nèi)聚 關(guān)注點(diǎn)分離:不同和無關(guān)聯(lián)的責(zé)任應(yīng)該在軟件系統(tǒng)中分離開來,讓它們出現(xiàn)在不同的部件中。相互協(xié)作完成某一個(gè)特定任務(wù)的部件應(yīng)該和在其他任務(wù)中執(zhí)行計(jì)算的部分分離開來。如果一個(gè)部件在不同的環(huán)境下扮演著不同的角色,在部件中這些角色應(yīng)該獨(dú)立且相互分離。例如,在多層體系結(jié)構(gòu)的組件設(shè)計(jì)中,在多種應(yīng)用場(chǎng)景中擔(dān)任不同角色的同一個(gè)組件,需要和可以使用不同的接口定義。這樣,對(duì)某一角色開放的只是與角色相關(guān)的信息和服務(wù),避免了過多暴露所造成對(duì)應(yīng)用設(shè)計(jì)的負(fù)擔(dān)和混亂,又保證了組件運(yùn)行的可靠和安全。 策略和實(shí)現(xiàn)的分離:軟件系統(tǒng)的部件應(yīng)該實(shí)現(xiàn)策略或處理問題,但不能同時(shí)處理兩者。策略部件負(fù)責(zé)處理上下文相關(guān)的決策、信息的語義和解釋的知識(shí)、把不相交計(jì)算組合形成結(jié)果、對(duì)參數(shù)值進(jìn)行選擇等問題。實(shí)現(xiàn)部件負(fù)責(zé)全面規(guī)范算法的執(zhí)行,執(zhí)行中不需要對(duì)上下文相關(guān)信息進(jìn)行決策。上下文和解釋是部件外部施加的,它通常由傳給部件的參數(shù)提供。由于獨(dú)立于特定的上下文環(huán)境,純實(shí)現(xiàn)部件更容易重用和維護(hù),而策略部件通常是與特定應(yīng)用相關(guān)的,需要隨著應(yīng)用的變化而變化。如果不能將一個(gè)軟件體系結(jié)構(gòu)分解成策略和實(shí)現(xiàn)的不同部件,至少應(yīng)該在一個(gè)部件內(nèi)將策略和實(shí)現(xiàn)的功能加以分離。 接口和實(shí)現(xiàn)的分離任何一個(gè)部件都應(yīng)該包含兩個(gè)部分,接口和實(shí)現(xiàn)。接口部分定義了部件所提供的功能,并規(guī)范了功能的使用方法。該接口對(duì)部件的客戶是可訪問的。該類型的輸出接口是由函數(shù)原型構(gòu)成的。實(shí)現(xiàn)部分包括了實(shí)現(xiàn)部件所提供功能的實(shí)際代碼。實(shí)現(xiàn)部分還可以包含只服務(wù)于部件內(nèi)部操作的另外的函數(shù)和數(shù)據(jù)結(jié)構(gòu)。實(shí)現(xiàn)部分對(duì)部件客戶來說是不可用的。該原理的主要目的是防止部件的客戶接觸到實(shí)現(xiàn)的細(xì)節(jié),而只為客戶提供部件的接口規(guī)范和使用方法。另外,該原理還允許獨(dú)立于其他部件的應(yīng)用而實(shí)現(xiàn)一個(gè)部件的功能。就像封裝一樣,接口和實(shí)現(xiàn)的分離也是一種用來獲得信息隱藏的技術(shù)。該原理強(qiáng)調(diào)“一個(gè)客戶只應(yīng)該知道它需要知道的東西”。接口和實(shí)現(xiàn)的分離也支持可變性。如果部件的接口和實(shí)現(xiàn)分離,那么它就更容易在系統(tǒng)中進(jìn)行改變。這種分離避免了客戶直接受到部件變化的影響。該原理使部件行為和表示的改變特別容易,尤其是那些不影響接口的改變,例如對(duì)運(yùn)行性能的提高。(2)體系結(jié)構(gòu)設(shè)計(jì)方法的元模型元模型是對(duì)各種體系結(jié)構(gòu)設(shè)計(jì)模型的抽象。元模型中有三處用到了領(lǐng)域知識(shí)的概念。要區(qū)分幾種特殊化的“領(lǐng)域”概念:?jiǎn)栴}領(lǐng)域知識(shí)、商業(yè)領(lǐng)域知識(shí)、解決方案領(lǐng)域知識(shí)、通用知識(shí),等等。(3)體系結(jié)構(gòu)設(shè)計(jì)方法的分析體系結(jié)構(gòu)設(shè)計(jì)方法分類為:工件驅(qū)動(dòng)(artifact-driven)的方法:特點(diǎn):從方法的工件描述中提取體系結(jié)構(gòu)描述。工件驅(qū)動(dòng)的體系結(jié)構(gòu)設(shè)計(jì)方法的例子包括廣為流行的面向?qū)ο蠓治龊驮O(shè)計(jì)方法OMT和OAD。缺點(diǎn):文本形式的系統(tǒng)需求不夠清楚、精確、完整。以它作為導(dǎo)出體系結(jié)構(gòu)抽象的來源作用不夠。子系統(tǒng)的語義過于簡(jiǎn)單,難以作為體系結(jié)構(gòu)構(gòu)件。對(duì)子系統(tǒng)的組合支持不足用例驅(qū)動(dòng)(use-case-driven)的方法:用例驅(qū)動(dòng)的體系結(jié)構(gòu)設(shè)計(jì)方法主要從用例導(dǎo)出體系結(jié)構(gòu)抽象。目的:作為系統(tǒng)預(yù)期功能及其環(huán)境的模型,并在客戶和開發(fā)者之間起到合約的作用。一個(gè)用例,是指系統(tǒng)進(jìn)行的一個(gè)活動(dòng)序列,它為參與者提供一些結(jié)果值。參與者通過用例使用系統(tǒng)。參與者和用例共同構(gòu)成了用例模型。統(tǒng)一過程使用的是一種用例驅(qū)動(dòng)的體系結(jié)構(gòu)設(shè)計(jì)方法。它由核心工作流組成。核心工作流定義了過程的靜態(tài)內(nèi)容,用活動(dòng)、工人和工件描述了過程。隨時(shí)間變化的過程的組織被定義為階段。統(tǒng)一過程由6個(gè)核心工作流組成:商業(yè)模型、需求、分析、設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試。這些核心工作流的結(jié)果分別是下列模型:商業(yè)和領(lǐng)域模型、用例模型、分析模型、設(shè)計(jì)模型、實(shí)現(xiàn)模型和測(cè)試模型。在需求工作流中,以用例的形式捕捉客戶的需求,構(gòu)成用例模型。這一過程在上圖中被定義為“1:描述”。用例模型和非形式化的需求規(guī)格說明共同構(gòu)成了系統(tǒng)的需求規(guī)格說明。用例模型的開發(fā)得到了“非形式化的規(guī)格說明”,“領(lǐng)域模型”,“商業(yè)模型”等概念的支持,在設(shè)置系統(tǒng)上下文時(shí)這些概念是必需的。如前所述,“非形式化的規(guī)格說明”表示文本形式的需求規(guī)格說明?!吧虡I(yè)模型”描述一個(gè)組織的商業(yè)過程?!邦I(lǐng)域模型”描述領(lǐng)域上下文中最重要的類。從用例模型中可以選擇出對(duì)于體系結(jié)構(gòu)有重要意義的用例,并創(chuàng)建“用例實(shí)現(xiàn)”,如上圖中“2:實(shí)現(xiàn)”所述。用例實(shí)現(xiàn)決定了任務(wù)在系統(tǒng)內(nèi)部是怎樣進(jìn)行的。用例實(shí)現(xiàn)受到相關(guān)工件的知識(shí)和通用知識(shí)的支持。這在圖中被表示為分別從“工件”和“通用知識(shí)”引出

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論