必威电竞|足球世界杯竞猜平台

松本行弘的程序世界
來源:互聯(lián)網(wǎng)

《松本行弘的程序世界》是由日本作者松本行弘撰寫,人民郵電出版社于2011年出版的一本圖書。本書從全局角度深入闡述了Ruby的設(shè)計(jì)理念,通過大量的程序示例和圖表,以獨(dú)特的視角對(duì)編程相關(guān)的各種技術(shù)進(jìn)行了考察。

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

本書是探索程序設(shè)計(jì)思想和方法的經(jīng)典之作。作者從全局的角度,利用大量的程序示例及圖表,深刻闡述了Ruby編程語言的設(shè)計(jì)理念,并以獨(dú)特的視角對(duì)與編程相關(guān)的各種技術(shù)進(jìn)行了考察。閱讀本書不僅可以深入了解編程世界各個(gè)要素之間的關(guān)系,而且能夠?qū)W到大師級(jí)的程序思考方法。

本書面向各層次程序設(shè)計(jì)人員和編程愛好者,也可以供相關(guān)技術(shù)人員參考。

作者簡(jiǎn)介

松本行弘 Ruby的發(fā)明人,在1993年發(fā)布了Ruby語言的第一個(gè)版本,以后一直從事Ruby的設(shè)計(jì)與開發(fā)。2011年加入著名SaaS廠商賽富時(shí)旗下PaaS公司Heroku,任首席Ruby架構(gòu)師,致力于加快Ruby Core的開發(fā)。他還是NaCI及樂天技術(shù)研究所的研究員。著有Ruby in a nutshell和The Ruby Programming Language 等書。

圖書目錄

第1章 我為什么開發(fā)Ruby 1

1.1 我為什么開發(fā)Ruby 2

1.1.1 編程語言的重要性 2

1.1.2 Ruby的原則 3

1.1.3 簡(jiǎn)潔性 4

1.1.4 擴(kuò)展性 5

1.1.5 穩(wěn)定性 6

1.1.6 一切皆因興趣 7

第2章 面向?qū)ο蟆?

2.1 編程和面向?qū)ο蟮年P(guān)系 10

2.1.1 顛倒的構(gòu)造 10

2.1.2 主宰計(jì)算機(jī)的武器 11

2.1.3 怎樣寫程序 12

2.1.4 面向?qū)ο蟮木幊谭椒ā?2

2.1.5 面向?qū)ο蟮碾y點(diǎn) 13

2.1.6 多態(tài)性 13

2.1.7 具體的程序 14

2.1.8 多態(tài)性的優(yōu)點(diǎn) 15

2.2 數(shù)據(jù)抽象和繼承 16

2.2.1 面向?qū)ο蟮臍v史 16

2.2.2 復(fù)雜性是面向?qū)ο蟮臄橙恕?8

2.2.3 結(jié)構(gòu)化編程 18

2.2.4 數(shù)據(jù)抽象化 19

2.2.5 雛形 21

2.2.6 找出相似的部分來繼承 22

2.3 多重繼承的缺點(diǎn) 23

2.3.1 為什么需要多重繼承 23

2.3.2 多重繼承和單一繼承不可分離 24

2.3.3 goto語句和多重繼承比較相似 25

2.3.4 解決多重繼承的問題 25

2.3.5 靜態(tài)語言和動(dòng)態(tài)語言的區(qū)別 26

2.3.6 靜態(tài)語言的特點(diǎn) 26

2.3.7 動(dòng)態(tài)語言的特點(diǎn) 27

2.3.8 靜態(tài)語言和動(dòng)態(tài)語言的比較 27

2.3.9 繼承的兩種含義 28

2.3.10 接口的缺點(diǎn) 28

2.3.11 繼承實(shí)現(xiàn)的方法 29

2.3.12 從多重繼承變形而來的Mix-in 29

2.3.13 積極支持Mix-in的Ruby 30

2.4 兩個(gè)誤解 31

2.4.1 面向?qū)ο蟮木幊獭?1

2.4.2 對(duì)象的模板=類 33

2.4.3 利用模塊的手段=繼承 33

2.4.4 多重繼承不好嗎 34

2.4.5動(dòng)態(tài)編程語言也需要多重繼承 35

2.4.6 馴服多重繼承的方法 35

