图书介绍

松本行弘的程序世界【2025|PDF下载-Epub版本|mobi电子书|kindle百度云盘下载】

松本行弘的程序世界
  • (日)松本行弘著;柳德燕,李黎明,夏倩,张文旭译 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115255075
  • 出版时间:2011
  • 标注页数:390页
  • 文件大小:120MB
  • 文件页数:405页
  • 主题词:程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

松本行弘的程序世界PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 我为什么开发Ruby1

1.1 我为什么开发Ruby2

1.1.1 编程语言的重要性2

1.1.2 Ruby的原则3

1.1.3 简洁性4

1.1.4 扩展性5

1.1.5 稳定性6

1.1.6 一切皆因兴趣7

第2章 面向对象9

2.1 编程和面向对象的关系10

2.1.1 颠倒的构造10

2.1.2 主宰计算机的武器11

2.1.3 怎样写程序12

2.1.4 面向对象的编程方法12

2.1.5 面向对象的难点13

2.1.6 多态性13

2.1.7 具体的程序14

2.1.8 多态性的优点15

2.2 数据抽象和继承16

2.2.1 面向对象的历史16

2.2.2 复杂性是面向对象的敌人18

2.2.3 结构化编程18

2.2.4 数据抽象化19

2.2.5 雏形21

2.2.6 找出相似的部分来继承22

2.3 多重继承的缺点23

2.3.1 为什么需要多重继承23

2.3.2 多重继承和单一继承不可分离24

2.3.3 goto语句和多重继承比较相似25

2.3.4 解决多重继承的问题25

2.3.5 静态语言和动态语言的区别26

2.3.6 静态语言的特点26

2.3.7 动态语言的特点27

2.3.8 静态语言和动态语言的比较27

2.3.9 继承的两种含义28

2.3.10 接口的缺点28

2.3.11 继承实现的方法29

2.3.12 从多重继承变形而来的Mix-in29

2.3.13 积极支持Mix-in的Ruby30

2.4 两个误解31

2.4.1 面向对象的编程31

2.4.2 对象的模板=类33

2.4.3 利用模块的手段=继承33

2.4.4 多重继承不好吗34

2.4.5 动态编程语言也需要多重继承35

2.4.6 驯服多重继承的方法35

2.4.7 Ruby中多重继承的实现方法37

2.4.8 Java实现多重继承的方法38

2.5 Duck Typing诞生之前39

2.5.1 为什么需要类型39

2.5.2 动态的类型是从Lisp中诞生的40

2.5.3 动态类型在面向对象中发展起来了41

2.5.4 动态类型和静态类型的邂逅42

2.5.5 静态类型的优点42

2.5.6 动态类型的优点43

2.5.7 只关心行为的Duck Typing44

2.5.8 避免明确的类型检查45

2.5.9 克服动态类型的缺点46

2.5.10 动态编程语言46

2.6 元编程46

2.6.1 元编程46

2.6.2 反射47

2.6.3 元编程的例子48

2.6.4 使用反射功能48

2.6.5 分布式Ruby的实现49

2.6.6 数据库的应用50

2.6.7 输出XML51

2.6.8 元编程和小编程语言51

2.6.9 声明的实现52

2.6.10 上下文相关的实现52

2.6.11 单位的实现53

2.6.12 词汇的实现53

2.6.13 层次数据的实现54

2.6.14 适合DSL的语言,不适合DSL的语言54

第3章 程序块57

3.1 程序块的威力58

3.1.1 把函数作为参数的高阶函数58

3.1.2 C语言高阶函数的局限59

3.1.3 可以保存外部环境的闭包60

3.1.4 块的两种使用方法60

3.1.5 最终来看,块到底是什么61

3.1.6 块在循环处理中的应用62

3.1.7 内部迭代器和外部迭代器62

3.1.8 在排序和比较大小中的应用63

3.1.9 用块保证程序的后处理63

3.1.10 用块实现新的控制结构64

3.1.11 在回调中使用块65

3.1.12 块处理的特别理由65

3.2 用块作循环66

3.2.1 块是处理的集合67

3.2.2 块应用范围的扩展68

3.2.3 高阶函数和块的本质一样69

3.2.4 用Enumerable来利用块69

3.2.5 Enumerable的局限74

3.3 精通集合的使用77

3.3.1 使用Ruby的数组77

3.3.2 修改指定范围的元素内容78

3.3.3 Ruby中的哈希处理78

3.3.4 支持循环的Enumerable79

