本書兼顧Julia編程語言的優(yōu)勢和不足,全面介紹了Julia編程語言,介紹了模式所依賴的編程語言特性,同時涵蓋了一些高級的內(nèi)容。
全書分為四部分:
第1部分介紹設計模式;
第2部分就少Julia基礎;
第3部分介紹設計模式實現(xiàn);
第4部分介紹一些進階主題。
設計模式是開發(fā)可重用和可維護代碼的基本技術(shù)。它提供了一套經(jīng)過驗證的解決方案,使開發(fā)人員可以快速解決軟件開發(fā)中的問題。本書將演示如何在實際應用中利用設計模式。
本書首先概述應用程序設計中的設計模式和*佳實踐。你將了解Julia的一些基本的功能,例如模塊、數(shù)據(jù)類型、函數(shù)、接口和元編程。然后,你將掌握用于構(gòu)建大型應用程序的現(xiàn)代Julia設計模式,重點在于性能、可重用性、魯棒性和可維護性。本書還介紹了反模式以及如何避免開發(fā)中的常見錯誤和陷阱。你將學習如何在Julia中以不同方式更有效地實現(xiàn)傳統(tǒng)的面向?qū)ο蟮脑O計模式。本書包含各種用例和示例,例如Julia開發(fā)專家如何在其開源包中使用設計模式。
從本書中你將學到改善軟件設計、可擴展性和可重用性的方法,并能夠有效地使用設計模式來應對軟件開發(fā)中的常見挑戰(zhàn)。
通過閱讀本書,你將:
掌握Julia語言功能,這些功能對于開發(fā)大型軟件應用程序至關(guān)重要。
發(fā)現(xiàn)設計模式以改善整體應用程序架構(gòu)和設計。
學會開發(fā)模塊化、可擴展、高性能且易于維護的可重用程序。
學會權(quán)衡對用例使用不同設計模式的利弊。
探索從面向?qū)ο缶幊踢^渡到使用等效或更高級的Julia技術(shù)的方法。
Julia是一個為開發(fā)出高性能應用程序而設計的高級編程語言,旨在提高開發(fā)人員的生產(chǎn)力。其動態(tài)特性可以讓你快速做一個小規(guī)模的測試,然后移植到大的應用程序中。它的內(nèi)省工具可以通過分析高級代碼如何翻譯成低級代碼及機器碼來實現(xiàn)性能優(yōu)化。它的元編程更能幫助高級開發(fā)人員為特定領(lǐng)域的使用建立自定義的語法。它的多重分派和泛型方法功能使得開發(fā)人員可以輕松地在已有的方法上擴展新功能。鑒于以上優(yōu)點,Julia是可以在許多行業(yè)廣泛使用的優(yōu)秀程序開發(fā)語言。
這本書滿足了那些期望編寫高效代碼、提升系統(tǒng)性能以及設計出易維護軟件的Julia開發(fā)人員的需求。從Julia語言誕生到2018年8月的里程碑版本10,許多源于Julia核心開發(fā)人員和Julia資深用戶的優(yōu)秀設計模式都已盡收囊中。這些設計模式有時在博客或峰會中被提及,有時出現(xiàn)在Julia的Discourse論壇的某一次討論中,還有時出現(xiàn)在Julia Slack社區(qū)成員間的非正式談話中。本書收錄了這些設計模式,闡述了設計高質(zhì)量的Julia應用程序的實踐。
本書的首要目標是規(guī)范這些被充分證明過的設計模式,以便于Julia開發(fā)者社區(qū)吸收和利用。
總結(jié)和命名這些模式有如下好處:
能讓開發(fā)者之間的交流變得更加容易。
能讓開發(fā)者更好地理解和使用這些設計模式的代碼。
能讓開發(fā)者明確何時正確地使用設計模式。
本書的目標簡單但十分強大,讀完本書,你會在使用Julia語言設計和開發(fā)軟件時變得輕松。除此之外,本書提供的材料對未來關(guān)于Julia設計模式的討論十分有用。根據(jù)以往經(jīng)驗,新的設計模式將會隨著Julia語言的持續(xù)演化不斷地加入進來。
希望你能盡享閱讀本書的樂趣!
【本書的讀者對象】
本書的目標讀者是那些想為大型應用程序編寫符合Julia語言特性的代碼的初中級Julia開發(fā)人員。本書不是一本基礎書籍,所以希望你有一定的編程基礎。如果你對面向?qū)ο缶幊谭妒胶苁煜,會發(fā)現(xiàn)本書非常有用,它會告訴你如何采用不同的方法解決同一個問題,而Julia的方式常常是更好的。
本書提及的許多設計模式廣泛適用于所有領(lǐng)域和使用場景。不管你是數(shù)據(jù)科學家、研究員、系統(tǒng)開發(fā)人員還是企業(yè)軟件開發(fā)者,都會因在你的項目中使用這些設計模式而獲益。
【本書結(jié)構(gòu)】
第1章介紹設計模式的歷史和如何利用設計模式開發(fā)應用程序。它包含了一些適用于任何編程語言和編程范式的工業(yè)級軟件設計原則。
第2章探討如何規(guī)劃大型程序及如何管理其依賴關(guān)系,其中解釋了如何開發(fā)新的數(shù)據(jù)類型和表示層級關(guān)系。
第3章解釋函數(shù)是如何定義的以及多重分派是如何運行的,還討論了參數(shù)化方法和接口。針對這些方法和接口,不同的函數(shù)可以基于預定契約彼此正確地工作。
第4章介紹宏和元編程以及如何將源代碼轉(zhuǎn)換成另外一種形式,還描述了一些高效開發(fā)和調(diào)試宏的技巧。
第5章介紹與代碼重用相關(guān)的設計模式,包含通過組合實現(xiàn)代碼重用的委托模式、更正式的Holy Traits模式,以及從參數(shù)化的數(shù)據(jù)結(jié)構(gòu)創(chuàng)建新類型的參數(shù)化類型模式。
第6章介紹與提高系統(tǒng)性能相關(guān)的設計模式,包含更好的類型穩(wěn)定的全局常量模式、通過數(shù)據(jù)重排達到布局的數(shù)組結(jié)構(gòu)模式、通過并行計算優(yōu)化內(nèi)存的共享數(shù)組模式、緩存前面計算結(jié)果的記憶模式,以及通過函數(shù)特化提升性能的閘函數(shù)模式。
第7章介紹與代碼可維護性相關(guān)的設計模式,包含便于管理大型代碼庫的子模塊模式、便于創(chuàng)建數(shù)據(jù)類型的關(guān)鍵字定義模式、用較少代碼定義許多相似函數(shù)的代碼生成模式,以及為特殊領(lǐng)域創(chuàng)建新的語法規(guī)則的領(lǐng)域特定語言模式。
第8章介紹幫助你編寫更加安全的代碼的設計模式,包含為字段提供標準訪問權(quán)限的訪問器模式、控制字段的訪問的屬性模式、限制變量范圍的let塊模式,以及處理錯誤的異常處理模式。
第9章介紹前面提到的幾類模式之外的設計模式,包含動態(tài)分派的單例類型分派模式、構(gòu)建獨立測試的打樁/模擬模式,以及建立線性數(shù)據(jù)處理流水線的函數(shù)管道模式。
第10章介紹需要避免的設計模式。主要的反模式就是海盜反模式,例如為數(shù)據(jù)類型定義和擴展那些不屬于你的函數(shù),還包含降低系統(tǒng)性能的窄參數(shù)類型反模式和分散的非具體字段類型反模式。
第11章介紹GoF的Design Patterns: Elements of Reusable Object-Oriented Software中描述的設計模式,還探討在Julia中如何簡化或以不同方式實現(xiàn)這些設計模式。
第12章探討Julia如何支持繼承,以及為什么在Julia中繼承會被設計為和主流面向?qū)ο缶幊陶Z言中的完全不同。然后討論類型變體(關(guān)于多重分派使用的數(shù)據(jù)類型之間的子類型關(guān)系的重要概念)。
【如何充分利用本書 】
你可以在Julia的官方網(wǎng)站(https://julialangorg/)下載版本。
本書每章所提及的代碼都在Github中如技術(shù)要求所述。編寫本書時,這些代碼都在Julia 130上通過了測試。
【下載示例代碼】
本書的代碼在Github的https://github.com/PacktPublishing/Hands-on-Design-Patterns-and-Best-Practices-with-Julia中。任何修改都會更新到Github的代碼倉庫中。
作者:湯姆~鄺(Tom Kwong)
注冊金融分析師。他是一位經(jīng)驗豐富的軟件工程師,擁有超過25年行業(yè)編程經(jīng)驗。他的大部分職業(yè)生涯都投身在金融服務行業(yè)。他的專長包括軟件架構(gòu)、軟件設計、交易系統(tǒng)和風控系統(tǒng)開發(fā)。
從2017年開始,他發(fā)現(xiàn)了Julia編程語言并貢獻了許多開源包,包括SASLib.jl。
譯者:方明
Thoughtworks高級軟件咨詢師,2010年畢業(yè)于延邊大學計算機系數(shù)字媒體技術(shù)專業(yè)。先后經(jīng)歷過多個手機游戲項目和聚合支付項目,擁有豐富的游戲服務端開發(fā)經(jīng)驗和支付領(lǐng)域知識,擅長Java、Scala、 Javascript等多種編程語言。目前專注于海外項目交付,重點關(guān)注敏捷實踐、團隊管理和交付效能等領(lǐng)域。
序言
前言
作者簡介
審校者簡介
【部分 從設計模式開始】
第1章 設計模式和相關(guān)原則 2
11 設計模式的歷史 2
111 設計模式的興起 3
112 關(guān)于GoF模式的更多思考 3
113 在本書中我們?nèi)绾蚊枋鲈O計模式 4
12 軟件設計原則 4
121 SOLID原則 5
122 DRY原則 6
123 KISS原則 6
124 POLA原則 7
125 YAGNI原則 7
126 POLP原則 8
13 軟件質(zhì)量目標 8
131 可重用性 8
132 性能 9
133 可維護性 10
134 安全性 11
14 小結(jié) 11
15 問題 12
【第二部分 Julia基礎】
第2章 模塊、包和數(shù)據(jù)類型 14
21 技術(shù)要求 14
22 程序開發(fā)中不斷增長的痛點 15
221 數(shù)據(jù)科學項目 15
222 企業(yè)應用程序 15
223 適應增長 16
23 使用命名空間、模塊和包 16
231 理解命名空間 17
232 創(chuàng)建模塊和包 17
233 創(chuàng)建子模塊 23
234 在模塊中管理文件 24
24 管理包的依賴關(guān)系 24
241 理解語義版本控制方案 24
242 指定Julia包的依賴關(guān)系 25
243 避免循環(huán)依賴 28
25 設計抽象類型和具體類型 29
251 設計抽象類型 29
252 設計具體類型 33
253 使用類型運算符 37
254 抽象類型和具體類型的差異 39
26 使用參數(shù)化類型 39
261 使用參數(shù)化復合類型 40
262 使用參數(shù)化抽象類型 42
27 數(shù)據(jù)類型轉(zhuǎn)換 43
271 執(zhí)行簡單的數(shù)據(jù)類型轉(zhuǎn)換 44
272 注意有損轉(zhuǎn)換 44
273 理解數(shù)字類型轉(zhuǎn)換 45
274 重溫自動轉(zhuǎn)換規(guī)則 45
275 理解函數(shù)分派規(guī)則 47
28 小結(jié) 48
29 問題 49
第3章 設計函數(shù)和接口 50
31 技術(shù)要求 50
32 設計函數(shù) 51
321 用例太空戰(zhàn)爭游戲 51
322 定義函數(shù) 51
323 注釋函數(shù)參數(shù) 52
324 使用可選參數(shù) 55
325 使用關(guān)鍵字參數(shù) 57
326 接受可變數(shù)量的參數(shù) 58
327 splatting參數(shù) 59
328 類實體函數(shù) 60
329 開發(fā)匿名函數(shù) 61
3210 使用do語法 62
33 理解多重分派 63
331 什么是分派 63
332 匹配窄類型 64
333 分派多個參數(shù) 65
334 分派過程中可能存在的歧義 67
335 歧義檢測 68
336 理解動態(tài)分派 70
34 利用參數(shù)化方法 71
341 使用類型參數(shù) 71
342 使用類型參數(shù)替換抽象類型 72
343 在使用參數(shù)時強制類型一致性 73
344 從方法簽名中提取類型信息 74
35 使用接口 75
351 設計和開發(fā)接口 75
352 處理軟契約 79
353 使用特質(zhì) 80
36 小結(jié) 81
37 問題 81
第4章 宏和元編程 82
41 技術(shù)要求 83
42 理解元編程的需求 83
421 使用@time宏測量性能 83
422 循環(huán)展開 84
43 使用表達式 86
431 試用解析器 86
432 手動構(gòu)造表達式對象 88
433 嘗試更復雜的表達式 90
434 計算表達式 93
435 在表達式中插入變量 94
436 對符號使用QuoteNode 95
437 在嵌套表達式中插值 96
44 開發(fā)宏 97
441 什么是宏 97
442 編寫個宏 98
443 傳遞字面量參數(shù) 98
444 傳遞表達式參數(shù) 99
445 理解宏擴展過程 100
446 操作表達式 101
447 理解衛(wèi)生宏 104
448 開發(fā)非標準字符串字面量 105
45 使用生成函數(shù) 107
451 定義生成函數(shù) 108
452 檢查生成函數(shù)參數(shù) 109
46 小結(jié) 110
47 問題 110
【第三部分 實現(xiàn)設計模式】
第5章 可重用模式 114
51 技術(shù)要求 114
52 委托模式 114
521 在銀行用例中應用委托模式 115
522 現(xiàn)實生活中的例子 119
523 注意事項 120
53 Holy Traits模式 120
531 重溫個人資產(chǎn)管理用例 121
532 實現(xiàn)Holy Traits模式 122
533 重溫一些常見用法 126
534 使用SimpleTraitsjl包 129
54 參數(shù)化類型模式 130
541 在股票交易應用程序中使用刪除文本參數(shù)化類型 132
542 現(xiàn)實生活中的例子 135
55 小結(jié) 138
56 問題 139
第6章 性能模式 140
61 技術(shù)要求 141
62 全局常量模式 141
621 使用全局變量對性能進行基準測試 141
622 享受全局常量的速度 143
623 使用類型信息注釋變量 143
624 理解常量為何有助于性能 144
625 將全局變量作為函數(shù)參數(shù)傳遞 145
626 將變量隱藏在全局常量中 145
627 現(xiàn)實生活中的例子 146
628 注意事項 147