2.4.7 Ruby中多重繼承的實(shí)現(xiàn)方法 37

2.4.8 Java實(shí)現(xiàn)多重繼承的方法 38

2.5 Duck Typing誕生之前 39

2.5.1 為什么需要類型 39

2.5.2 動(dòng)態(tài)的類型是從LISP中誕生的 40

2.5.3 動(dòng)態(tài)類型在面向?qū)ο笾邪l(fā)展起來了 41

2.5.4 動(dòng)態(tài)類型和靜態(tài)類型的邂逅 42

2.5.5 靜態(tài)類型的優(yōu)點(diǎn) 42

2.5.6 動(dòng)態(tài)類型的優(yōu)點(diǎn) 43

2.5.7 只關(guān)心行為的Duck Typing 44

2.5.8 避免明確的類型檢查 45

2.5.9 克服動(dòng)態(tài)類型的缺點(diǎn) 46

2.5.10 動(dòng)態(tài)編程語言 46

2.6 元編程 46

2.6.1 元編程 46

2.6.2 反射 47

2.6.3 元編程的例子 48

2.6.4 使用反射功能 48

2.6.5 分布式Ruby的實(shí)現(xiàn) 49

2.6.6 數(shù)據(jù)庫的應(yīng)用 50

2.6.7 輸出XML51

2.6.8 元編程和小編程語言 51

2.6.9 聲明的實(shí)現(xiàn) 52

2.6.10 上下文相關(guān)的實(shí)現(xiàn) 52

2.6.11 單位的實(shí)現(xiàn) 53

2.6.12 詞匯的實(shí)現(xiàn) 53

2.6.13 層次數(shù)據(jù)的實(shí)現(xiàn) 54

2.6.14 適合DSL的語言,不適合DSL的語言 54

第3章 程序塊 57

3.1 程序塊的威力 58

3.1.1 把函數(shù)作為參數(shù)的高階函數(shù) 58

3.1.2 c語言高階函數(shù)的局限 59

3.1.3 可以保存外部環(huán)境的閉包 60

3.1.4 塊的兩種使用方法 60

3.1.5 最終來看,塊到底是什么 61

3.1.6 塊在循環(huán)處理中的應(yīng)用 62

3.1.7 內(nèi)部迭代器和外部迭代器 62

3.1.8 在排序和比較大小中的應(yīng)用 63

3.1.9 用塊保證程序的后處理 63

3.1.10 用塊實(shí)現(xiàn)新的控制結(jié)構(gòu) 64

3.1.11 在回調(diào)中使用塊 65

3.1.12 塊處理的特別理由 65

3.2 用塊作循環(huán) 66

3.2.1 塊是處理的集合 67

3.2.2 塊應(yīng)用范圍的擴(kuò)展 68

3.2.3 高階函數(shù)和塊的本質(zhì)一樣 69

3.2.4 用Enumerable來利用塊 69

3.2.5 Enumerable的局限 74

3.3 精通集合的使用 77

3.3.1 使用Ruby的數(shù)組 77

3.3.2 修改指定范圍的元素內(nèi)容 78

3.3.3 Ruby中的哈希處理 78

3.3.4 支持循環(huán)的Enumerable 79

3.3.5 用于循環(huán)的each方法 81

3.3.6 使用inject、zip和grep 81

3.3.7 用來指定條件的select方法 82

3.3.8 排序與比較大小的方法 83

3.3.9 在類中包含(include)Enumerable模塊 84

3.3.10 List的內(nèi)部包和塊的區(qū)別 85

第4章 設(shè)計(jì)模式 89

4.1 設(shè)計(jì)模式(1) 90

4.1.1 設(shè)計(jì)模式的價(jià)值和意義 91

4.1.2 設(shè)計(jì)模式是程序抽象化的延伸 92

4.1.3 Ruby中的設(shè)計(jì)模式 92

4.1.4 Singleton模式 92

4.1.5 Proxy模式 94

4.1.6 Iterator模式 95

4.1.7 外部與內(nèi)部,哪一個(gè)更好 96

4.1.8 內(nèi)部迭代器的缺陷 97

4.1.9 外部迭代器的缺陷 98

4.2 設(shè)計(jì)模式(2) 98

