元素模式

broadviewbj發表於2014-07-30

元素模式(最新Jolt大獎得主 徹底顛覆傳統GoF設計模式的里程碑著作

【美】Jason McC. Smith(傑森.史密斯)

高博 凌傑 徐平平

ISBN 978-7-121-23468-2

20146月出版

定價:69.00

364

16

編輯推薦

本書介紹一類全新的設計模式——元素模式(Elemental Design Pattern)。元素模式植根於軟體程式設計理論,目的卻在於實踐性和實用性。程式設計新手與資深開發工程師都是元素模式的目標受眾。它能帶領學生加入軟體工業大軍,也能為研究者開啟新思路。

√ 作者的非凡洞見被凝結為16種元素模式,其與四人幫設計模式的本質區別在於——元素模式建立在物件、欄位、方法、型別這四個維度的設計空間上,讓模式變得智慧而鮮活,可以由所處位置直觀感知其含義,不同模式間的關係同樣可由位置表徵。

√ 本書用程式碼、圖形(PIN箱)和代數(ρ演算)三種方式來描述設計模式,每一種都可以高效地轉換為實際工作程式碼。

√ 軟工的本質即為結合抽象方法論與具體開發實踐,因而本書提出的設計模式新術語、新方法,必將成為軟體開發和軟體工程的主流。

√ 掌握書中一整套全新工具,你將對程式設計基本概念有更深入的理解,並知道它們是以怎樣的方式聯絡和互動才產生了偉大的創意。

內容提要

即使是經驗豐富的軟體專業人士,也會發現要為其企業找到能帶來實質價值的模式應用方式殊非易事。《元素模式》首次以全面的方法論介紹元素模式,給出標準的命名和描述,闡述它們的重要性,幫助人們比較和選用,充分利用模式的真正力量,將它們轉化成實際的、更加簡潔直接的軟體實現,並得到非常不錯的效果。

對於開發工程師、設計師、架構師和分析師,《元素模式》都能提供有價值的指導,幫助他們在大多數語言、環境和問題領域使用模式。

目錄

1章 設計模式介紹 1

1.1 部落神話和部落智慧 5

1.2 藝術還是科學 9

1.2.1 生搬硬套地對待模式 9

1.2.2 模式和實現語言的相關性討論 10

1.2.3 從神話到科學 12

2章 元素模式 13

2.1 背景 14

2.2 定位、動機和方法 17

2.2.1 解析裝飾器 18

2.2.2 縱身兔穴 21

2.2.3 語境 31

2.2.4 設計空間 34

2.3 核心EDP 44

2.4 結論 45

3章 模式例項記法 47

3.1 基本原理 47

3.2 PIN 箱 51

3.2.1 簡易PIN 52

3.2.2 標準PIN 54

3.2.3 擴充套件PIN 58

3.2.4 堆疊PIN 箱與多重性 61

3.2.5 剝離和合並 65

3.3 結論 69

4 EDP的運用 71

4.1 模式的組成 71

同位素 76

4.2 改造裝飾器 81

4.3 重構 96

4.4 大局觀 108

4.5 為什麼需要閱讀附錄 114

4.6 高階主題 115

4.6.1 重點文件與培訓 115

4.6.2 指標 116

4.6.3 程式化分析 119

4.7 結論 119

5 EDP編目 121

建立物件 123

檢索 132

繼承 136

抽象介面 145

委託 151

重定向 157

集聚 165

遞迴 171

歸複方法 178

擴充套件方法 187

委託型集聚 193

重定向型遞迴 199

信託型委託 206

信託型重定向 215

表親信託型委託 222

表親信託型重定向 229

6章 中間模式結構 237

實現方法 239

檢索型建立 243

檢索型共享 248

物件識別符號 253

物件遞迴 260

7 GoF設計模式構成 269

7.1 建立型模式 270

7.1.1 抽象工廠 270

7.1.2 工廠方法 274

7.2 結構型模式 278

7.2.1 裝飾器 278

7.2.2 代理 282

7.3 行為型模式 284

7.3.1 職責鏈 284

7.3.2 模板方法 286

7.4 結論 291

附錄 ρ演算 293

A.1 依賴運算子 294

A.2 傳遞律和同位素 297

A.3 相似性 298

A.4 EDP 形式化 299

A.5 組合及化簡規則 303

A.6 模式例項記法和角色 306

A.7 EDP 定義 307

A.7.1 建立物件 307

A.7.2 檢索 308

A.7.3 繼承 310

A.7.4 抽象介面 310

A.7.5 委託 311

A.7.6 重定向 312

A.7.7 集聚 312

A.7.8 遞迴 313

A.7.9 歸複方法 313

A.7.10 擴充套件方法 314

A.7.11 委託型集聚 315

A.7.12 重定向型遞迴 315

A.7.13 信託型委託 316

A.7.14 信託型重定向 317

A.7.15 表親信託型委託 318

A.7.16 表親信託型重定向 319

A.8 中間模式定義 320

A.8.1 實現方法 320

A.8.2 檢索型建立 321

A.8.3 檢索型共享 322

A.8.4 物件識別符號 323

A.8.5 物件遞迴 324

A.9 GoF 設計模式定義 325

A9.1 抽象工廠 325

A9.2 工廠方法 326

A9.3 裝飾器 328

A9.4 代理 329

A9.5 職責鏈 330

A9.6 模板方法 331

參考文獻 333

作者簡介

作者簡介:Jason McC. Smith2005 年畢業於北卡羅萊納州立大學教堂山分校,獲電腦科學博士學位。該校也是元素模式的誕生地,元素模式當時是模式查詢和識別系統(System for Pattern Query and RecognitionSPQR)專案的組成部分。Smith 博士因其在校的研究專案而榮獲兩項美國國家專利,一項與SPQR 所採用的技術相關,另一項則來自 FaceTop 分散式文件協作系統。

此前,Smith 博士在物理模擬工程和諮詢界工作過多年,取得了華盛頓州立大學的物理學和數學學士學位,值得一提的專案包括聲納和海洋環境模擬、電子工程模擬、商用和軍用飛機飛行模擬,以及實時圖形訓練系統等。

IBM 沃森研究中心工作的四年,使 Smith 博士有機會將從 SPQR EDP 目錄中獲得的經驗加以組織,並應用到大量的軟體實體中,包括遺留系統和現代系統。

Smith博士現在供職於華盛頓州柯克蘭市的The Software Revolution公司,任資深研究科學家。在那裡,他持續地最佳化 EDP 目錄,並尋找各種方法來推進公司在自動控制現代化及遺留系統改造方面的業務目標。

譯者簡介:高博,1983年生,畢業於上海交通大學。目前在EMC中國卓越研發集團任首席工程師,在資訊科學和工程領域有近15年實踐和研究經驗。酷愛讀書和寫作,業餘研究興趣涉獵廣泛。譯著包括圖靈獎作者高德納的《研究之美》和布魯克斯的《設計原本》,以及《資訊簡史》等。近年來,出版翻譯作品近百萬字。

媒體評論

讀完本書映入我腦海的是電影《2001 太空漫遊》(2001: A Space Odyssey)中的一個精彩場景。

在已遭遺棄的飛船“發現號”上度過了幾個月,並把失控的超級電腦Hal 制服以後,David Bowman 博士來到一塊巨石前,然後被帶到了一個嶄新的世界。他留給地球的最後一句話是 :“滿目皆星辰!”

軟體密集型系統就是我們透過腦力勞動創造出來的嶄新世界。Bowman看到的世界由原子構成,所以滿目皆星辰 ;而我們的這個新世界由位元構成,所以——滿目皆模式。

無論是有意栽花還是無心插柳,所有結構良好的軟體密集型系統都用到了各種模式。識別系統中的模式,在分析系統時有助於提升抽象的水平 ;而在系統中運用模式,則有助於讓系統變得更有秩序、優雅和簡單。以我個人的經驗來看,過去的二十多年來,模式是軟體工程中最為重要的進步之一。

我有幸與 Jason 共事,從事改進 SPQR 的工作,容我向你們保證,他對模式實踐背後的思想演進做出了巨大的貢獻。本書有助於你開啟有關模式的全新思路,將模式應用於自己所創造和維護的軟體中,並促進其改進。如果你對模式還比較陌生,這本書是極好的入門讀物 ;如果你已經熟悉模式,我希望你能溫故而知新。我本人就受益良多。

                                  ——Grady Booch  IBM 院士

前言

本書介紹了一類全新的設計模式,稱為元素模式(Elemental DesignPattern),其為軟體工程設計模式的研究和應用打下了基礎。元素模式深深植根於軟體程式設計理論的研究,但其目的卻在於實踐性和實用性。從程式設計的新手,到資深的開發工程師,都是元素模式的目標受眾。它能夠帶領學生加入軟體工業的大軍,也能夠為研究者開啟新的思路。

一言以蔽之,本書的寫作目的在於為人所用。

讀畢掩卷之時,你將在工具箱中收穫一整套全新的工具,你將對日常的程式設計基本概念有更深入的理解,並知道它們是以怎樣的方式聯絡和互動才產生了偉大的創意。元素模式,簡稱EDP,是一組基礎的程式設計思想,我們本能地使用它們,而幾乎不會去反思。但本書給予了它們正式的描述和標準的名字,以便在討論時使用。本書還提供了一個框架來保證概念的一致性,並針對它們各自的特點加以比較。如果你是一個剛入學的學生,你將會了解到,如雨後春筍般湧現的設計模式文獻並非要麼全盤接受、要麼全盤棄用的鐵板一塊,而是可以分解為若干片段來逐個取用、採用科學的方法論來一點點地理解的鴻篇鉅著。如果你早已是軟體設計和模式方面的行家裡手,也仍然可以找到研究老辦法的新視角,並發現我們這個行業裡的新機會。

本書假定你對於設計模式領域曾多少有過一些瞭解和熟悉,但並未深度應用或研究過。僅僅知道存在這麼一個領域,並對其有一些道聽途說的認知,已經足夠開展我們的討論。本書並不期望你有程式設計理論或語言設計的背景,甚至不要求你精通一門物件導向的程式設計語言,只要你心懷渴望,想要學習軟體設計的辯證思維即可。在本書中這些主題會有所涉及,但相關論述只能作為藉助參考文獻深入瞭解相關主題的出發點。本書將採用統一建模語言(Unified Modeling LanguageUML)來描述一些小例子,如果你還不瞭解UML,請參考[20] [33]。你需要有一點點程式設計基礎,程式導向或物件導向皆可,最好是後者,但這並不是必需的——本書內容已經把物件導向程式設計必知必會的資訊打包成易於理解的模組了。經驗豐富的物件導向程式開發工程師亦會有驚喜,發現自認為早已掌握的概念仍有新意,從而提升自己對於物件導向程式設計的整體認識。

許多程式設計師都把“設計模式社群”看作一個專家怪人的群體,認為自己並非其中一員。透過帶給你新的視角,讓你認識到設計模式是怎麼來的,本書應該能說服你接受如下觀點,即每一位程式設計師都是設計模式社群的一員,無論其自覺與否。每一位程式設計師在寫下每一行程式碼的時候,都在運用設計模式,無論其是否這樣去想。正因如此,有些選項近在眼前卻被人棄如草芥。設計模式是一種共享的概念空間,我們在其中編織自己的電子夢想,並由此改變世界。是時候給出一張標識地界的地圖了,這樣我們才能更好地工作和享受。

遵循Gang of FourGoF[21] 樹立的典範,本書亦分為兩部分。前半部分講述了本書為何而寫,為誰而寫,解釋了什麼是EDP,它源自何處,為何重要。該部分闡述的是基本理論,是EDP 背後的“為什麼”。該部分還介紹了模式例項記法(Pattern Instance Notation),這是一種能和各種粒度級別上的模式協同工作的圖表系統。前半部分的收尾章節討論瞭如何使用EDP 來構建更大尺度的設計模式,以及如何與其協同工作。後半部分則是設計模式的大閱兵,以EDP 為起點,透過案例來講述它們如何以組合方式形成過渡模式,最後從EDP 組合的視角重新審視了若干GoF 設計模式。這裡講述的EDP 只是全部EDP 目錄的一部分,只是首輪被定義和描述的基礎模式集合。軟體工程社群將不斷地定義和精化更多的EDP,只要它們背後的概念能夠生根發芽。我們期待你能參與其中。

熱烈歡迎你的加入!

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-1242595/,如需轉載,請註明出處,否則將追究法律責任。

相關文章