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