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