-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

元素模式

( 簡體 字)
作者:高博,凌杰,徐平平類別:1. -> 程式設計 -> 綜合
譯者:
出版社:電子工業出版社元素模式 3dWoo書號: 38999
詢問書籍請說出此書號!

缺書
NT售價: 345

出版日:6/1/2014
頁數:364
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121234682
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

譯者序
本書是設計模式進入全新時代的標志,是一部里程碑式的巨著。
在本書問世以前,“設計模式”一詞毫無疑義地就是指Erich Gamma、Richard Helm、Ralph Johnson 和John Vlissides( 以下簡稱Gang of Four,GoF)在合著的經典著作Design Patterns(《設計模式》)一書描述的23 種經典設計模式。二十年來,圍繞著這些GoF設計模式出版了無數學術論文和技術專著。然而,從十年前本人第一次閱讀Design Patterns 原著,到后來閱讀了大量的相關圖書,一直都有下面幾個揮之不去的問題縈繞在心頭。
● 設計模式只適用于嚴格意義上的面向對象程序設計嗎?
● 很多GoF 設計模式一開始看上去就很復雜,它們真的沒有內部結構嗎?
● 很多GoF 設計模式需要滿足不少前提條件才適用,在現實的程序設計中卻經常出現這樣的情況:僅僅看到模式名字和需求有點類似,就想將模式生搬硬套到自己的軟件設計中去。我們固然可以責備這些設計新手沒有研習透徹,但是要求人們僅從“抽象工廠”和“工廠方法”的名字就區別出它們到底有何不同,是否也確實有些強人所難?
● GoF 設計模式之間似乎缺乏內在的邏輯聯系,除了死記硬背以外難以全部掌握。但是讓理工科的從業人士靠死記硬背來掌握某種專業知識,這種說法本身就很難服人。大量的設計模式相關的技術圖書只是在試圖降低記憶強度,通過講述GoF 設計模式的具體應用示例來進一步闡述其來龍去脈,建立更直觀的印象。但這些示例和闡述仍然難以擺脫GoF 設計模式固有的復雜本質,甚至其中還存在著種種誤解,還不如多看幾遍原著。反而有幾本講程序設計的書在涉及設計模式時發表的幾句評論能給人以點睛之感。為什么會出現這樣的現象?或者,一個更直接的問題是,設計模式和程序設計之間的關系是怎樣的?是“先有雞還是先有蛋”的關系嗎?
這些問題我思考了多年以后,一些答案開始浮現。這些答案也讓我開始用歷史的眼光去反思設計模式在軟件理論發展中的定位,換句話說,GoF 設計模式的核心價值究竟是什么?它們的核心價值是否已經以最好的形式呈現?如果尚未以最好的形式呈現,那么最好的形式是什么?是否可以向那個方向做一些改進?帶著這些疑問,我開始做一些準備工作,這些工作包括:在更基礎的程序設計實體(原始類型及其結構體、自由變量和函數)上應用設計模式,在缺乏面向對象領域的直接對應物時采用更原始的實體(例如函數指針數組等)來模擬。長此以往,我逐漸有了一種鮮明的感受,那就是:GoF 設計模式是一些有用的化合物(compound substance),它們廣泛出現在軟件設計中,并且被提煉成為經典工具集。但它們還可以進一步分解,分解的產物類似于單質,或曰同一元素純凈物(elemental substance)。這種情形與化學史的發展極其類似:在人類歷史早期,人們會把像硫酸、食鹽、葡萄糖這樣外觀純凈、成分單一、性質穩定、應用廣泛的液體或晶體誤認為是單質,直至近代才知道它們都是化合物,可以分解為氫、氧、硫、碳等化學元素。而一旦人類的認識達到了這個層次,就立刻開始利用這些元素合成一些自然界中原先并不存在的化合物,化學學科本身的理論水平也就不可同日而語了。而找到這樣的“元素設計模式”無疑將是設計模式的劃時代工作,我一直很想抽出時間來寫這樣的一本書。
然而,讀完本書以后,我感覺沒有必要重復發明輪子了。本書以明確、詳盡、多維的方式,完整地回答了我心頭的一切疑問,并且走得更遠。它開門見山地指出:設計模式有著明顯的可分解性,分解后的元素甚至可能由不同的開發者獨立地實現,在不自覺的情況下組合起來達成效果。作者結合他在開發SPQR 系統時不斷強化的寶貴經驗提出了以下一些彌足珍貴的認識。
● 設計模式的根本來源是基本的程序設計實體的狀態及它們之間的互動。對象是描述這些實體的最簡單有力的模型,所以設計模式(包括本書所講的設計模式)主要是采用這種模型來描述和討論的,但__只要在任何一種范型框架內可以描述類似于類型、字段、方法等概念,絕大多數的設計模式就可以應用于此(一些面向對象的特有概念,如繼承等,可能是例外)。
● 設計模式貫穿于程序設計的一切大大小小的動作中。創建對象是設計模式,用對象的某個方法調用自己的若干個方法也是設計模式,這些是開發人員每天都要做數十次甚至上百次的動作,現在它們也被納入到了設計模式的理論框架中。本來隨性為之、不以為意的遞歸、重定向等動作,也有了方法論。甚至可以說,程序設計沒有哪里是脫離于設計模式之外的,這就大大地拓展了設計模式的疆域,也為日常軟件開發的溝通提供了新的統一途徑。
● GoF 設計模式可以分解而成的元素設計模式不僅存在,而且已經可以明確地描述出來,給予名字、說明動機……總之可以完全按照GoF 的格式描述出來,它們還可以組合成一系列有用的、比GoF 設計模式粒度更小的中間模式。
這些認識落實成實際的成果就是16 種元素設計模式,簡稱元素模式或EDP(Elemental Design Patterns)。與GoF 設計模式不同的是,元素模式是建立在設計空間的基礎上的。設計空間的四個維度是對象、字段、方法和類型,它們按照狀態劃分成若干可區分的區間,形成一個超空間的坐標系。這個坐標系的二維和三維投影當然是可視化的,在二維或三維空間中,形成若干個相鄰的方塊。每個方塊都有著明確的設計空間定位,代表著一種特定的元素模式。這么一來,元素模式就完全不需要死記硬背,只需要查看一下它在設計空間中的位置就知道它的含義。而不同的元素模式之間的變化關系,也可以從它們在設計空間中的相對位置得出。
本書采用了三種不同的方式來描述元素模式:代碼方式、圖表方式(PIN箱)和代數方式(ρ 演算),這些方式是等價的、可以相互轉化的,然而又各有特點。其中,圖表方式是全新的,在很多情況下,它可以用作UML 的替代品(盡管這并非它的設計目標)。而代數方法提供了一種高度形式化的工具,可以以純粹邏輯運算的方式來快速推導結果。當然,令人感覺特別實用的是,無論是圖表還是代數方式,都可以以高效的方式轉換成實際工作的代碼。書中給出了很多示例來說明應該如何做,同時,一些基于元素模式的軟件工具也開始成形。
可以預見,本書提出的設計模式新術語、新方法,必將成為軟件開發和軟件工程的主流,因為軟件工程的本質是要把抽象的方法論和日常的具體開發實踐結合起來,而本書在這一方面所做的工作可謂完美,既達到了理論研究的高度,又十分接地氣,讓每一位軟件工程師都能看得懂、用得上。所以,本書榮膺2012 年的Jolt 生產力大獎,真是實至名歸。
在本書的翻譯過程中,譯者團隊付出了極大的努力,確保新術語能夠滿足準確、易懂、易記的要求,力爭能夠達成為設計模式社區奠定良好標準術語集的目標。在此期間,我們征求了多名業界資深專家的意見,其中需要特別鳴謝的是上海交通大學計算機科學與工程系的張堯弼、饒若楠和梁阿磊教授,以及IBM 中國研發中心的高級工程師唐文蔚和EMC 卓越研發集團的總監濮天暉。另外,我們也想對培生教育集團的李樂強版權經理和博文視點的張春雨編輯表示衷心感謝,感謝他們在本書翻譯和成書的過程中對譯者團隊的耐心和鼓勵。
設計模式在我們軟件工程師的世界里就像是法律界的憲法那樣重要,這些規范的每一點進步都對軟件開發的日常工作有著難以估量的巨大影響。歡迎采用本書作為教科書的教師們,以及采用本書作為學習參考的工程師和廣大讀者多提意見,以幫助我們在今后重印時切實改進,我們的聯系方式如下。
新浪微博:但以理_ 高博
微信公眾平臺:高博的世界
網站:http://gao.bo
郵箱:feedback@gaobo.org

