軟體模式綜述
1. 引言
模式(pattern)的概念最早由建築大師christopher alexander於二十世紀七十年代提出,應用於建築領域,八十年代中期由ward cunningham 和kent beck將其思想引入到軟體領域,2023年開始由hillside group(由kent beck等發起成立)和oopsla聯合發起了國際plop(pattern language of programming)會議,如今模式(pattern)已成為軟體工程領域內的乙個熱門話題,其在計算機領域的影響超過了在建築界的影響。
christopher alexander將模式分為三個部分:首先是周境(context),指模式在何種狀況下發生作用;其二是動機(system of forces),意指問題或預期的目標;其三是解決方案(solution),指平衡各動機或解決所闡述問題的乙個構造或配置(configuration)。他提出,模式是表示周境、動機、解決方案三個方面關係的乙個規則,每個模式描述了乙個在某種周境下不斷重**生的問題,以及該問題解決方案的核心所在,模式即是乙個事物(thing)又是乙個過程(process),不僅描述該事物本身,而且提出了通過怎樣的過程來產生該事物。這一定義已被軟體界廣為接受。
軟體模式的應用對軟體開發產生了重大的作用,主要表現在:
(1) 軟體模式是人們在長期的設計軟體、管理組織軟體開發等實踐中大量經驗的提煉和抽象,是復用軟體設計方法、過程管理經驗的有力工具。模式類似於拳擊中的組合拳,它提供了一系列軟體開發中的思維套路。如,通過模式的使用,有利於在複雜的系統中產生簡潔、精巧的設計。
(2) 軟體模式為我們提供了一套簡潔通用的設計、管理、組織方面的詞彙,同時模式也為我們提供了乙個描述抽象事物的規範標準,可大大促進軟體開發過程中人與人之間的交流,而軟體開發中的交流是至關重要的,「軟體專案失敗的原因最終都可追溯到資訊沒有及時準確地傳遞到應該接收它的人」。
2. 軟體模式的描述、分類與特點
2.1軟體模式的描述
從前面可以看出,模式是乙個高度抽象的概念。模式的描述分以下幾個部分:
(1) 模式名及分類。
模式名稱簡潔地描述了模式的本質,乙個好的名字非常重要。模式的分類將在2.2節中介紹。
(2) 問題(problem)或意圖
在特定的周境和動機下要達到的目標。通常情況下這些動機和目標是相互矛盾相互影響的。
(3) 周境
問題及其解決方案產生時的前提條件。周境告訴我們該模式的適用性,可以將周境視為應用該模式之前的系統初始配置。
(4) 動機
描述相關的動機和約束,它們之間或與期望的達到的目標之間的相互作用(或衝突),通常需要對各期望的目標進行優先順序排序。動機闡明了問題的複雜性,定義了在相互衝突時所採取的各種權衡手段。乙個好的模式應盡可能將所有產生影響的動機考慮在內。
(5) 解決方案
是一些靜態的關係和動態的規則,用以描述如何得到所需的結果。通常是給出一組指令來說明如何構造所需的工作製品。該說明可包括圖表、文字,用以標示模式的結構、參與者及其之間的協作,從而表明問題是如何解決的。
(6) 示例
乙個或多個該模式的應用例子。示例說明了模式在怎樣的初始周境下,如何發生作用,如何改變周境而導致結果周境的出現。示例幫助讀者理解模式的具體使用方法。
(7) 結果周境(resulting context)
指在應用該模式後系統的狀態或配置,包括模式發生作用後帶來的後果,以及在新的周境下產生的問題、可應用的模式等。它闡述了模式的後續狀態和***。通常通過對結果周境的描述,使該模式與其它模式聯絡起來(該模式的結果周境成為其它模式的初始周境)。
(8) 基本原理(rational)
對該模式中的解決步驟或採用的規則的解釋、證明,解釋該模式如何、為何能解決當前問題,它採用的方法為何能得到與期望相一致的結果。
(9) 相關模式
該模式與其它模式的關係,包括靜態的或動態的。如,該模式的前導模式(前導模式應用後產生的結果周境與該模式的初始周境一致),後續模式(該模式應用後產生的結果周境與後續模式的初始周境一致),替代模式(使用該模式的替代模式產生同樣的效果)等。
(10) 已知應用
闡述該模式在已有應用系統中的實際應用情況,有助於驗證該模式的有效性。
2.2軟體模式的分類
軟體模式主要可分為:設計模式、分析模式、組織和過程模式等,每一類又可細分為若干個子類。在此著重介紹設計模式,目前它的使用最為廣泛。
2.2.1設計模式
設計模式主要用於得到簡潔靈活的系統設計,erich gamma等人將設計模式按其解決問題的不同分為三種:建立型、結構型和行為型三種。通常情況下,設計模式均基於物件導向技術而提出,也可應用於介面定義良好的結構化方法中。
建立型模式。該型別模式是對物件例項化過程的抽象,它通過採用抽象類所定義的介面,封裝了系統中物件如何建立、組合等資訊。
結構型模式。該類模式主要用於如何組合已有的類和物件以獲得更大的結構,一般借鑑封裝、**、(多)繼承等概念將乙個或多個類或物件進行組合、封裝,以提供統一的外部檢視或新的功能。
行為模式。該類模式主要用於物件之間職責及其提供的服務的分配,它不僅描述物件或類的模式,還描述它們之間的通訊模式,特別是描述一組對等的物件怎樣相互協作以完成其中任一物件都無法單獨完成的任務。
2.2.2組織和過程模式
在軟體專案實施過程中,人們就如何有效地進行專案計畫、風險和成本控制、人員組織協調、進度跟蹤和激勵、質量控制等積累了豐富的經驗,組織和過程模式就是這些經驗的凝結。如衝刺(sprint)模式,解決在開發人員盡量免受外界干擾、有高生產率的情況下,開發組能保持正確的工作目標,同時可及時響應需求的變化等比較棘手的問題。
2.3 軟體設計模式的特點
設計模式是(物件導向)設計經驗的凝結,有以下特點:
(1) 設計模式側重於系統動態行為特徵的分析和抽象。
(2) 設計模式更側重於物件組合而不是繼承。
如今軟體系統的演化越來越依賴於物件復合而不是類繼承,繼承常被認為破壞了封裝性(子類揭示了父類的實現細節,其實現與父類有緊密的依賴關係)基於物件組合可使類的層次和數量減少,從而設計更為簡潔,可擴充套件性好。
(3) 設計模式為類繼承中的層次劃分提供指導。
物件導向設計中類的層次劃分至關重要,類可分為哪幾個層次,哪些方法、屬性應該在哪個層次引入等等。類的層次劃分過少將導致設計的封裝性差,過多則導致程式笨重而失去可維護性、可調整性、可擴充套件性。設計模式從系統動態行為特徵的角度,將類之間的相互作用進行分層包裝,在此基礎上合理分配各方法屬性。
3. 軟體設計模式與框架的比較
與設計模式非常相近的乙個概念是框架(framework)。軟體框架是乙個可復用的小型體系結構(architecture),在乙個給定的範疇內為一族軟體抽象產物(abstractions)提供通用的結構和行為。通常情況下,框架不是乙個完整的應用系統,它規定了應用系統的體系結構,並提供一系列固定的插口和配置點供使用者將其客戶化(customization)後生成所需的應用軟體。erich gamma認為,設計模式與框架有以下區別:
(1) 設計模式比框架更抽象。框架可以通過**形式來具體實現或表達,但模式則不然,只有模式的例項才可具體化為**;框架的乙個好處是它可採用程式語言寫出來,然後不僅可以執行而且可以直接復用,相反,設計模式在每次應用時須將其實現,而且設計模式還說明了意圖,權衡和設計導致的後果。
(2) 設計模式是比框架更小的結構型元素。乙個典型的框架包含了若干設計模式,反之則不然。
(3) 較之於框架,設計模式的應用更為廣泛。框架通常有乙個特定的應用領域,而設計模式則幾乎可適用於任何應用型別。
4. 結束語
軟體模式是人們在長期的開發實踐中良好經驗的結晶,它提供了乙個簡單、統一的描述方法,使人們可以復用這些軟體設計方法、過程管理經驗。但是,由於軟體模式是設計經驗的抽象和提煉,對其理解較為困難,如何在設計中運用尚缺乏系統的、理論化的方法指導,是目前亟需進一步研究的課題。
references:
[1]erich gamma等。design patterns, addison-wesley,1995
軟體編碼綜述
一 軟體編碼的任務與目標 將軟體設計的結果翻譯成計算機可以 的形成使用某種語言描述的程式。程式的質量主要取決於軟體設計的質量,程式語言的特性和編碼途徑也對程式的可靠性 可讀性 可測試性和可維護性產生深遠的影響。二 常用程式語言及開發環境的特點與適用範圍 1 專案的應用領域 1 科學工程計算。需要大量...
軟體測試綜述
1 軟體測試的目標 發現程式中的錯誤,是為 了證明程式有錯,而不是證明程式無錯。保證軟體質量,提高軟體可靠 性的關鍵。2 軟體測試的任務 軟體測試是軟體開發工作的最後乙個環節。由於人認識客觀事物的主觀性,難免在開發 的軟體產品中產生錯誤。為了給使用者交付乙個高質量的軟體系統,必須對開發的系統進行嚴格...
設計模式 綜述
設計模式是對被用來在特定場景下解決一般設計問題的類和相互通訊的物件的描述。設計模式使人們可以更加簡單方便地復用成功的設計和體系結構。將已正式的技術表達成設計模式會使新系統開發者更加容易理解其設計思路。常用的設計模式有23 種,包括 5種建立型模式 7種結構型模式 11種行為模式。其中建立型模式包括抽...