4.2.1 模式與動(dòng)態(tài)語言的關(guān)系 99

4.2.2 重復(fù)使用既存對(duì)象的Prototype模式99

4.2.3 親身體驗(yàn)Io語言 100

4.2.4 Ruby中的原型 101

4.2.5 編寫抽象算法的Template Method模式 101

4.2.6 用Ruby來嘗試TemplateMethod 102

4.2.7 動(dòng)態(tài)語言與Template Method模式 104

4.2.8 避免高度依賴性的Observer模式104

4.2.9observable模塊 105

4.2.10 Observer模式與動(dòng)態(tài)語言 107

4.3 設(shè)計(jì)模式(3) 107

4.3.1 軟件開發(fā)的悲劇 108

4.3.2 開放-封閉原則 108

4.3.3 面向?qū)ο蟮那闆r 109

4.3.4 非面向?qū)ο蟮那闆r 110

4.3.5 OCP與Template Method模式 111

4.3.6 Observer模式 113

4.3.7 使用Strategy模式 114

4.3.8 Strategy模式與OCP 116

第5章 Ajax 119

5.1 Ajax和ECMAScript(前篇) 120

5.1.1 通信及異步頁面更新 120

5.1.2 技術(shù)要素之一:JavaScript 122

5.1.3 技術(shù)要素之二:XML122

5.1.4XML以外的數(shù)據(jù)表現(xiàn)形式 123

5.1.5 技術(shù)要素之三:DHTML 124

5.1.6 JavaScript技術(shù)基礎(chǔ) 124

5.1.7原型模式的面向?qū)ο?a href="/hebeideji/7222850576815898657.html">編程語言126

5.1.8 使用prototype.js庫 127

5.1.9 prototype.js的功能 127

5.2 Ajax和ECMAScript(后篇) 130

5.2.1 巧妙使用DHTML 131

5.2.2 獲取document節(jié)點(diǎn) 132

5.2.3 獲取和更新標(biāo)簽數(shù)據(jù) 133

5.2.4 設(shè)定事件處理程序 133

5.2.5 追加標(biāo)簽節(jié)點(diǎn) 135

5.2.6 本地HTML應(yīng)用 135

5.2.7 和服務(wù)器間的通信 137

5.2.8 使用Prototype.js的優(yōu)點(diǎn) 138

5.2.9 在服務(wù)器上保存數(shù)據(jù) 138

5.2.10 Web應(yīng)用的脆弱性 140

5.2.11 使用ECMAScript的感覺 141

第6章 Ruby on Rails 143

6.1 MVC和Ruby on Rails 144

6.1.1 模型、視圖和控制的作用 144

6.1.2 用秒表的例子來學(xué)習(xí)MVC模式 145

6.1.3 生成視圖和控制部分 147

6.1.4 GUI工具箱與MVC 148

6.1.5 同時(shí)使用工具箱和MVC 149

6.1.6 MVC的優(yōu)缺點(diǎn) 151

6.1.7 Web應(yīng)用中的MVC 152

6.2 開放類和猴子補(bǔ)丁 153

6.2.1 開放類 154

6.2.2 猴子補(bǔ)丁的目的 154

6.2.3 猴子補(bǔ)丁的技巧 155

6.2.4 靈活使用開放類的庫 159

6.2.5 猴子補(bǔ)丁的幾點(diǎn)問題 161

6.2.6 其他辦法 162

6.2.7 Ruby on Rails和開放類 165

6.2.8 ActiveSupport帶來的擴(kuò)展 166

6.2.9 字節(jié)單位系列 168

6.2.10 復(fù)數(shù)形和序數(shù) 168

6.2.11 大規(guī)模開發(fā)和Ruby 169

6.2.12 信賴性模型 170

6.2.13 猴子補(bǔ)丁的未來 170

第7章 文字編碼 173

7.1 文字編碼的種類 174

7.1.1 早期的文字編碼 174

7.1.2 紙帶與文字表現(xiàn) 175

7.1.3 文字是什么 176

7.1.4 走向英語以外的語言(歐洲篇) 177

7.1.5 英語以外的語言(亞洲篇) 177

7.1.6 Unicode的問世 180

7.1.7 統(tǒng)一編碼成16位的漢字統(tǒng)合 181

7.1.8 Unicode的兩個(gè)問題 181