3.3.5 用于循环的each方法81

3.3.6 使用inject、zip和grep81

3.3.7 用来指定条件的select方法82

3.3.8 排序与比较大小的方法83

3.3.9 在类中包含(include)Enumerable模块84

3.3.10 列表内包表达式和块的区别85

第4章 设计模式89

4.1 设计模式(1)90

4.1.1 设计模式的价值和意义91

4.1.2 设计模式是程序抽象化的延伸92

4.1.3 Ruby中的设计模式92

4.1.4 Singleton模式92

4.1.5 Proxy模式94

4.1.6 Iterator模式95

4.1.7 外部与内部,哪一个更好96

4.1.8 内部迭代器的缺陷97

4.1.9 外部迭代器的缺陷98

4.2 设计模式(2)98

4.2.1 模式与动态语言的关系99

4.2.2 重复使用既存对象的Prototype模式99

4.2.3 亲身体验Io语言100

4.2.4 Ruby中的原型101

4.2.5 编写抽象算法的Template Method模式101

4.2.6 用Ruby来尝试Template Method102

4.2.7 动态语言与Template Method模式104

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

4.2.9 Observable模块105

4.2.10 Observer模式与动态语言107

4.3 设计模式(3)107

4.3.1 软件开发的悲剧108

4.3.2 开放-封闭原则108

4.3.3 面向对象的情况109

4.3.4 非面向对象的情况110

4.3.5 OCP与Template Method模式111

4.3.6 Observer模式113

4.3.7 使用Strategy模式114

4.3.8 Strategy模式与OCP116

第5章 Ajax119

5.1 Ajax和JavaScript(前篇)120

5.1.1 通信及异步页面更新120

5.1.2 技术要素之一:JavaScript122

5.1.3 技术要素之二:XML122

5.1.4 XML以外的数据表现形式123

5.1.5 技术要素之三:DHTML124

5.1.6 JavaScript技术基础124

5.1.7 原型模式的面向对象编程语言126

5.1.8 使用prototype.js库127

5.1.9 prototype.js的功能127

5.2 Ajax和JavaScript(后篇)130

5.2.1 巧妙使用DHTML131

5.2.2 获取document节点132

5.2.3 获取和更新标签数据133

5.2.4 设定事件处理程序133

5.2.5 追加标签节点135

5.2.6 本地HTML应用135

5.2.7 和服务器间的通信137

5.2.8 使用Prototype.js的优点138

5.2.9 在服务器上保存数据138

5.2.10 Web应用的脆弱性140

5.2.11 使用JavaScript的感觉141

第6章 Ruby on Rails143

6.1 MVC和Ruby on Rails144

6.1.1 模型、视图和控制的作用144

6.1.2 用秒表的例子来学习MVC模式145

6.1.3 生成视图和控制部分147

6.1.4 GUI工具箱与MVC148

6.1.5 同时使用工具箱和MVC149

6.1.6 MVC的优缺点151

6.1.7 Web应用中的MVC152

6.2 开放类和猴子补丁153

6.2.1 开放类154

6.2.2 猴子补丁的目的154

6.2.3 猴子补丁的技巧155

6.2.4 灵活使用开放类的库159

6.2.5 猴子补丁的几点问题161

6.2.6 其他办法162

6.2.7 Ruby on Rails和开放类165

6.2.8 ActiveSupport带来的扩展166

6.2.9 字节单位系列168

6.2.10 复数形和序数168

6.2.11 大规模开发和Ruby169

6.2.12 信赖性模型170

6.2.13 猴子补丁的未来170

第7章 文字编码173

7.1 文字编码的种类174

7.1.1 早期的文字编码174

7.1.2 纸带与文字表现175

7.1.3 文字是什么176

7.1.4 走向英语以外的语言(欧洲篇)177

7.1.5 英语以外的语言(亚洲篇)177

7.1.6 Unicode的问世180

7.1.7 统一编码成16位的汉字统合181

7.1.8 Unicode的两个问题181

7.1.9 Unicode的文字集182

7.1.10 文字表示的不确定性183

7.1.11 Unicode的字符编码方式183

7.2 程序中的文字处理185

7.2.1 文字编码有多个意思185

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

7.2.3 纷繁复杂的文字编码方式186

7.2.4 影响力渐微的Shift_JIS与EUC-JP186

7.2.5 Unicode有多种字符编码方式186

7.2.6 为什么会发生乱码188

7.2.7 字符编码方式错误188

