注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)C/C++及其相關(guān)C++設(shè)計(jì)新思維:泛型編程與設(shè)計(jì)模式之應(yīng)用

C++設(shè)計(jì)新思維:泛型編程與設(shè)計(jì)模式之應(yīng)用

C++設(shè)計(jì)新思維:泛型編程與設(shè)計(jì)模式之應(yīng)用

定 價(jià):¥59.80

作 者: (美)Andrei Alexandrescu著;侯捷,於春景譯
出版社: 華中科技大學(xué)出版社
叢編項(xiàng):
標(biāo) 簽: C++

ISBN: 9787560929064 出版時(shí)間: 2003-03-01 包裝: 平裝
開本: 23cm 頁(yè)數(shù): 323 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  ModernC++Design是一部重要的著作,它從根本上層示了genericpatterns(泛型模式)或patterntemplates(模式模板),并將它們視之為“在C++中創(chuàng)造可擴(kuò)充設(shè)計(jì)”的一種功能強(qiáng)大的新方法,這種方法結(jié)合了template和patterns,你可能未曾想過,但的確存在。如果你的工作涉及C++設(shè)計(jì)和編程。那么你應(yīng)該閱讀本書。我極力推薦?!狧erbSutter關(guān)于C++,還有什么沒被說過的?很多,本書證明了這一點(diǎn)——節(jié)錄自JohnVissides為本書所作的序在ModernC++Design中,Andrei,Alexandrescu為C++程序員開創(chuàng)了一個(gè)新天地。在展現(xiàn)非凡創(chuàng)造力和精湛編程技藝的同時(shí),Alexandrescu提供了融合designpatterns(設(shè)計(jì)模式)、genericprogramming(泛型編程)、C++等在內(nèi)的尖端設(shè)計(jì)技術(shù)。幫助程序員撰寫清晰、靈活、高度可復(fù)用的代碼。本書提出genericcomponents(泛型組件)的概念,這是一種可復(fù)用的設(shè)計(jì)模板(reusabledesigntemplates),用來產(chǎn)生規(guī)范的C++代碼,供編譯器使用。泛型組件提供了從design到code之間簡(jiǎn)易而無(wú)縫的過渡,產(chǎn)生出更能表達(dá)原始設(shè)計(jì)意圖的代碼,并支持設(shè)計(jì)結(jié)構(gòu)的復(fù)用只需更動(dòng)最少量的代碼。作者闡釋建造泛型組件所需的C++專門技巧和特性。而后針對(duì)現(xiàn)實(shí)世界中的應(yīng)用,提供工業(yè)強(qiáng)度之泛型組件實(shí)現(xiàn)品。對(duì)于C++開發(fā)人員日常工作中反復(fù)遇到的問題,在此進(jìn)行了深入的探討,并通過泛型方式實(shí)現(xiàn)。內(nèi)容包括:·高度靈活的policybaseddesign·Partialtemplatespecialization(模板偏特化)·Typelists,一個(gè)功能強(qiáng)大、用于型別操控的結(jié)構(gòu)·Visitor、Singleton、Command、Factories等模式(patterns)·Multi-methodengine針對(duì)每一個(gè)泛型組件,本書都提出了基本問題和設(shè)計(jì)選擇。最后實(shí)現(xiàn)其泛型解決方案、此外。本書相關(guān)網(wǎng)站http://www.awl.com/cseng/titles/0-201-70431-5提供書中泛型組件的所有實(shí)現(xiàn)品,并提供作者發(fā)展的一個(gè)免費(fèi)、可下載的C++程序庫(kù)Loki。Loki幾乎可為任何C++項(xiàng)目提供借鑒。本書提供了一組可復(fù)用的設(shè)計(jì)產(chǎn)品─所謂“泛型組件”,以及設(shè)計(jì)這些組件所需要的技術(shù)。這些泛型組件為用戶帶來的明顯好處,集中于程序庫(kù)方面,而處于更廣泛的系統(tǒng)體系結(jié)構(gòu)空間中。本書提供的編程技術(shù)和實(shí)作品(implementation)所反映的任務(wù)和議題,傳統(tǒng)上落于設(shè)計(jì)范疇之中,是編寫代碼之前必須完成的東西。由于身處較高層次,泛型組件就有可能以一種不同尋常但簡(jiǎn)潔。易于表達(dá)。易于維護(hù)的方式,將復(fù)雜的體系結(jié)構(gòu)反映到代碼中。這里結(jié)合了三個(gè)要素:設(shè)計(jì)模式(designpatterns)、泛型編程(genericprogramming)、C++。結(jié)合這些要素后,我們獲得極高層次的可復(fù)用性,無(wú)論是橫向或縱向。從橫向空間來看,少量librarycode就可以實(shí)現(xiàn)組合性的、實(shí)質(zhì)上具有無(wú)窮數(shù)量的結(jié)構(gòu)和行為。從橫向空間來看,由于這些組件的通用性,它們可廣泛應(yīng)用于各種程序中。本書極大歸功于設(shè)計(jì)模式(designpatterns)—面臨面向?qū)ο蟪绦蜷_發(fā)中的常見問題時(shí),它是強(qiáng)有力的解決方案。設(shè)計(jì)模式是經(jīng)過提煉的出色設(shè)計(jì)方法,對(duì)于很多情況下碰到的問題,它都是合理而可復(fù)用的解決方案。設(shè)計(jì)模式致力于提供深具啟發(fā)、易于表達(dá)和傳遞的設(shè)計(jì)詞匯。它們所描述的,除了問題(problem)之外,還有久經(jīng)考驗(yàn)的解法及其變化形式,以及選擇每一種方案所帶來的后果。設(shè)計(jì)模式超越了任何一種設(shè)計(jì)語(yǔ)言所能表達(dá)的東西─無(wú)論那種語(yǔ)言多么高級(jí)。本書遵循并結(jié)合某些設(shè)計(jì)模式,提供的組件可以解決廣泛的具體問題。泛型編程是一種典范(paradigm),專注于將型別(type)抽象化,形成功能需求方面的一個(gè)精細(xì)集合,并利用這些需求來實(shí)現(xiàn)算法。由于算法為其所操作的型別定義了嚴(yán)格、精細(xì)的接口,因此相同的算法可以運(yùn)用于廣泛的型別集(awidecollectionoftypes)。本書提供的實(shí)作品采取泛型編程技術(shù),以最小代價(jià)獲得足以和手工精心編寫的代碼相匹敵的專用性。高度簡(jiǎn)潔和效率。C++是本書使用的唯一工具。在本書中,你不會(huì)看到漂亮的窗口系統(tǒng)。復(fù)雜的網(wǎng)絡(luò)程序庫(kù)或靈巧的日志記錄(logging)機(jī)制。相反的,你會(huì)發(fā)現(xiàn)很多基礎(chǔ)組件,這些組件易于實(shí)現(xiàn)以上所有系統(tǒng)(甚至更多)。C++具有實(shí)現(xiàn)這一切所需要的廣度,其底層的C內(nèi)存模型保證了最原始效率(rawperformance),對(duì)多態(tài)(polymorphism)的支持成就了面向?qū)ο蠹夹g(shù),templates則展現(xiàn)為一種令人難以置信的代碼生成器。Templates遍及本書所有代碼,因?yàn)樗鼈兛梢粤钣脩艉统绦驇?kù)之間保持最密切的協(xié)作。在遵循程序庫(kù)約束的基礎(chǔ)上,程序庫(kù)的用戶可以完全控制代碼的生成方式。泛型組件庫(kù)的角色在于,它可以讓用戶指定的型別和行為,與泛型組件結(jié)合起來,形成合理的設(shè)計(jì)。由于所采技術(shù)之靜態(tài)特性,在結(jié)合和匹配相應(yīng)組件時(shí),產(chǎn)生的錯(cuò)誤通常在編譯期便得以發(fā)現(xiàn)。本書最明顯的意圖在于創(chuàng)建泛型組件,這些組件預(yù)先實(shí)現(xiàn)了設(shè)計(jì)模塊,主要特點(diǎn)是靈活、通用、易用、泛型組件并不構(gòu)成framework。實(shí)際上它們采用的作法是互補(bǔ)性的,雖然framework定義了獨(dú)立的classes,用來支持特定的對(duì)象模型,但泛型組件(s)是輕量級(jí)設(shè)計(jì)工具,互相獨(dú)立,可自由組合和匹配。實(shí)現(xiàn)frameworks時(shí)泛型組件可帶來很大幫助。