推薦序
讀完本書映入我腦海的是電影《2001 太空漫游》(2001: A Space Odyssey)中的一個精彩場景。
在已遭遺棄的飛船“發現號”上度過了幾個月,并把失控的超級電腦Hal 制服以后,David Bowman 博士來到一塊巨石前,然后被帶到了一個嶄新的世界。他留給地球的最后一句話是:“滿目皆星辰!”
軟件密集型系統就是我們通過腦力勞動創造出來的嶄新世界。Bowman看到的世界由原子構成,所以滿目皆星辰;而我們的這個新世界由比特構成,所以——滿目皆模式。
無論是有意栽花還是無心插柳,所有結構良好的軟件密集型系統都用到了各種模式。識別系統中的模式,在分析系統時有助于提升抽象的水平;而在系統中運用模式,則有助于讓系統變得更有秩序、優雅和簡單。以我個人的經驗來看,過去的二十多年來,模式是軟件工程中最為重要的進步之一。
我有幸與Jason 共事,從事改進SPQR 的工作,容我向你們保證,他對模式實踐背后的思想演進做出了巨大的貢獻。本書有助于你打開有關模式的全新思路,將模式應用于自己所創造和維護的軟件中,并促進其改進。如果你對模式還比較陌生,這本書是極好的入門讀物;如果你已經熟悉模式,我希望你能溫故而知新。我本人就受益良多。
Grady Booch
IBM 院士
2012 年2 月