7.2.8 没有字体189

7.2.9 变换为内部码时出错189

7.2.10 发生不完全变换189

7.2.11 文字集的不同190

7.2.12 字节顺序错误191

7.2.13 从编程语言的角度处理文字191

7.2.14 以变换为前提的UCS方式191

7.2.15 原封不动处理的CSI方式192

7.2.16 使用UTF-16的Java192

7.2.17 使用UTF-8的Perl193

7.2.18 用UTF-16的Python194

7.2.19 采用CSI方式的Ruby 1.8194

7.2.20 强化了功能的Ruby 1.9195

7.2.21 是UCS还是CSI196

第8章 正则表达式199

8.1 正则表达式基础200

8.1.1 检索“像那样的东西”200

8.1.2 正则表达式的语法200

8.1.3 3个陷阱203

8.1.4 正则表达式对象204

8.1.5 选项205

8.1.6 正则表达式匹配的方法206

8.1.7 特殊变量207

8.1.8 字符串与正则表达式207

8.1.9 split的本质207

8.1.10 字符串的扫描208

8.1.11 置换208

8.2 正则表达式的应用实例与“鬼车”210

8.2.1 解析日志文件的方法211

8.2.2 避免使用$的方法213

8.2.3 从邮件中取出日期的方法215

8.2.4 典型拼写错误的检索方法216

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

第9章 整数和浮点小数219

9.1 深奥的整数世界220

9.1.1 整数是有范围的221

9.1.2 尝试位运算222

9.1.3 操作特定的位223

9.1.4 表示负数的办法225

9.1.5 Ruby的整数226

9.1.6 挑战公开密钥方式227

9.2 扑朔迷离的浮点小数世界228

9.2.1 计算机对小数的处理229

9.2.2 固定小数点数不易使用229

9.2.3 科学计数法也有问题229

9.2.4 小数不能完全表示230

9.2.5 有不能比较的时候231

9.2.6 误差积累232

9.2.7 不是数的特别“数”232

9.2.8 计算误差有多种233

9.2.9 误差导致的严重问题235

9.2.10 BigDecimal是什么236

9.2.11 能够表示分数的Rationa?类236

第10章 高速执行和并行处理239

10.1 让程序高速执行(前篇)240

10.1.1 是不是越快越好240

10.1.2 高速执行的乐趣与效率240

10.1.3 以数据为基础作出判断241

10.1.4 改善系统调用241

10.1.5 数据可靠吗243

10.1.6 只需改善瓶颈243

10.1.7 profiler本身成了累赘245

10.1.8 算法与数据结构245

10.1.9 理解O记法245

10.1.10 选择算法246

10.1.11 调查算法的性能246

10.1.12 高速执行的悲哀247

10.1.13 性能优化的格言248

10.2 让程序高速执行(后篇)248

10.2.1 确认程序概要249

10.2.2 发现瓶颈250

10.2.3 使用更好的profiler251

10.2.4 高速优化之一:削减对象252

10.2.5 高速优化之二:利用立即值254

10.2.6 高速优化之三:利用C语言255

10.2.7 高速优化之四:采用合适的数据结构256

10.2.8 全部以C语言计算257

10.2.9 还存在其他技巧257

10.3 并行编程258

10.3.1 使用线程的理由258

10.3.2 生成线程259

10.3.3 线程的执行状态260

10.3.4 传递值给线程的方法261

10.3.5 信息共享所产生的问题262

10.3.6 数据完整性的丧失262

10.3.7 死锁263

10.3.8 用锁来实现对资源的独占264

10.3.9 二级互斥265

10.3.10 用队列协调线程265

10.3.11 锁模型与队列模型的比较267

10.4 前景可期的并行编程技术,Actor268

10.4.1 何谓Actor268

10.4.2 操作Actor的3种处理系统269

10.4.3 Erlang的程序270

10.4.4 Pingpong处理的开始270

10.4.5 启动pingpong程序271

10.4.6 Erlang的错误处理272

10.4.7 Erlang的使用场所273

10.4.8 面向Ruby的库“Revactor”273

10.4.9 Revactor的应用场合274

10.4.10 另一个库Dramatis275

第11章 程序安全性279

11.1 程序的漏洞与攻击方法280

11.1.1 4种软件漏洞280

11.1.2 因权限被窃取而成为重大问题281

11.1.3 安全问题的根源281

11.1.4 “守护神”引起的问题282

11.1.5 多样化的攻击手段282