7.1.9 Unicode的文字集 182

7.1.10 文字表示的不確定性 183

7.1.11 Unicode的字符編碼方式 183

7.2 程序中的文字處理 185

7.2.1 文字編碼有多個(gè)意思 185

7.2.2 只能處理文字集中包含的文字 185

7.2.3 紛繁復(fù)雜的文字編碼方式 186

7.2.4 影響力漸微的Shift_JIS與EUC-JP 186

7.2.5 Unicode有多種字符編碼方式 186

7.2.6 為什么會(huì)發(fā)生亂碼 188

7.2.7 字符編碼方式錯(cuò)誤 188

7.2.8 沒有字體 189

7.2.9 變換為內(nèi)部碼時(shí)出錯(cuò) 189

7.2.10 發(fā)生不完全變換 189

7.2.11 文字集的不同 190

7.2.12字節(jié)順序錯(cuò)誤 191

7.2.13 從編程語言的角度處理文字 191

7.2.14 以變換為前提的UCS方式 191

7.2.15 原封不動(dòng)處理的CSI方式 192

7.2.16 使用UTF-16的Java 192

7.2.17 使用UTF-8的Perl 193

7.2.18 用UTF-16的Python 194

7.2.19 采用CSI方式的Ruby 1.8 194

7.2.20 強(qiáng)化了功能的Ruby 1.9 195

7.2.21 是UCS還是CSI 196

第8章 正則表達(dá)式 199

8.1 正則表達(dá)式基礎(chǔ) 200

8.1.1 檢索“像那樣的東西” 200

8.1.2 正則表達(dá)式的語法 200

8.1.3 3個(gè)陷阱 203

8.1.4 正則表達(dá)式對(duì)象 204

8.1.5 選項(xiàng) 205

8.1.6 正則表達(dá)式匹配的方法 206

8.1.7 特殊變量 207

8.1.8 字符串與正則表達(dá)式 207

8.1.9 split的本質(zhì) 207

8.1.10 字符串的掃描 208

8.1.11 置換 208

8.2 正則表達(dá)式的應(yīng)用實(shí)例與“鬼車” 210

8.2.1 解析日志文件的方法 211

8.2.2 避免使用$的方法 213

8.2.3 從郵件中取出日期的方法 215

8.2.4 典型拼寫錯(cuò)誤的檢索方法 216

8.2.5 Ruby 1.9的新功能“鬼車” 216

第9章 整數(shù)和浮點(diǎn)小數(shù) 219

9.1 深?yuàn)W的整數(shù)世界 220

9.1.1 整數(shù)是有范圍的 221

9.1.2 嘗試位運(yùn)算 222

9.1.3 操作特定的位 223

9.1.4 表示負(fù)數(shù)的辦法 225

9.1.5 Ruby的整數(shù) 226

9.1.6 挑戰(zhàn)公開密鑰方式 227

9.2 撲朔迷離的浮點(diǎn)小數(shù)世界 228

9.2.1 計(jì)算機(jī)對(duì)小數(shù)的處理 229

9.2.2 固定小數(shù)點(diǎn)數(shù)不易使用 229

9.2.3科學(xué)計(jì)數(shù)法也有問題 229

9.2.4 小數(shù)不能完全表示 230

9.2.5 有不能比較的時(shí)候 231

9.2.6 誤差積累 232

9.2.7 不是數(shù)的特別“數(shù)” 232

9.2.8 計(jì)算誤差有多種 233

9.2.9 誤差導(dǎo)致的嚴(yán)重問題 235

9.2.10 BigDecimal是什么 236

9.2.11 能夠表示分?jǐn)?shù)的Rational類 236

第10章 高速執(zhí)行和并行處理 239

10.1 讓程序高速執(zhí)行(前篇) 240

10.1.1 是不是越快越好 240

10.1.2 高速執(zhí)行的樂趣與效率 240

10.1.3 以數(shù)據(jù)為基礎(chǔ)作出判斷 241

10.1.4 改善系統(tǒng)調(diào)用 241

10.1.5 數(shù)據(jù)可靠嗎 243

10.1.6 只需改善瓶頸 243

10.1.7 profiler本身成了累贅 245

10.1.8 算法與數(shù)據(jù)結(jié)構(gòu) 245