前 言
本書介紹了一類全新的設計模式,稱為元素模式(Elemental Design Pattern),其為軟件工程設計模式的研究和應用打下了基礎。元素模式深深植根于軟件程序設計理論的研究,但其目的卻在于實踐性和實用性。從程序設計的新手,到資深的開發工程師,都是元素模式的目標受眾。它能夠帶領學生加入軟件工業的大軍,也能夠為研究者打開新的思路。
一言以蔽之,本書的寫作目的在于為人所用。
讀畢掩卷之時,你將在工具箱中收獲一整套全新的工具,你將對日常的程序設計基本概念有更深入的理解,并知道它們是以怎樣的方式聯系和交互才產生了偉大的創意。元素模式,簡稱EDP,是一組基礎的程序設計思想,我們本能地使用它們,而幾乎不會去反思。但本書給予了它們正式的描述和標準的名字,以便在討論時使用。本書還提供了一個框架來保證概念的一致性,并針對它們各自的特點加以比較。如果你是一個剛入學的學生,你將會了解到,如雨后春筍般涌現的設計模式文獻并非要么全盤接受、要么全盤棄用的鐵板一塊,而是可以分解為若干片段來逐個取用、采用科學的方法論來一點點地理解的鴻篇巨著。如果你早已是軟件設計和模式方面的行家里手,也仍然可以找到研究老辦法的新視角,并發現我們這個行業里的新機會。
本書假定你對于設計模式領域曾多少有過一些了解和熟悉,但并未深度應用或研究過。僅僅知道存在這么一個領域,并對其有一些道聽途說的認知,已經足夠開展我們的討論。本書并不期望你有程序設計理論或語言設計的背景,甚至不要求你精通一門面向對象的程序設計語言,只要你心懷渴望,想要學習軟件設計的辯證思維即可。在本書中這些主題會有所涉及,但相關論述只能作為借助參考文獻深入了解相關主題的出發點。本書將采用統一建模語言(Unified Modeling Language,UML)來描述一些小例子,如果你還不了解UML,請參考[20] 或[33]。你需要有一點點程序設計基礎,面向過程或面向對象皆可,最好是后者,但這并不是必需的——本書內容已經把面向對象程序設計必知必會的信息打包成易于理解的模塊了。經驗豐富的面向對象程序開發工程師亦會有驚喜,發現自認為早已掌握的概念仍有新意,從而提升自己對于面向對象程序設計的整體認識。
許多程序員都把“設計模式社區”看作一個專家怪人的群體,認為自己并非其中一員。通過帶給你新的視角,讓你認識到設計模式是怎么來的,本書應該能說服你接受如下觀點,即每一位程序員都是設計模式社區的一員,無論其自覺與否。每一位程序員在寫下每一行代碼的時候,都在運用設計模式,無論其是否這樣去想。正因如此,有些選項近在眼前卻被人棄如草芥。設計模式是一種共享的概念空間,我們在其中編織自己的電子夢想,并由此改變世界。是時候給出一張標識地界的地圖了,這樣我們才能更好地工作和享受。
遵循Gang of Four(GoF)[21] 樹立的典范,本書亦分為兩部分。前半部分講述了本書為何而寫,為誰而寫,解釋了什么是EDP,它源自何處,為何重要。該部分闡述的是基本理論,是EDP 背后的“為什么”。該部分還介紹了模式實例記法(Pattern Instance Notation),這是一種能和各種粒度級別上的模式協同工作的圖表系統。前半部分的收尾章節討論了如何使用EDP 來構建更大尺度的設計模式,以及如何與其協同工作。后半部分則是設計模式的大閱兵,以EDP 為起點,通過案例來講述它們如何以組合方式形成過渡模式,最后從EDP 組合的視角重新審視了若干GoF 設計模式。這里講述的EDP 只是全部EDP 目錄的一部分,只是首輪被定義和描述的基礎模式集合。軟件工程社區將不斷地定義和精化更多的EDP,只要它們背后的概念能夠生根發芽。
我們期待你能參與其中。
熱烈歡迎你的加入!