11.1.6 缓冲区溢出283

11.1.7 整数溢出284

11.1.8 SQL注入285

11.1.9 Shell注入286

11.1.10 跨站点脚本攻击287

11.1.11 跨站点伪造请求288

11.1.12 社会工程289

11.2 用异常进行错误处理290

11.2.1 异常的历史292

11.2.2 Java的受控异常292

11.2.3 Icon的面向目标判断293

11.2.4 Ruby的异常294

11.2.5 异常发生295

11.2.6 异常类296

11.2.7 异常处理的设计方针297

11.2.8 异常发生的设计原则298

第12章 关于时间的处理301

12.1 用程序处理时刻与时间302

12.1.1 时差与时区302

12.1.2 世界协调时间302

12.1.3 夏令时(DST)303

12.1.4 改历304

12.1.5 日期与时间的类305

12.1.6 2038年问题308

12.1.7 DateTime类309

12.1.8 Time与DateTime的相互变换310

第13章 关于数据的持久化313

13.1 持久化数据的方法314

13.1.1 保存文本314

13.1.2 变换成文本的Marshal314

13.1.3 使用Marshal模块315

13.1.4 复制有两种方式316

13.1.5 仔细看Marshal的格式316

13.1.6 不能保存的3类对象317

13.1.7 制作面向对象数据库318

13.1.8 试用PStore318

13.1.9 变换为文本的YAML320

13.1.10 用YAML制作数据库321

13.2 对象的保存322

13.2.1 高速的Object Prevalence322

13.2.2 Object Prevalence的问题点323

13.2.3 使用Madeleine323

13.2.4 访问时刻信息325

13.2.5 让Madeleine更容易使用326

13.2.6 Madeleine的实用例Instiki328

13.3 关于XML的考察328

13.3.1 XML的祖先是SGML329

13.3.2 XML是树结构的数据表现329

13.3.3 优点在于纯文本330

13.3.4 缺点在于冗长331

13.3.5 不适合重视效率的处理331

13.3.6 适合于信息交换的格式332

13.3.7 XML的解析332

13.3.8 XML处理库REXML333

13.3.9 XML的代替336

第14章 函数式编程339

14.1 新范型——函数式编程340

14.1.1 具有多种函数式性质的Lisp341

14.1.2 彻底的函数式编程语言Haskell342

14.1.3 延迟计算:不必要的处理就不做343

14.1.4 灵活的“静态多态性”类型系统344

14.1.5 近代函数式语言之父OCaml345

14.1.6 强于并行计算的Erlang345

14.1.7 用Ruby进行函数式编程346

14.1.8 用枚举器来实现延迟计算347

14.2 自动生成代码348

14.2.1 在商业中利用Ruby349

14.2.2 使用Ruby自动生成代码350

14.2.3 消除重复代码350

14.2.4 代码生成的应用351

14.2.5 代码生成的效果352

14.2.6 编写代码生成器353

14.2.7 也可以使用XML354

14.2.8 在EJB中使用代码生成355

14.3 内存管理与垃圾收集356

14.3.1 内存管理的困难357

14.3.2 垃圾收集亮相之前358

14.3.3 评价垃圾收集的两个指标359

14.3.4 垃圾收集算法360

14.3.5 引用计数方式360

14.3.6 标记和扫除方式361

14.3.7 标记和紧缩方式362

14.3.8 复制方式363

14.3.9 多种多样的垃圾收集算法364

14.3.10 分代垃圾收集364

14.3.11 保守垃圾收集366

14.3.12 增量垃圾收集366

14.3.13 并行垃圾收集367

14.3.14 位图标记367

14.4 用C语言来扩展Ruby368

14.4.1 开发与执行速度的取舍368

14.4.2 扩展库369

14.4.3 看例题学习扩展模块370

14.4.4 QDBM函数372

14.4.5 初始化对象373

14.4.6 实现方法374

14.4.7 关于垃圾收集的注意事项376

14.4.8 其他的Ruby API376

14.4.9 扩展库的编译376

14.4.10 扩展库以外的工具377

14.5 为什么要开源380

14.5.1 自由软件的思想380

14.5.2 自由软件的历史381

14.5.3 Emacs事件的发生381

14.5.4 开源的诞生382

14.5.5 OSS许可证383

14.5.6 开源的背景385

14.5.7 企业关注开源的理由386

14.5.8 Ruby与开源386

14.5.9 选择许可证的方法387

热门推荐