面向對象開發參考手冊 面向对象开发参考手册

黃磊

立即出貨

買這商品的人也買了...

相關主題

商品描述

<內容簡介>

面向對象軟件設計的經典書籍,如《敏捷軟件開發》、《領域驅動設計》、《設計模式》、《測試驅動開發》、《極限編程》、《重構》等,已名聲在外,其解讀書籍也多如牛毛。但其往往只講述某個方面,要整體理解,必須通讀原著,閱讀量頗大,特別原著比較深奧,短時間內很難完全理解。市面上缺乏整體歸納、提煉濃縮的書籍。
    黃磊編著的《面向對象開發參考手冊》致力於讓讀者形成一個整體、全面的概念和印象,濃縮、提煉了經典書籍的精華,結合作者自身十幾年的經驗,力爭呈現一本深入淺出、兼收並蓄、涉及各個方面的綜合版本,可以縮減學習的時間成本,並能夠像工具書一樣翻閱參考。
    《面向對象開發參考手冊》寫作之初是為了作者所在公司開發人員培訓用。作者為公司人員進行了100多課時的培訓,按照培訓內容整理了本書。從這個角度來說,它特別適合開發人員學習使用,尤其適於那些剛畢業的「菜鳥」們學習使用。當然,學習是沒有窮盡的,資深的開發人員,也可以經常翻閱本書來尋找靈感。

<目錄>

第1章 轉變觀念 1
  1.1 傳統的面向對象 1
  1.2 重新認識對象 4
  1.3 如何分解對象? 6
  1.4 如何設計對象? 8
  1.5 設計對象的接口 9
  1.6 改進對象的繼承 12
  1.7 設計抽象的系統 13
  1.8 設計美的系統 13
第2章 經典模式 15
  2.1 設計模式的基本原則 18
  2.2 抽象工廠模式(Abstract Factory) 18
  2.3 抽象服務模式(Abstract Server) 19
  2.4 無環訪問者模式(Acyclic Visitor) 20
  2.5 適配器模式(Adapter) 21
  2.6 橋接模式(Bridge) 22
  2.7 生成器模式(Builder) 23
  2.8 職責鏈模式(Chain of Responsibility) 24
  2.9 命令模式(Command) 25
  2.10 組合模式(Composite) 26
  2.11 裝飾模式(Decorator) 27
  2.12 擴展對象模式(Extension Object) 28
  2.13 外觀模式(Fa?ade) 29
  2.14 工廠方法模式(Factory Method) 29
  2.15 享元模式(Flyweight) 30
  2.16 解釋器模式(Interpreter) 31
  2.17 迭代器模式(Iterator) 32
  2.18 中介者模式(Mediator) 33
  2.19 備忘錄模式(Memento) 34
  2.20 空對象模式(Null Object) 35
  2.21 觀察者模式(Observer) 36
  2.22 原型模式(Prototype) 37
  2.23 代理模式(Proxy) 38
  2.24 數量模式(Quantity) 39
  2.25 範圍模式(Range) 40
  2.26 單件模式(Singleton) 41
  2.27 規格模式(Specification) 41
  2.28 狀態模式(State) 42
  2.29 策略模式(Strategy) 43
  2.30 模板方法模式(Template Method) 44
  2.31 訪問者模式(Visitor) 45
  2.32 設計模式應用的綜合例子 47
第3章 敏捷軟件 51
  3.1 基本原則 52
    3.1.1 對象設計原則 53
    3.1.2 包的設計原則 56
  3.2 敏捷建模 59
    3.2.1 關於建模的一些認識誤區 60
    3.2.2 敏捷建模的原則和實踐 60
  3.3 按意圖編程 61
    3.3.1 名字:選擇語義清晰的名字 62
    3.3.2 簡單:做最簡單但又能工作的事情 62
    3.3.3 假設:做有根據的假設 62
    3.3.4 註釋:「不要註釋」 63
  3.4 軟件的度量 63
    3.4.1 對象的度量 63
    3.4.2 包的度量 64
    3.4.3 測試的度量 65
  3.5 延伸閱讀:源代碼就是設計 66
第4章 測試驅動 75
  4.1 什麼是TDD 75
    4.1.1 測試原則:儘早、經常、自動化 76
    4.1.2 驗收測試 78
    4.1.3 模擬對象 78
  4.2 測試技巧 79
    4.2.1 測試之前的思想準備 79
    4.2.2 測試之間的關係——相互獨立的測試 80
    4.2.3 什麼時候寫測試 80
    4.2.4 如何開始寫測試——斷言優先 80
    4.2.5 如何選擇測試數據——顯然數據 81
    4.2.6 測試如何組織——測試列表 81
    4.2.7 測試哪些東西 82
    4.2.8 簡單的測試 84
    4.2.9 易讀的測試 84
    4.2.10 可維護的測試 84
    4.2.11 可運行的測試 85
    4.2.12 可調試的測試 86
    4.2.13 測試的初始化 86
    4.2.14 使用斷言的消息參數 87
    4.2.15 使用代碼覆蓋率工具 87
    4.2.16 測試代碼也要不斷重構 87
  4.3 開發工具的測試框架 88