致 謝
本書得以問世,有太多人要感謝,就讓我不按時間先后地致謝吧。
我在北卡羅萊納州立大學教堂山分校的博士生導師David Stotts,見證了SPQR 和 EDP 的誕生過程。我所在的委員會的同事們,盡管他們一度感覺EDP 沒有什么可行性,仍然認為這會是樁有意義的工作,并給予我自由,讓我追夢。Jan Prins、David Plaisted、Al Segars 和Sid Chatterjee,你們每個人都在關鍵的時候施以我無價的幫助。
在 IBM 沃森研究中心度過的歲月,是Sid Chatterjee 說服了我參與BigBlue Playpen 項目;Clay Williams 放手讓我沉浸在這些天馬行空的思想中,我十分懷念與他共度的咖啡時光。Peter Santhanam 支持我的這些思想,而我也從他身上學到了對于遺留系統的敬畏。Brent Hailpern 教給了我很多管理方面的無價經驗,我也學到了職場生活的黑色幽默,以及人性的簡單。EdithSconberg 忍受了我的多次惡作劇,本來作為一個老板他大可不必如此。還有好多同事都聽我一遍遍地嘮叨關于本書的長篇癡語。朋友們,我真想念你們!
還是在IBM,但我要特別鳴謝的是Grady Booch,將我愛護于他的羽翼之下,我卻無以為報。Grady,你的指導、幫教和建議對我的意義無法度量,唯有期望未來的合作和友誼長青。
位于華盛頓州柯克蘭市的The Software Revolution 公司,是我如今任職資深計算機科學家的單位。我要感謝這里的每一位同事的理解,感謝他們在我發表論文時為我提供所需要的信息。我為能與你們共事倍感自豪,我急切地盼望看到我們能一起把公司做到多大。
感謝本書的多位審閱者,你們的建議和評論具有深刻的洞見,頗有教益,你們使本書增色不少。對下列同仁則致以最高的謝意:Lee Ackerman、Lars Bishop、Robert Bogetti、Robert Couch、Bernard Farrell、Mary Lou HinesFritts、Gail Murphy、Jeffrey Overbey、Ethan Roberts、Carlota Sage、DavieSweis、Peri Tarr 和 Rebecca Wirfs-Brock。Addison-Wesley 出版社的 Elizabeth Ryan、Raina Chrobak、Chris Zahn 和 Chris Guzikowski 在整個成書過程中堪稱模范支持團隊——在此對你們,以及其余同事致謝,特別要鳴謝的是 Carol Lallier,她對全書打磨的精細真是無與倫比。
我謹以個人的名義向我的朋友和家人致謝,他們在我投入那似乎遙遙無期的寫書工作時表現出了特別的耐心。現在我搬回了西雅圖地區,總算能和他們多見上幾面了。
最后要感謝的是我的妻子Leah。我們在一起的時候,你給我的大大小小的幫助何以計數。你付出的是時間、耐心和愛,我對你的愛和謝意也是無盡的。謝謝你!和這些相比,任何語言都是蒼白的。
謝謝所有以你們的方式改進了本書的思想和文字的人們。本書雖然是我的“孩子”,但無疑離不開眾多“助產士”的一臂之力。
Jason McC. Smith
西雅圖
2011 年9 月4 日

關于作者
Jason McC. Smith,2005 年畢業于北卡羅萊納州立大學教堂山分校,獲計算機科學博士學位。該校也是元素模式的誕生地,元素模式當時是模式查詢和識別系統(System for Pattern Query and Recognition,SPQR)項目的組成部分。Smith 博士因其在校的研究項目而榮獲兩項美國國家專利,一項與SPQR 所采用的技術相關,另一項則來自FaceTop 分布式文檔協作系統。
此前,Smith 博士在物理仿真工程和咨詢界工作過多年,取得了華盛頓州立大學的物理學和數學學士學位,值得一提的項目包括聲納和海洋環境仿真、電子工程仿真、商用和軍用飛機飛行仿真,以及實時圖形訓練系統等。
在 IBM 沃森研究中心工作的四年,使Smith 博士有機會將從SPQR 和EDP 目錄中獲得的經驗加以組織,并應用到大量的軟件實體中,包括遺留系統和現代系統。
Smith 博士現在供職于華盛頓州柯克蘭市的The Software Revolution 公司,任資深研究科學家。在那里,他持續地優化EDP 目錄,并尋找各種方法來推進公司在自動控制現代化及遺留系統改造方面的業務目標。
內容簡介:

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

目錄:

第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 箱 513.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
序: