面向對象設計實踐指南:Ruby語言描述

《面向對象設計實踐指南:Ruby語言描述》是對“如何編寫更易維護、更易管理、更討人喜愛且功能更為強大的Ruby應用程式”的全面指導。為幫助讀者解決Ruby代碼難以更改和不易擴展的問題,作者在書中運用了多種功能強大和實用的面向對象設計技術,並藉助大量簡單實用的Ruby示例對這些技術進行全面解釋。 全書共9章,主要包含的內容有:如何使用面向對象編程技術編寫更易於維護和擴展的Ruby代碼,單個Ruby類所應包含的內容,避免將應該保持獨立的對象交織在一起,在多個對象之間定義靈活的接口,利用鴨子類型減少編程間接成本,合理運用繼承,通過組合構建對象,設計出最划算的測試,解決不良設計的Ruby代碼所導致的常見問題等。 《面向對象設計實踐指南:Ruby語言描述》適合所有對面向對象設計和Ruby程式語言感興趣的程式設計師閱讀參考。

基本介紹

  • 書名:面向對象設計實踐指南:Ruby語言描述
  • 又名:Practical Object-Oriented Design in Ruby: An Agile Primer
  • 作者:梅茨 (Sandi Metz) 
  • 譯者:張雪平
  • ISBN:9787115332455, 7115332452 
  • 頁數:206頁  
  • 出版社:人民郵電出版社 
  • 出版時間:2014年1月1日
  • 開本:16
基本介紹,內容簡介,作者簡介,媒體推薦,圖書目錄,

基本介紹

內容簡介

第一本直接關注Ruby語言面向對象應用程式設計的書籍。
對“如何編寫更易維護、更易管理、更討人喜愛,以及功能更為強大的Ruby應用程式”的全面指導。
任何層次的Ruby程式設計師都能從中汲取有用的知識:初級的Ruby程式設計師將會找到賴以生存的特定準則,中等水平的Ruby程式設計師將會找到多條可以根據需要靈活地詮釋和套用的有價值的原則,高水平的Ruby程式設計師則會找到一種共同語言,用以引導開發和指導同事。

作者簡介

作者簡介

Sandi Metz 在處理經歷不斷變化仍然存活的項目方面,Sandi Metz擁有30年的工作經驗。作為杜克大學的一名軟體架構師,她每天都堅持編寫代碼。在杜克大學裡,她的團隊不斷地為許多客戶解決大量實際問題。其中,有些客戶的應用程式不僅具有規模大和面向對象的特點,而且已演變了15年之久。她全身心投入的工作是用簡單實用的方法將有用的軟體提取出來。Sandi在Ruby Nation做過演講,在Gotham Ruby用戶大會上也演講過多次。本書是她做過的關於OO設計的談話匯集之後的必然成果。

譯者簡介

張雪平 西南石油大學畢業,模式識別與智慧型系統專業,碩士研究生。擁有多年高校計算機相關課程的教學經驗,熱衷於計算機套用軟體的開發與研究。現從事石油行業相關軟體的研發工作。

彭曉東 西南師範大學畢業,計算機科學與技術專業。10餘年來,一直從事高校計算機網路管理、軟體開發及教學工作。

媒體推薦

“這是一部厲害的作品!其描述如此生動活潑,讓我再一次發現埋藏在OO原則之下的真相。這些真相都藏匿很深,以致我也忘記了去探究它們。作者的設計思維和對未來的認識尤其具有說服力。”
——Ian McFarland,New Context有限公司總裁

“對於一名自學成才的程式設計師來說,這是一本對鑽研某些OOP概念非常有用的書籍。我顯然也需要對那些概念更加熟悉才行。我並不孤獨,在工作的時候,總會有這樣一種提示在腦中不斷地閃現:‘Sandi Metz會怎么做呢?’”
——Jonathan Mukai,Pivotal in NYC

“作者以一絲不苟的務實態度與細膩清晰的表達方式,將那些令人難以捉摸的知識呈現給了迫切需要它的讀者。這些解決之道既可作為新手的準則,也可當作有經驗專業人士的指導。”
——Katrina Owen,Bengler開發人員

“我相信這是2012年最重要的一本Ruby書籍。不僅因為作者100%抓住了要點,而且她還採用了輕鬆的寫作風格,並大量使用類比,讓每一個要點都淺顯易懂。”
——Avdi Grimm,Exceptional Ruby and Objects on Rails作者

圖書目錄