10.1.9 理解O記法 245

10.1.10 選擇算法 246

10.1.11 調(diào)查算法的性能 246

10.1.12 高速執(zhí)行的悲哀 247

10.1.13 性能優(yōu)化的格言 248

10.2 讓程序高速執(zhí)行(后篇) 248

10.2.1 確認(rèn)程序概要 249

10.2.2 發(fā)現(xiàn)瓶頸 250

10.2.3 使用更好的profiler 251

10.2.4 高速優(yōu)化之一:削減對(duì)象 252

10.2.5 高速優(yōu)化之二:利用立即值 254

10.2.6 高速優(yōu)化之三:利用c語言 255

10.2.7 高速優(yōu)化之四:采用合適的數(shù)據(jù)結(jié)構(gòu) 256

10.2.8 全部以C語言計(jì)算 257

10.2.9 還存在其他技巧 257

10.3 并行編程 258

10.3.1 使用線程的理由 258

10.3.2 生成線程 259

10.3.3 線程的執(zhí)行狀態(tài) 260

10.3.4 傳遞值給線程的方法 261

10.3.5 信息共有所產(chǎn)生的問題 262

10.3.6 數(shù)據(jù)完整性的喪失 262

10.3.7 死鎖 263

10.3.8 用鎖來實(shí)現(xiàn)對(duì)資源的獨(dú)占 264

10.3.9 二級(jí)互斥 265

10.3.10 用隊(duì)列協(xié)調(diào)線程 265

10.3.11 鎖模型與隊(duì)列模型的比較 267

10.4 前景可期的并行編程技術(shù),Actor 268

10.4.1 何謂Actor 268

10.4.2 操作Actor的3種處理系統(tǒng) 269

10.4.3 Erlang的程序 270

10.4.4 Pingpong處理的開始 270

10.4.5 啟動(dòng)pingpong程序 271

10.4.6 Erlang的錯(cuò)誤處理 272

10.4.7 Erlang的使用場(chǎng)所 273

10.4.8 面向Ruby的庫“Revactor” 273

10.4.9 Revactor的應(yīng)用場(chǎng)合 274

10.4.10 另一個(gè)庫Dramatis 275

第11章 程序安全性 279

11.1 程序的漏洞與攻擊方法 280

11.1.1 4種軟件漏洞 280

11.1.2 因權(quán)限被竊取而成為重大問題 281

11.1.3 安全問題的根源 281

11.1.4 “守護(hù)神”引起的問題 282

11.1.5 多 樣化的攻擊手段 282

11.1.6 緩沖區(qū)溢出 283

11.1.7 整數(shù)溢出 284

11.1.8 SQL注入 285

11.1.9 Shell注入 286

11.1.10 跨站點(diǎn)腳本攻擊 287

11.1.11 跨站點(diǎn)偽造請(qǐng)求 288

11.1.12 社會(huì)工程 289

11.2 用異常進(jìn)行錯(cuò)誤處理 290

11.2.1 異常的歷史 292

11.2.2 Java的受控異常 292

11.2.3 吉利ICON的面向目標(biāo)判斷 293

11.2.4 Ruby的異常 294

11.2.5 異常發(fā)生 295

11.2.6 異常類 296

11.2.7 異常處理的設(shè)計(jì)方針 297

11.2.8 異常發(fā)生的設(shè)計(jì)原則 298

第12章 關(guān)于時(shí)間的處理 301

12.1 用程序處理時(shí)刻與時(shí)間 302

12.1.1 時(shí)差與時(shí)區(qū) 302

12.1.2UTC 302

12.1.3 夏令時(shí)(DST) 303

12.1.4 改歷 304

12.1.5 日期與時(shí)間的類 305

12.1.62038年問題308

12.1.7 DateTime類 309

12.1.8 時(shí)間與DateTime的相互變換 310

第13章 關(guān)于數(shù)據(jù)的持久化 313

13.1 持久化數(shù)據(jù)的方法 314

13.1.1 保存文本 314

13.1.2 變換成文本的Marshal 314

13.1.3 使用Marshal模塊 315

13.1.4 復(fù)制有兩種方式 316

13.1.5 仔細(xì)看Marshal的格式 316

13.1.6 不能保存的3類對(duì)象 317