第5章 重構方法 91
  5.1 軟件的味道 92
    5.1.1 重複代碼 93
    5.1.2 過長方法 94
    5.1.3 過大類 94
    5.1.4 過長參數列表 95
    5.1.5 發散變化 96
    5.1.6 霰彈式手術 96
    5.1.7 依戀情結(交往不當) 96
    5.1.8 數據泥團 97
    5.1.9 基本類型偏執 97
    5.1.10 switch語句 98
    5.1.11 平行繼承體系 99
    5.1.12 冗贅類 99
    5.1.13 誇誇其談的未來性 100
    5.1.14 令人迷惑的臨時字段 100
    5.1.15 過度耦合的消息鏈 101
    5.1.16 中間轉手人 101
    5.1.17 狎昵關係 102
    5.1.18 異曲同工的類 102
    5.1.19 不完善的程序庫類 102
    5.1.20 數據類 103
    5.1.21 被拒絕的遺贈 103
    5.1.22 不當註釋 104
    5.1.23 過於複雜的條件邏輯 105
    5.1.24 不恰當的暴露 105
    5.1.25 解決方案蔓延 105
    5.1.26 組合爆炸 106
    5.1.27 怪異的解決方案 106
  5.2 如何開始重構 106
    5.2.1 什麼時候重構 106
    5.2.2 什麼時候不能重構 107
    5.2.3 怎樣開始重構——掌握好重構的節奏 107
  5.3 重構方法索引 108
  5.4 重新組織方法 111
    5.4.1 提煉方法 111
    5.4.2 內聯方法 112
    5.4.3 內聯臨時變量 112
    5.4.4 引入解釋變量 113
    5.4.5 移除對參數的賦值 113
    5.4.6 用方法對象替代方法 114
    5.4.7 用查詢替代臨時變量 114
    5.4.8 分解臨時變量 115
    5.4.9 替換演算法 115
  5.5 在對象間遷移特性 116
    5.5.1 提煉類 116
    5.5.2 隱藏委託 116
    5.5.3 內聯類 117
    5.5.4 引入外加方法 117
    5.5.5 引入本地擴展 118
    5.5.6 遷移字段 118
    5.5.7 遷移方法 119
    5.5.8 移除中間人 120
  5.6 重新組織數據 120
    5.6.1 雙向關聯改為單向關聯 120
    5.6.2 引用對象改為值對象 121
    5.6.3 單向關聯改為雙向關聯 122
    5.6.4 值對象改為引用對象 122
    5.6.5 複製被觀察的數據 123
    5.6.6 封裝集合 123
    5.6.7 封裝字段 124
    5.6.8 用對象替代數組 124
    5.6.9 用對象替代數據值 125
    5.6.10 用符號常數替代魔幻數字 126
    5.6.11 用數據類替代記錄 126
    5.6.12 用字段替代子類 126
    5.6.13 用類替代類型碼 127
    5.6.14 用狀態/策略模式替代類型碼 128
    5.6.15 用子類替代類型碼 128
    5.6.16 自封裝字段 129
  5.7 簡化條件表達式 130
    5.7.1 合併條件表達式 130
    5.7.2 合併重複的條件片斷 131
    5.7.3 分解條件式 131
    5.7.4 引入斷言 131
    5.7.5 引入空對象 132
    5.7.6 移除控制標誌 133
    5.7.7 用命令模式替代條件調度 133
    5.7.8 用策略模式替代條件邏輯 134
    5.7.9 用多態替代條件式 135
    5.7.10 用衛述語句替代嵌套條件式 135
    5.7.11 用狀態模式替代狀態改變條件式 136
  5.8 簡化方法調用 137
    5.8.1 增加參數 138
    5.8.2 構造函數鏈 138
    5.8.3 組合方法 139
    5.8.4 封裝向下轉型 139
    5.8.5 隱藏方法 140
    5.8.6 引入參數對象 140
    5.8.7 把聚集操作遷移到收集參數 141
    5.8.8 把聚集操作遷移到訪問者模式 141
    5.8.9 把裝飾功能遷移到裝飾者模式 143
    5.8.10 參數化方法 144
    5.8.11 保持對象完整 145
    5.8.12 移除參數 145
    5.8.13 移除設置方法 146
    5.8.14 重命名方法 146
    5.8.15 用工廠方法替代構造函數 146
    5.8.16 用異常替代錯誤碼 147
    5.8.17 用測試替代異常 147
    5.8.18 用組合模式替代隱含樹 148
    5.8.19 用明確方法替代參數 149
    5.8.20 用方法替代參數 149
    5.8.21 分離查詢和修改 150
  5.9 處理概括關係 151
    5.9.1 摺疊繼承體系 151
    5.9.2 提煉適配器模式 152
    5.9.3 提煉組合模式 153
    5.9.4 提煉接口 153
    5.9.5 提煉子類 154
    5.9.6 提煉超類 155
    5.9.7 塑造模板方法模式 155
    5.9.8 上移構造函數 156
    5.9.9 上移字段 157
    5.9.10 上移方法 157
    5.9.11 下移字段 157
    5.9.12 下移方法 158
    5.9.13 用繼承替代委託 158
    5.9.14 用觀察者模式替代硬編碼通知 159
    5.9.15 用解釋器模式替代隱式語言 160
    5.9.16 用委託替代繼承 161
    5.9.17 用組合模式替代一/多之分 162
    5.9.18 統一接口 163
    5.9.19 用適配器模式統一接口 163
  5.10 封裝對象的創建 164
    5.10.1 用工廠封裝類 164
    5.10.2 用生成器模式封裝組合模式 165
    5.10.3 提煉參數 166
    5.10.4 內聯單件模式 166
    5.10.5 用工廠方法引入多態創建 167
    5.10.6 用單件模式限制實例化 167
    5.10.7 把創建知識遷移到工廠 168
    5.10.8 用創建方法替代構造函數 169
  5.11 大型重構 169
    5.11.1 過程化設計轉化為對象設計 170
    5.11.2 提煉繼承體系 170
    5.11.3 分離域和表示層 171
    5.11.4 梳理分解繼承體系 172