作者簡(jiǎn)介

暫缺《C++設(shè)計(jì)新思維:泛型編程與設(shè)計(jì)模式之應(yīng)用》作者簡(jiǎn)介

圖書目錄

譯序by 侯捷 i</font><br>譯序by 於春景 iii</font><br>目錄 v</font><br>序言by Scott Meyers xi</font><br>序言by John Vlissides xv</font><br>前言 xvii</font><br>致謝 xxi</font><br>第一篇 技術(shù)(Techniques) 1</font><br>第1章 基于Policy的Class設(shè)計(jì)(Policy-Based Class Design) 3</font><br>1.1 軟件設(shè)計(jì)的多樣性(Multiplicity) 3</font><br>1.2 全功能型(Do-It-All)接口的失敗 4</font><br>1.3 多重繼承(Multiple Inheritance)是救世主? 5</font><br>1.4 Templates帶來曙光 6</font><br>1.5 Policies和Policy Classes 7</font><br>1.6 更豐富的Policies 12</font><br>1.7 Policy Classes的析構(gòu)函數(shù)(Destructors) 12</font><br>1.8 通過不完全具現(xiàn)化(Incomplete Instantiation)</font><br>而獲得的選擇性機(jī)能(Optional Functionality) 13</font><br>1.9 結(jié)合Policy Classes 14</font><br>1.10 以Policy Classes定制結(jié)構(gòu) 16</font><br>1.11 Policies的兼容性 17</font><br>1.12 將一個(gè)Class分解為一堆Policies 19</font><br>1.13 摘要 20</font><br></font><br>第2章 技術(shù)(Techniques) 23</font><br>2.1 編譯期(Compile-Time)Assertions 23</font><br>2.2 Partial Template Specialization(模板偏特化) 26</font><br>2.3 局部類(Local Classes) 28 </font><br>2.4 常整數(shù)映射為型別(Mapping Integral Constants to Types) 29</font><br>2.5 型別對(duì)型別的映射(Type-to-Type Mapping) 31</font><br>2.6 型別選擇(Type Selection) 33</font><br>2.7 編譯期間偵測(cè)可轉(zhuǎn)換性(Convertibility)和繼承性(Inheritance) 34</font><br>2.8 type_info的一個(gè)外覆類(Wrapper) 37</font><br>2.9 NullType和EmptyType 39</font><br>2.10 Type Traits 40</font><br>2.11 摘要 46</font><br>第3章 Typelists 49</font><br>3.1 Typelists的必要性 49</font><br>3.2 定義Typelists 51</font><br>3.3 將Typelist的生成線性化(linearizing) 52</font><br>3.4 計(jì)算長(zhǎng)度 53</font><br>3.5 間奏曲 54</font><br>3.6 索引式訪問(Indexed Access) 55</font><br>3.7 查找Typelists 56</font><br>3.8 附加元素至Typelists 57</font><br>3.9 移除Typelist中的某個(gè)元素 58</font><br>3.10 移除重復(fù)元素(Erasing Duplicates) 59</font><br>3.11 取代Typelist中的某個(gè)元素 60</font><br>3.12 為Typelists局部更換次序(Partially Ordering) 61</font><br>3.13 運(yùn)用Typelists自動(dòng)產(chǎn)生Class es 64</font><br>3.14 摘要 74</font><br>3.15 Typelist要點(diǎn)概覽 75</font><br>第4章 小型對(duì)象分配技術(shù)(Small-Object Allocation) 77</font><br>4.1 缺省的Free Store分配器 78</font><br>4.2 內(nèi)存分配器的工作方式 78</font><br>4.3 小型對(duì)象分配器(Small-Object Allocator) 80</font><br>4.4 Chunks(大塊內(nèi)存) 81</font><br>4.5 大小一致(Fixed-Size)的分配器 84</font><br>4.6 SmallObjAllocator Class 87</font><br>4.7 帽子下的戲法 89</font><br>4.8 簡(jiǎn)單,復(fù)雜,終究還是簡(jiǎn)單 92</font><br>4.9 使用細(xì)節(jié) 93</font><br>4.10 摘要 94</font><br>4.11 小型對(duì)象分配器(Small-Object Allocator)要點(diǎn)概覽 94</font><br>第二篇 組件(Components) 97</font><br>第5章 泛化仿函數(shù)(Generalized Functors) 99</font><br>5.1 Command設(shè)計(jì)模式 100</font><br>5.2 真實(shí)世界中的Command 102</font><br>5.3 C++ 中的可呼叫體(Callable Entities) 103</font><br>5.4 Functor Class Template骨干 104</font><br>5.5 實(shí)現(xiàn)“轉(zhuǎn)發(fā)式”(Forwarding)Functor::operator() 108</font><br>5.6 處理仿函數(shù) 110</font><br>5.7 做一個(gè),送一個(gè) 112</font><br>5.8 引數(shù)(Argument)和返回型別(Return Type)的轉(zhuǎn)換 114</font><br>5.9 處理pointer to member function(成員函數(shù)指針) 115</font><br>5.10 綁定(Binding) 119</font><br>5.11 將請(qǐng)求串接起來(Chaining Requests) 122</font><br>5.12 現(xiàn)實(shí)世界中的問題之1:轉(zhuǎn)發(fā)式函數(shù)的成本 122</font><br>5.13 現(xiàn)實(shí)世界中的問題之2:Heap分配 124</font><br>5.14 通過Functor實(shí)現(xiàn)Undo和Redo 125</font><br>5.15 摘要 126</font><br>5.16 Functor要點(diǎn)概覽 126</font><br>第6章 Singletons(單件)實(shí)現(xiàn)技術(shù) 129</font><br>6.1 靜態(tài)數(shù)據(jù) + 靜態(tài)函數(shù) != Singleton 130</font><br>6.2 用以支持Singleton的一些C++ 基本手法 131</font><br>6.3 實(shí)施“Singleton的唯一性” 132</font><br>6.4 摧毀Singleton 133</font><br>6.5 Dead(失效的)Reference問題 135</font><br>6.6 解決Dead Reference問題(I):Phoenix Singleton 137</font><br>6.7 解決Dead Reference問題(II):帶壽命的Singletons 139</font><br>6.8 實(shí)現(xiàn)“帶壽命的Singletons” 142</font><br>6.9 生活在多線程世界 145</font><br>6.10 將一切組裝起來 148</font><br>6.11 使用SingletonHolder 153</font><br>6.12 摘要 155</font><br>6.13 SingletonHolder Class Template要點(diǎn)概覽 155</font><br></font><br>第7章 Smart Pointers(智能指針) 157</font><br>7.1 Smart Pointers基礎(chǔ) 157</font><br>7.2 交易 158</font><br>7.3 Smart Pointers的存儲(chǔ) 160</font><br>7.4 Smart Pointer的成員函數(shù) 161</font><br>7.5 擁有權(quán)(Ownership)管理策略 163</font><br>7.6 Address-of(取址)操作符 170</font><br>7.7 隱式轉(zhuǎn)換(Implicit Conversion)至原始指針型別 171</font><br>7.8 相等性(Equality)和不等性(Inequality) 173</font><br>7.9 次序比較(Ordering Comparisons) 178</font><br>7.10 檢測(cè)及錯(cuò)誤報(bào)告(Checking and Error Reporting) 181</font><br>7.11 Smart Pointers to const和const Smart Pointers 182</font><br>7.12 Arrays 183</font><br>7.13 Smart Pointers和多線程(Multithreading) 184</font><br>7.14 將一切組裝起來 187</font><br>7.15 摘要 194</font><br>7.16 SmartPtr要點(diǎn)概覽 194</font><br>第8章 Object Factories(對(duì)象工廠) 197</font><br>8.1 為什么需要Object Factories 198</font><br>8.2 Object Factories in C++:Classes和Objects 200</font><br>8.3 實(shí)現(xiàn)一個(gè)Object Factory 201</font><br>8.4 型別標(biāo)識(shí)符(Type Identifiers) 206</font><br>8.5 泛化(Generalization) 207</font><br>8.6 細(xì)節(jié)瑣務(wù) 210</font><br>8.7 Clone Factories(克隆工廠、翻制工廠、復(fù)制工廠) 211</font><br>8.8 通過其他泛型組件來使用Object Factories 215</font><br>8.9 摘要 216</font><br>8.10 Factory Class Template要點(diǎn)概覽 216</font><br>8.11 CloneFactory Class Template要點(diǎn)概覽 217</font><br>第9章 Abstract Factory(抽象工廠) 219</font><br>9.1 Abstract Factory扮演的體系結(jié)構(gòu)角色(Architectural role) 219</font><br>9.2 一個(gè)泛化的Abstract Factory接口 223</font><br>9.3 實(shí)作出AbstractFactory 226</font><br>9.4 一個(gè)Prototype-Based Abstract Factory實(shí)作品 228</font><br>9.5 摘要 233</font><br>9.6 AbstractFactory和ConcreteFactory要點(diǎn)概覽 233</font><br></font><br>第10章 Visitor(訪問者、視察者) 235</font><br>10.1 Visitor 基本原理 235</font><br>10.2 重載(Overloading):Catch-All函數(shù) 242</font><br>10.3 一份更加精煉的實(shí)作品:Acyclic Visitor 243</font><br>10.4 Visitor之泛型實(shí)作 248</font><br>10.5 再論 "Cyclic" Visitor 255</font><br>10.6 變化手段 258</font><br>10.7 摘要 260</font><br>10.8 Visitor泛型組件要點(diǎn)概覽 261</font><br>第11章 Multimethods 263</font><br>11.1 什么是Multimethods? 264</font><br>11.2 何時(shí)需要Multimethods? 264</font><br>11.3 Double Switch-on-Type:暴力法 265</font><br>11.4 將暴力法自動(dòng)化 268</font><br>11.5 暴力式Dispatcher 的對(duì)稱性 273</font><br>11.6 對(duì)數(shù)型(Logarithmic)Double Dispatcher 276</font><br>11.7 FnDispatcher 和對(duì)稱性 282</font><br>11.8 Double Dispatch(雙重分派)至仿函數(shù)(Functors) 282</font><br>11.9 引數(shù)的轉(zhuǎn)型:static_cast或dynamic_cast? 285</font><br>11.10 常數(shù)時(shí)間的Multimethods:原始速度(Raw Speed) 290</font><br>11.11 將BasicDispatcher 和BasicFastDispatcher當(dāng)做Policies 293</font><br>11.12 展望 294</font><br>11.13 摘要 296</font><br>11.14 Double Dispatcher要點(diǎn)概覽 297</font><br>附錄 一個(gè)超迷你的多線程程序庫(kù)(A Minimalist Multithreading Library) 301</font><br>A.1 多線程的反思 302</font><br>A.2 Loki的作法 303</font><br>A.3 整數(shù)型別上的原子操作(Atomic Operations) 303</font><br>A.4 Mutexes(互斥器) 305</font><br>A.5 面向?qū)ο缶幊讨械逆i定語(yǔ)意(Locking Semantics) 306</font><br>A.6 可有可無(wú)的(Optional)volatile標(biāo)識(shí)符 308</font><br>A.7 Semaphores, Events和其他好東西 309</font><br>A.8 摘要 309</font><br>參考書目(Bibliography) 311</font><br>索引(Index)

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)