13.1.7 制作面向?qū)ο髷?shù)據(jù)庫 318

13.1.8 試用PStore 318

13.1.9 變換為文本的YAML320

13.1.10 用YAML制作數(shù)據(jù)庫 321

13.2 對(duì)象的保存 322

13.2.1 高速的Objectprevalence322

13.2.2 Object Prevalence的問題點(diǎn) 323

13.2.3 使用Madeleine323

13.2.4 訪問時(shí)刻信息 325

13.2.5 讓Madeleine更容易使用 326

13.2.6 Madeleine的實(shí)用例Instiki 328

13.3 關(guān)于XML的考察 328

13.3.1 XML的祖先是SGML 329

13.3.2 XML是樹結(jié)構(gòu)的數(shù)據(jù)表現(xiàn) 329

13.3.3 優(yōu)點(diǎn)在于純文本 330

13.3.4 缺點(diǎn)在于冗長(zhǎng) 331

13.3.5 不適合重視效率的處理 331

13.3.6 適合于信息交換的格式 332

13.3.7 XML的解析 332

13.3.8 XML處理庫REXML 333

13.3.9 XML的代替 336

第14章 函數(shù)式編程 339

14.1 新范型——函數(shù)式編程 340

14.1.1 具有多種函數(shù)式性質(zhì)的LISP 341

14.1.2 徹底的函數(shù)式編程語言Haskell 342

14.1.3 延遲計(jì)算:不必要的處理就不做 343

14.1.4 靈活的“靜態(tài)多態(tài)性”類型系統(tǒng) 344

14.1.5 近代函數(shù)式語言之父OCaml 345

14.1.6 強(qiáng)于并行計(jì)算Erlang 345

14.1.7 用Ruby進(jìn)行函數(shù)式編程 346

14.1.8 用枚舉器來實(shí)現(xiàn)延遲計(jì)算 347

14.2 自動(dòng)生成代碼 348

14.2.1 在商業(yè)中利用Ruby 349

14.2.2 使用Ruby自動(dòng)生成代碼 350

14.2.3 消除重復(fù)代碼 350

14.2.4 代碼生成的應(yīng)用 351

14.2.5 代碼生成的效果 352

14.2.6 編寫代碼生成器 353

14.2.7 也可以使用XML 354

14.2.8 在EJB中使用代碼生成 355

14.3 內(nèi)存管理與垃圾收集 356

14.3.1 內(nèi)存管理的困難 357

14.3.2 垃圾收集亮相之前 358

14.3.3 評(píng)價(jià)垃圾收集的兩個(gè)指標(biāo) 359

14.3.4 垃圾收集算法 360

14.3.5 引用計(jì)數(shù)方式 360

14.3.6 標(biāo)記和掃除方式 361

14.3.7 標(biāo)記和緊縮方式 362

14.3.8 復(fù)制方式 363

14.3.9 多種多樣的垃圾收集算法 364

14.3.10 分代垃圾收集 364

14.3.11 保守垃圾收集 366

14.3.12 增量垃圾收集 366

14.3.13 并行垃圾收集 367

14.3.14 位圖標(biāo)記 367

14.4 用c語言來擴(kuò)展Ruby 368

14.4.1 開發(fā)與執(zhí)行速度的取舍 368

14.4.2 擴(kuò)展庫 369

14.4.3 看例題學(xué)習(xí)擴(kuò)展模塊 370

14.4.4 QDBM函數(shù) 372

14.4.5 初始化對(duì)象 373

14.4.6 實(shí)現(xiàn)方法 374

14.4.7 關(guān)于垃圾收集的注意事項(xiàng) 376

14.4.8 其他的Ruby API 376

14.4.9 擴(kuò)展庫的編譯 376

14.4.10 擴(kuò)展庫以外的工具 377

14.5 為什么要開源 380

14.5.1 自由軟件的思想 380

14.5.2 自由軟件的歷史 381

14.5.3 Emacs事件的發(fā)生 381

14.5.4 開源的誕生 382

14.5.5 OSS許可證 383

14.5.6 開源的背景 385

14.5.7 企業(yè)關(guān)注開源的理由 386

14.5.8 Ruby與開源 386

14.5.9 選擇許可證的方法 387

參考資料 >

生活家百科家居網(wǎng)