第6章 領域模型 173
  6.1 目標 175
    6.1.1 消化知識 176
    6.1.2 交流語言 177
    6.1.3 模型和代碼綁定 178
  6.2 基本構件 179
    6.2.1 分離領域 180
    6.2.2 關聯 182
    6.2.3 實體 183
    6.2.4 值對象 183
    6.2.5 服務 184
    6.2.6 模塊(包) 185
    6.2.7 聚合 186
    6.2.8 工廠 189
    6.2.9 倉儲 191
  6.3 深層模型 195
  6.4 挖掘隱含概念 196
    6.4.1 概念挖掘 196
    6.4.2 顯式約束 197
    6.4.3 作為領域對象的流程 198
    6.4.4 規格模式 199
  6.5 柔性設計 204
    6.5.1 釋義接口 205
    6.5.2 無副作用函數 207
    6.5.3 斷言 208
    6.5.4 概念輪廓 209
    6.5.5 孤立類 210
    6.5.6 操作封閉 210
    6.5.7 聲明性設計 211
  6.6 戰略性設計 214
  6.7 限界上下文 215
    6.7.1 持續集成 218
    6.7.2 上下文映射 219
    6.7.3 共享內核 219
    6.7.4 客戶/供應商開發團隊 220
    6.7.5 同流者 220
    6.7.6 防腐層 220
    6.7.7 隔離方式 221
    6.7.8 開放主機服務 222
    6.7.9 公佈語言 222
  6.8 模型精煉 222
    6.8.1 核心領域 223
    6.8.2 通用子域 224
    6.8.3 領域願景聲明 225
    6.8.4 突出核心 225
    6.8.5 內聚機制 226
    6.8.6 隔離核心 227
    6.8.7 抽象核心 227
  6.9 大比例結構 228
    6.9.1 漸進順序 230
    6.9.2 系統隱喻 230
    6.9.3 職責層 231
    6.9.4 知識級別 232
    6.9.5 插件框架 235
第7章 敏捷過程 237
  7.1 敏捷宣言 237
  7.2 敏捷過程的原則 238
  7.3 典型的敏捷過程 240
    7.3.1 計劃 240
    7.3.2 測試 241
    7.3.3 重構 244
  7.4 敏捷實踐 245
    7.4.1 基本實踐 245
    7.4.2 擴展實踐 247
第8章 應用實踐 249
  8.1 培養敏感性 249
  8.2 統一版本(產品化) 250
  8.3 從數據模型中心到領域模型中心 251
    8.3.1 讓領域對象封裝數據結構 251
    8.3.2 O-R映射 252
    8.3.3 推遲數據庫和UI的實現 253
  8.4 使用通用語言建模 253
  8.5 分離接口與實現 254
  8.6 區分職責與功能 254
  8.7 提煉知識 255
  8.8 消除基本類型偏執 256
  8.9 合理劃分對象 257
  8.10 牢記測試先行 257
寫在最後 259