第1章 面向對象設計 1
1.1 設計讚歌 2
1.1.1 設計解決的問題 2
1.1.2 為何難以更改 2
1.1.3 實用的設計定義 3
1.2 設計工具 4
1.2.1 設計原則 4
1.2.2 設計模式 5
1.3 設計行為 6
1.3.1 設計失敗 6
1.3.2 設計時機 7
1.3.3 設計評判 8
1.4 面向對象編程簡介 10
1.4.1 過程式語言 10
1.4.2 面向對象語言 11
1.5 小結 12
第2章 設計具有單一職責的類 13
2.1 決定類的內容 13
2.1.1 將方法分組成類 14
2.1.2 組織代碼以便於更改 14
2.2 創建具有單一職責的類 15
2.2.1 示例程式:腳踏車和齒輪 15
2.2.2 為何單一職責原則很重要 18
2.2.3 確定一個類是否具有單一職責 19
2.2.4 確定何時做出設計決策 19
2.3 編寫擁抱變化的代碼 20
2.3.1 要依賴行為,不依賴數據 21
2.3.2 全面推行單一職責原則 25
2.4 最後是真實的輪子需求 28
2.5 小結 30
第3章 管理依賴關係 31
3.1 理解依賴關係 31
3.1.1 認識依賴關係 32
3.1.2 對象間的耦合 33
3.1.3 其他依賴關係 34
3.2 編寫松耦合的代碼 35
3.2.1 注入依賴關係 35
3.2.2 隔離依賴關係 37
3.2.3 移除參數順序依賴關係 40
3.3 管理依賴方向 45
3.3.1 反轉依賴關係 45
3.3.2 選擇依賴方向 47
3.4 小結 50
第4章 創建靈活的接口 51
4.1 理解接口 51
4.2 定義接口 53
4.2.1 公共接口 53
4.2.2 私有接口 53
4.2.3 職責、依賴關係和接口 54
4.3 找出公共接口 54
4.3.1 示例程式:腳踏車旅遊公司 55
4.3.2 構建意圖 55
4.3.3 使用時序圖 56
4.3.4 請詢問“要什麼”,別告知“如何做” 59
4.3.5 尋求上下文獨立 61
4.3.6 信任其他對象 62
4.3.7 使用訊息來發現對象 63
4.3.8 創建基於訊息的應用程式 65
4.4 編寫能展現其(內在)最好面的代碼 65
4.4.1 創建顯式接口 65
4.4.2 善用其他類的公共接口 67
4.4.3 避免依賴私有接口 67
4.4.4 最小化上下文 67
4.5 迪米特法則 68
4.5.1 定義迪米特法則 68
4.5.2 違規的後果 68
4.5.3 避免違規 70
4.5.4 聽從迪米特法則 70
4.6 小結 71
第5章 使用鴨子類型技術降低成本 73
5.1 理解鴨子類型 73
5.1.1 鴨子類型概述 74
5.1.2 讓問題複雜些 75
5.1.3 發現鴨子類型 78
5.1.4 鴨子類型的後果 81
5.2 編寫依賴於鴨子類型的代碼 82
5.2.1 識別出隱藏的鴨子類型 82
5.2.2 信任你的鴨子類型 84
5.2.3 記錄好鴨子類型 84
5.2.4 在鴨子類型之間共享代碼 85
5.2.5 合理選擇鴨子類型 85
5.3 克服對鴨子類型的恐懼 86
5.3.1 使用靜態類型顛覆鴨子類型 86
5.3.2 靜態類型與動態類型 87
5.3.3 擁抱動態類型 88
5.4 小結 89
第6章 通過繼承獲得行為 91
6.1 理解經典的繼承 91
6.2 弄清使用繼承的地方 92
6.2.1 從一個具體類開始 92
6.2.2 嵌入多種類型 94
6.2.3 找出嵌入的類型 96
6.2.4 選擇繼承 96
6.2.5 描繪出繼承關係 98
6.3 誤用繼承 98
6.4 找出抽象 100
6.4.1 創建抽象父類 100
6.4.2 提升抽象行為 103
6.4.3 從具體分離出抽象 105
6.4.4 使用模板方法模式 107
6.4.5 實現所有模板方法 109
6.5 管理父類與子類之間的耦合 110
6.5.1 理解耦合 111
6.5.2 使用鉤子訊息解耦子類 115
6.6 小結 119
第7章 使用模組共享角色行為 121
7.1 理解角色 121
7.1.1 找出角色 122
7.1.2 組織職責 123
7.1.3 刪除不必要的依賴關係 125
7.1.4 編寫具體代碼 126
7.1.5 提取抽象 129
7.1.6 查找方法 132
7.1.7 繼承角色行為 135
7.2 編寫可繼承的代碼 136
7.2.1 識別出反模式 136
7.2.2 堅持抽象 136
7.2.3 重視契約 137
7.2.4 使用模板方法模式 138
7.2.5 預先將類解耦 138
7.2.6 創建淺層結構 138
7.3 小結 139
第8章 組合對象 141
8.1 Parts組合成Bicycle 141
8.1.1 更新Bicycle類 141
8.1.2 創建Parts層次結構 143
8.2 組合成Parts對象 145
8.2.1 創建Part 146
8.2.2 讓Parts對象更像一個數組 149
8.3 製造Parts 152
8.3.1 創建PartsFactory 153
8.3.2 藉助PartsFactory 154
8.4 組合成Bicycle 155
8.5 繼承和組合的抉擇 159
8.5.1 接受繼承帶來的後果 159
8.5.2 接受組合帶來的後果 161
8.5.3 選擇關係 162
8.6 小結 164
第9章 設計最划算的測試 165
9.1 意圖測試 166
9.1.1 了解測試的意圖 166
9.1.2 了解測試的內容 168
9.1.3 了解測試的時機 170
9.1.4 了解測試的方法 171
9.2 測試輸入訊息 173
9.2.1 刪除未使用的接口 174
9.2.2 證明公共接口 175
9.2.3 隔離測試對象 176
9.2.4 注入使用類的依賴關係 178
9.2.5 將依賴關係注入成角色 180
9.3 測試私有方法 184
9.3.1 在測試過程中忽略私有方法 184
9.3.2 從測試類里移除私有方法 185
9.3.3 選擇測試私有方法 185
9.4 測試輸出訊息 186
9.4.1 忽略查詢訊息 186
9.4.2 證明命令訊息 187
9.5 測試鴨子類型 189
9.5.1 測試角色 189
9.5.2 用角色測試驗證測試替身 194
9.6 測試繼承代碼 198
9.6.1 指定繼承接口 198
9.6.2 指定子類責任 201
9.6.3 測試獨特行為 204
9.7 小結 207
後記 208

相關詞條

熱門詞條

聯絡我們