![](/c49/99/10036835311288.jpg)
店鋪:機械工業出版社官方旗艦店 出版社:機械工業出版社 ISBN:9787111689492 商品編碼:10036835311288 品牌:機械工業出版社(CMP) 頁數:372 字數:332000 審圖號:9787111689492 作者:湯姆·邝
"![baecf198635367d9.jpg](https://img10.360buyimg.com/cms/jfs/t1/180445/28/6295/377762/60b0bd82E6c4ef32e/baecf198635367d9.jpg) 內容簡介 本書兼顧Julia編程語言的優勢和不足,全面介紹了Julia編程語言,介紹了模式所依賴的編程語言特性,同時涵蓋了一些*級的內容。全書分為四部分,*1部分介紹設計模式,*二部分就少Julia基礎,第三部分介紹設計模式實現,第四部分介紹一些進階主題。 目錄 序言 前言 作者簡介 審校者簡介 *一部分 從設計模式開始 *1章 設計模式和相關原則 2 1.1 設計模式的歷史 2 1.1.1 設計模式的興起 3 1.1.2 關於GoF模式的更多思考 3 1.1.3 在本書中我們如何描述設計模式 4 1.2 軟件設計原則 4 1.2.1 SOLID原則 5 1.2.2 DRY原則 6 1.2.3 KISS原則 6 1.2.4 POLA原則 7 1.2.5 YAGNI原則 7 1.2.6 POLP原則 8 1.3 軟件質量目標 8 1.3.1 可重用性 8 1.3.2 性能 9 1.3.3 可維護性 10 1.3.4 安全性 11 1.4 小結 11 1.5 問題 12 *二部分 Julia基礎 *2章 模塊、包和數據類型 14 2.1 技術要求 14 2.2 程序開發中不斷增長的痛點 15 2.2.1 數據科學項目 15 2.2.2 企業應用程序 15 2.2.3 適應增長 16 2.3 使用命名空間、模塊和包 16 2.3.1 理解命名空間 17 2.3.2 創建模塊和包 17 2.3.3 創建子模塊 23 2.3.4 在模塊中管理文件 24 2.4 管理包的依賴關繫 24 2.4.1 理解語義版本控制方案 24 2.4.2 指定Julia包的依賴關繫 25 2.4.3 避免循環依賴 28 2.5 設計抽像類型和具體類型 29 2.5.1 設計抽像類型 29 2.5.2 設計具體類型 33 2.5.3 使用類型運算符 37 2.5.4 抽像類型和具體類型的差異 39 2.6 使用參數化類型 39 2.6.1 使用參數化復合類型 40 2.6.2 使用參數化抽像類型 42 2.7 數據類型轉換 43 2.7.1 執行簡單的數據類型轉換 44 2.7.2 注意有損轉換 44 2.7.3 理解數字類型轉換 45 2.7.4 重溫自動轉換規則 45 2.7.5 理解函數分派規則 47 2.8 小結 48 2.9 問題 49 第3章 設計函數和接口 50 3.1 技術要求 50 3.2 設計函數 51 3.2.1 用例——太空戰爭遊戲 51 3.2.2 定義函數 51 3.2.3 注釋函數參數 52 3.2.4 使用可選參數 55 3.2.5 使用關鍵字參數 57 3.2.6 接受可變數量的參數 58 3.2.7 splatting參數 59 3.2.8 *一類實體函數 60 3.2.9 開發匿名函數 61 3.2.10 使用do語法 62 3.3 理解多重分派 63 3.3.1 什麼是分派 63 3.3.2 匹配*窄類型 64 3.3.3 分派多個參數 65 3.3.4 分派過程中可能存在的歧義 67 3.3.5 歧義檢測 68 3.3.6 理解動態分派 70 3.4 利用參數化方法 71 3.4.1 使用類型參數 71 3.4.2 使用類型參數替換抽像類型 72 3.4.3 在使用參數時強制類型一致性 73 3.4.4 從方法簽名中提取類型信息 74 3.5 使用接口 75 3.5.1 設計和開發接口 75 3.5.2 處理軟契約 79 3.5.3 使用特質 80 3.6 小結 81 3.7 問題 81 第4章編程 82 4.1 技術要求 83 4.2編程的需求 83 4.2.1 使用@time宏測量性能 83 4.2.2 循環展開 84 4.3 使用表達式 86 4.3.1 試用解析器 86 4.3.2 手動構造表達式對像 88 4.3.3 嘗試更復雜的表達式 90 4.3.4 計算表達式 93 4.3.5 在表達式中插入變量 94 4.3.6 對符號使用QuoteNode 95 4.3.7 在嵌套表達式中插值 96 4.4 開發宏 97 4.4.1 什麼是宏 97 4.4.2 編寫*一個宏 98 4.4.3 傳遞字面量參數 98 4.4.4 傳遞表達式參數 99 4.4.5 理解宏擴展過程 100 4.4.6 操作表達式 101 4.4.7 理解衛生宏 104 4.4.8 開發非標準字符串字面量 105 4.5 使用生成函數 107 4.5.1 定義生成函數 108 4.5.2 檢查生成函數參數 109 4.6 小結 110 4.7 問題 110 第三部分 實現設計模式 第5章 可重用模式 114 5.1 技術要求 114 5.2 委托模式 114 5.2.1 在銀行用例中應用委托模式 115 5.2.2 現實生活中的例子 119 5.2.3 注意事項 120 5.3 Holy Traits模式 120 5.3.1 重溫個人資產管理用例 121 5.3.2 實現Holy Traits模式 122 5.3.3 重溫一些常見用法 126 5.3.4 使用SimpleTraits.jl包 129 5.4 參數化類型模式 130 5.4.1 在股票交易應用程序中使用刪除文本參數化類型 132 5.4.2 現實生活中的例子 135 5.5 小結 138 5.6 問題 139 第6章 性能模式 140 6.1 技術要求 141 6.2 全局常量模式 141 6.2.1 使用全局變量對性能進行基準測試 141 6.2.2 享受全局常量的速度 143 6.2.3 使用類型信息注釋變量 143 6.2.4 理解常量為何有助於性能 144 6.2.5 將全局變量作為函數參數傳遞 145 6.2.6 將變量隱藏在全局常量中 145 6.2.7 現實生活中的例子 146 6.2.8 注意事項 147 6.3 數組結構模式 147 6.3.1 使用業務領域模型 148 6.3.2 使用不同的數據布局提高性能 150 6.3.3 注意事項 155 6.4 共享數組模式 155 6.4.1 風險管理用例介紹 156 6.4.2 準備示例數據 157 6.4.3 高性能解決方案概述 158 6.4.4 在共享數組中填充數據 159 6.4.5 直接在共享數組上分析數據 161 6.4.6 理解並行處理的開銷 163 6.4.7 配置共享內存使用情況 164 6.4.8 確保工作進程可以訪問代碼和數據 166 6.4.9 避免並行進程之間的競態 167 6.4.10 使用共享數組的約束 167 6.5 記憶模式 168 6.5.1 斐波那契函數介紹 168 6.5.2 改善斐波那契函數的性能 169 6.5.3 自動化構造記憶緩存 171 6.5.4 理解泛型函數的約束 172 6.5.5 支持具有多個參數的函數 173 6.5.6 處理參數中的可變數據類型 174 6.5.7 使用宏來記憶泛型函數 176 6.5.8 現實生活中的例子 177 6.5.9 注意事項 178 6.5.10 使用Caching.jl包 178 6.6 閘函數模式 180 6.6.1 識別類型不穩定的函數 181 6.6.2 理解性能影響 182 6.6.3 開發閘函數 183 6.6.4 處理類型不穩定的輸出變量 183 6.6.5 使用@inferred宏 186 6.7 小結 187 6.8 問題 187 第7章 可維護性模式 188 7.1 技術要求 188 7.2 子模塊模式 189 7.2.1 理解何時需要子模塊 189 7.2.2 理解傳入耦合與傳出耦合 190 7.2.3 管理子模塊 191 7.2.4 在模塊和子模塊之間引用符號和函數 191 7.2.5 刪除雙向耦合 193 7.2.6 考慮拆分為頂層模塊 195 7.2.7 理解使用子模塊的反論點 195 7.3 關鍵字定義模式 195 7.3.1 重溫結構定義和構造函數 196 7.3.2 在構造函數中使用關鍵字參數 196 7.3.3 使用@kwdef宏簡化代碼 197 7.4 代碼生成模式 198 7.4.1 文件日志記錄器用例介紹 199 7.4.2 函數定義的代碼生成 201 7.4.3 調試代碼生成 202 7.4.4 考慮代碼生成以外的選項 204 7.5 領域特定語言模式 205 7.5.1 L繫統介紹 206 7.5.2 為L繫統設計DSL 207 7.5.3 重溫L繫統核心邏輯 208 7.5.4 實現L繫統的DSL 210 7.6 小結 215 7.7 問題 215 第8章 魯棒性模式 216 8.1 技術要求 217 8.2 訪問器模式 217 8.2.1 識別對像的隱式接口 217 8.2.2 實現getter函數 218 8.2.3 實現setter函數 219 8.2.4 禁止直接訪問字段 220 8.3 屬性模式 220 8.3.1 延遲文件加載器介紹 220 8.3.2 理解用於字段訪問的點符號 222 8.3.3 實現讀取訪問和延遲加載 223 8.3.4 控制對對像字段的寫入訪問 226 8.3.5 報告可訪問字段 227 8.4 let塊模式 228 8.4.1 網絡爬蟲用例介紹 228 8.4.2 使用閉包將私有變量和函數隱藏起來 230 8.4.3 限制長腳本或函數的變量範圍 232 8.5 異常處理模式 233 8.5.1 捕捉和處理異常 233 8.5.2 處理各種類型的異常 233 8.5.3 在頂層處理異常 235 8.5.4 跟隨棧幀 236 8.5.5 理解異常處理對性能的影響 238 8.5.6 重試操作 239 8.5.7 異常時選用nothing 241 8.6 小結 242 8.7 問題 243 第9章 其他模式 244 9.1 技術要求 244 9.2 單例類型分派模式 245 9.2.1 開發命令處理器 245 9.2.2 理解單例類型 245 9.2.3 使用Val參數化數據類型 246 9.2.4 使用單例類型進行動態分派 247 9.2.5 理解分派的性能優勢 249 9.3 打樁/模擬模式 251 9.3.1 什麼是測試替身 251 9.3.2 信貸審批用例介紹 252 9.3.3 使用打樁執行狀態驗證 253 9.3.4 使用Mocking包實現打樁 255 9.3.5 將多個打樁應用於同一函數 256 9.3.6 使用模擬執行行為驗證 257 9.4 函數管道模式 259 9.4.1 Hacker News分析用例介紹 260 9.4.2 理解函數管道 264 9.4.3 設計可組合函數 265 9.4.4 為平均得分函數開發函數管道 266 9.4.5 在函數管道中實現條件邏輯 269 9.4.6 沿函數管道進行廣播 270 9.4.7 有關使用函數管道的注意事項 271 9.5 小結 272 9.6 問題 272 *10章 反模式 273 10.1 技術要求 273 10.2 海盜反模式 274 10.2.1 I類海盜—重新定義函數 274 10.2.2 II類海盜—不用自己的類型擴展 275 10.2.3 III類海盜—用自己的類型擴展,但目的不同 277 10.3 窄參數類型反模式 279 10.3.1 考慮參數類型的多種選項 279 10.3.2 評估性能 284 10.4 非具體字段類型反模式 285 10.4.1 理解復合數據類型的內存布局 285 10.4.2 設計復合類型時要考慮具體類型 287 10.4.3 比較具體字段類型和非具體字段類型的性能 288 10.5 小結 289 10.6 問題 289 *11章 傳統的面向對像模式 290 11.1 技術要求 290 11.2 創建型模式 291 11.2.1 工廠方法模式 291 11.2.2 抽像工廠模式 292 11.2.3 單例模式 294 11.2.4 建造者模式 296 11.2.5 原型模式 297 11.3 行為型模式 298 11.3.1 責任鏈模式 298 11.3.2 中介者模式 300 11.3.3 備忘錄模式 302 11.3.4 觀察者模式 304 11.3.5 狀態模式 305 11.3.6 策略模式 306 11.3.7 模板方法模式 308 11.3.8 命令模式、解釋器模式、迭代器模式和訪問者模式 310 11.4 結構型模式 310 11.4.1 適配器模式 310 11.4.2 組合模式 313 11.4.模式 314 11.4.4 橋接模式、裝飾器模式和外觀模式 316 11.5 小結 316 11.6 問題 317 第四部分 進階主題 *12章 繼承與變體 320 12.1 技術要求 320 12.2 實現繼承和行為子類型化 321 12.2.1 理解實現繼承 321 12.2.2 理解行為子類型化 323 12.2.3 正方形–矩形問題 324 12.2.4 脆弱的基類問題 326 12.2.5 重溫鴨子類型 327 12.3 協變、不變和逆變 328 12.3.1 理解不同種類的變體 328 12.3.2 參數化類型是不變的 328 12.3.3 方法參數是協變的 331 12.3.4 剖析函數類型 331 12.3.5 確定函數類型的變體 333 12.3.6 實現自己的函數類型分派 335 12.4 再談參數化方法 336 12.4.1 指定類型變量 337 12.4.2 匹配類型變量 337 12.4.3 理解對角線規則 338 12.4.4 對角線規則的例外 339 12.4.5 類型變量的可用性 339 12.5 小結 340 12.6 問題 341 問題答案 342
" |