编程机制探析(Insight into Programming Mechanism)
文章平均质量分 77
buaawhl
这个作者很懒,什么都没留下…
展开
-
《编程机制探析》初稿目录(已提供PDF下载)
《编程机制探析》初稿目录第一章 写作初衷——若是当年早知道......第二章 计算机语言第三章 计算机运行结构第四章 运行栈与内存寻址第五章 命令式编程第六章 面向对象第七章 设计模式第八章 Compositor Pattern第九章 线程第十章 线程同步模型第十一章 Copy on Write第十二章 Iterator Pattern第十三...原创 2011-08-29 13:33:21 · 282 阅读 · 0 评论 -
《编程机制探析》第十七章 函数式编程
《编程机制探析》第十七章 函数式编程当我们能够像掌握循环一样熟练地掌握递归之后,我们就可以正式向函数式编程进军了。当然,即使我们还没有熟练掌握递归,我们还是可以向函数式进军。我们可以在学习函数式编程的过程中,逐步习惯递归的写法。函数式编程并非主流编程模型,函数式语言亦非主流编程语言。但我们在描述某些具体问题时,不可避免地要涉及到一些代码。本书会尽量选择有代表性的函数式语言。本书的选择是...2011-08-29 14:34:16 · 765 阅读 · 0 评论 -
《编程机制探析》第十八章 函数式语法
《编程机制探析》第十八章 函数式语法从本章开始,我们将开始接触到函数式编程语言的语法和代码。本书采用的是两种函数式语言——ErLang和Haskell。我们从ErLang语法开始讲起,因为,ErLang语法比较简单易懂。不过,需要说明的是,这里的“简单易懂”,是对我们命令式程序员来说的。ErLang语法与命令式语法比较接近,命令式程序员看起来更舒服。相比之下,Haskell的语法虽然更...2011-08-29 14:35:24 · 593 阅读 · 0 评论 -
《编程机制探析》第十九章 函数 = 数据 = 类型 ?
《编程机制探析》第十九章 函数 = 数据 = 类型 ?本章继续讲解ErLang和Haskell的语言特性。本书中选择ErLang和Haskell作为研讨语言,是因为我个人觉得这两门语言最具有代表性。网上有一本脍炙人口的函数式编程教材,叫做《计算机程序的构造和解释》,英文为《Structure and Interpretation of Computer Programs》,简写为S...2011-08-29 14:36:52 · 550 阅读 · 0 评论 -
《编程机制探析》第二十章 流程控制
《编程机制探析》第二十章 流程控制本章讲解函数式语言中的流程控制。在此之前,先让我们把目光投回到命令式语言的世界。目光所及之处,有一片区域特别混乱。上界派来的观察员大惊,“那是什么鬼地方?怎么和我自家的卧室那么乱?程序,不是应该遵守程序的吗?”仔细一看,那一片区域正是隶属于“流程控制”的“跳转语句”,俗称“跳转界”。你跳,我跳,他也跳。大家一起跳。杰克深情地望着露丝,“你跳...2011-08-29 14:42:00 · 557 阅读 · 0 评论 -
《编程机制探析》第二十一章 AOP
《编程机制探析》第二十一章 AOP第二十一章 AOP程序设计的一个重要目标就是提高重用性,避免重复代码。到目前为止,我们已经接触到了诸多重用手段——过程式编程,面向对象编程,函数式编程,泛型编程,设计模式,等等。本章介绍一种新的重用手段——面向方面编程(Aspect Oriented Programming),简称AOP。什么叫做方面(Aspect)?这个词很难从字面上...2011-08-29 14:43:07 · 566 阅读 · 0 评论 -
《编程机制探析》第十四章 关于方法表的那些事
《编程机制探析》第十四章 关于方法表的那些事上一章,我们讲解了静态类型语言和动态类型语言的特性对比。这一章,我们继续深入讲解静态类型对象和动态类型对象的内部机理——方法表(虚表)的内存结构以及实现机制。我们先从静态类型语言中常见的语法陷阱开始。这些语法陷阱能够帮助我们更深入地理解静态类型对象的方法表的结构和特征。让我们回到上一章开头的那段代码。那个Visitor有两个方法,visi...2011-08-29 14:55:39 · 530 阅读 · 0 评论 -
《编程机制探析》第二十二章 互联网应用
《编程机制探析》第二十二章 互联网应用在前面的章节中,我们一直在编程的基本原理和模型中折腾。从本章起,我们将进入真正的应用程序的世界。《黑客帝国》中,莫菲斯递给尼奥一粒药丸,“欢迎来到真实的世界。”在计算机界中,也有“真实的世界”(Real World)的说法。比如,我们经常看到这样的话:这种方案看起来很美,但不适用于真实的世界。(That sounds great, but no...2011-10-18 14:47:35 · 626 阅读 · 0 评论 -
《编程机制探析》第二十三章 HTTP
《编程机制探析》第二十三章 HTTPHTTP是Web应用开发中最为重要的协议。但是,在实际的Web应用开发中,相当多的程序员根本就不了解HTTP是怎么回事,也照样编写Web程序。我就曾经是其中的一员。这种现象的产生,与现代软件业的开发模式大有关系。这事儿,说起来话就长了。软件开发管理,一向是管理界的一大难题。因为,没有哪个程序员愿意被管理。每一个程序员都觉得自己是人才,而不是人力资源。...2011-10-18 14:49:24 · 560 阅读 · 0 评论 -
《编程机制探析》第二十四章 HTTP要点
《编程机制探析》第二十四章 HTTP要点上一章讲解了HTTP Session和HTTP Cookie的基本概念,这一章,我们通过具体例子,深化对HTTP的理解,从而掌握其要点。我们先来看一个访问一个技术网站的例子。这个技术网站叫做theserverside.com。我们在浏览器中访问www.theserverside.com这个网址。我们的浏览器是支持Session Cookie的...2011-10-18 14:50:54 · 548 阅读 · 0 评论 -
《编程机制探析》第二十五章 Web开发架构
《编程机制探析》第二十五章 Web开发架构前面章节讲述了HTTP协议的方方面面,从本章开始,我们进入到Web编程开发的世界。Web应用程序这种说法,主要是针对桌面程序来说的。桌面程序的图形界面元素十分丰富,交互性、操作性也十分良好。Web应用程序的界面,传统来说,只有一种,就是在浏览器中显示的HTML。一开始的时候,HTML并不是为了应用程序而设计的图形界面,而是以内容文本表现为主...2011-10-18 14:53:04 · 602 阅读 · 0 评论 -
《编程机制探析》第二十六章 页面生成技术
《编程机制探析》第二十六章 页面生成技术Web应用程序之所以如此流行,有两个主要原因。第一个原因是界面的一致性,即浏览器内显示的HTML;第二个原因是能够支持巨大的用户访问量。Web应用程序之所以能够支持巨大的用户访问量,主要是因为HTTP协议的无状态特性。随着技术的发展和应用的成熟,Web应用程序对用户状态的要求越来越高。HTTP协议的无状态特性就成为了一个难以绕过的阻碍。这真是,成...2011-10-18 14:54:35 · 660 阅读 · 0 评论 -
《编程机制探析》第二十七章 Flyweight
《编程机制探析》第二十七章 Flyweight上一章推介了一种叫做“层次匹配”的页面生成技术。这种技术有诸多优点,但实现起来有一个令人头疼的麻烦之处——模板解析器。凡是涉及到字符串处理的工作,一般都是琐碎乏味的。模板解析器就是如此。本章讲述一种方案,既可以利用上“层次匹配”的妙处,又可以免除模板解析器的实现。这种方案基于一种叫做“Flyweight Pattern”(轻量级模式)的实际...2011-10-19 15:01:13 · 720 阅读 · 0 评论 -
《编程机制探析》第十六章 树形递归
《编程机制探析》第十六章 树形递归上一章我们讲解了线性递归,使用的是各种资料中用得最多、最为经典的例子——阶乘(Factorial)算法。本章讲解递归结构中比较复杂的树形递归,同样使用各种资料中用得最多、最为经典的例子——斐波那契(Fibonacci)数列。典型的斐波那契(Fibonacci)数列问题是这么描述的:有一种母牛,出生后第三年,开始生育,每年都生一头母牛(貌似单性生育,...2011-08-29 14:32:20 · 564 阅读 · 0 评论 -
《编程机制探析》第十五章 递归
《编程机制探析》第十五章 递归前面章节讲述的基本上都是命令式语言(Imperative Language)的编程模型。关于命令式编程(Imperative Proramming)的重要概念和模型,我们基本都涉及到了。后面的章节将开始讲述另一种编程模型——函数式编程(Functional Programming)的内容。在讲述函数式编程(Functional Programming)之前...2011-08-29 14:30:45 · 564 阅读 · 0 评论 -
《编程机制探析》第十三章 动态类型
《编程机制探析》第十三章 动态类型在前面的章节中,我们已经几次遇到过Type Dispatch(类型分派)的场景了。在这种场景中,我们需要根据数据类型选择不同的行为。比如,我们来看下面这段典型Double Dispatch的Visitor Pattern的代码。void traversal(Visitor visitor){ // traverse each element ...2011-08-29 14:29:51 · 552 阅读 · 0 评论 -
《编程机制探析》第一章 写作初衷——若是当年早知道......
《编程机制探析》第一章 写作初衷——若是当年早知道......小时候,我读过一部短篇小说《一块牛排》,美国著名小说家杰克.伦敦写的。故事中,一个年老体衰的老拳击手陷入了人生的低谷,参加比赛之前,连补充体力的一块牛排都买不起。他的对手是一个正处于体力上升期、精力充沛的年轻拳击手。他凭借着丰富的经验与对手周旋,并抓住一闪即逝的机会,给了年轻的拳击手以沉重打击。但是,遗憾的是,他的体力不足,...原创 2011-08-29 13:37:59 · 589 阅读 · 0 评论 -
《编程机制探析》第二章 计算机语言
《编程机制探析》第二章 计算机语言关于外语的重要性,怎么强调也不过分。关键时刻,外语甚至能救命。我们先来看一则小故事。老鼠妈妈带着孩子拼命奔逃,一只猫在后面紧追不舍。跑着跑着,老鼠母子俩被逼到了一个死角中,无处可逃,眼看就要命丧猫口。这时,老鼠妈妈临危不惧,直面大猫,狂吠几声:“汪!汪!汪!”那只猫吓了一跳,转身就跑。老鼠妈妈松了一口气,抓紧机会,对惊魂未定的孩...原创 2011-08-29 13:41:20 · 352 阅读 · 0 评论 -
《编程机制探析》第三章 计算机运行结构
《编程机制探析》第三章 计算机运行结构前文反复提到计算机的“硬件”和“软件”这两个概念。那么,硬件和软件到底是什么东西呢?通俗来讲(即,用我们老百姓的话来讲),硬盘中存储的数据叫做软件,除此之外,计算机所有其他的部件,全都叫做硬件。注意,硬盘本身也是硬件。因此,软件是存储在硬件中的。软件必须依托于硬件,才有依托之地。打一个不太恰当的比方,硬件相当于看得见、摸得着的物质文明,而软件就相当...原创 2011-08-29 13:50:31 · 320 阅读 · 0 评论 -
《编程机制探析》第四章 运行栈与内存寻址
《编程机制探析》第四章 运行栈与内存寻址计算机启动之后,操作系统程序首先从硬盘进入内存条,成为最先运行起来的一批进程。这一批操作系统进程可了不得,它们规定了CPU工作的总流程。CPU工作的时候,必须严格遵守操作系统进程定义的工作流程。为了满足人类用户的需求,现代的操作系统都是带有图形界面的多任务(多进程)系统。在计算机运行期间,内存里总是会跑着多个进程。这一点,我们可以在任务管理器已经...2011-08-29 13:54:14 · 303 阅读 · 0 评论 -
《编程机制探析》第五章 命令式编程
《编程机制探析》第五章 命令式编程从本章开始,我们会接触到真实的编程语言。但本书并不是一本编程语言语法入门书,本书旨在讲述最关键的编程模型核心概念,因此,本书通常会直接跳到最能够体现该语言编程模型的编程代码范例,而不会从头讲述某一种语言的讲法。有过编程经验的读者,阅读代码会感觉轻松一些。我尽量写得平实易懂,希望没有过编程经验的读者,也能够比较容易地理解。前面讲了,所谓计算机程序,其实就...2011-08-29 14:01:08 · 206 阅读 · 0 评论 -
《编程机制探析》第六章 面向对象
《编程机制探析》第六章 面向对象面向对象(Object Oriented)是命令式编程的主流编程模型,其概念极其重要。可以说,命令式编程几乎就是面向对象的天下。面向对象(Object Oriented)这个名词,可能是那帮计算机科学家炮制出来的最成功的名词了。尽管我绞尽脑汁,也不能为这个名词想出一个贴切的含义解释,但并不妨碍这个名词成为计算机编程中流行最广、上镜率最高的词汇。关于面...2011-08-29 14:02:33 · 263 阅读 · 0 评论 -
《编程机制探析》第七章 设计模式
第七章 设计模式什么是真正的面向对象的设计?这是一个困扰我多年的问题。当年,面向对象的各种神话甚嚣尘上,一个程序员要是不能侃上两句面上对象,都不敢出门见人。那时候,我接触的第一门面向对象语言是C++。那是一门极其庞杂的语言。语法繁复不说,更令人头痛的是,C++语言还有各种变种,即使是同一种变种,其编译器的实现也有可能不同,存在着大量的编程陷阱。那些陷阱主要集中在C++语言的多继承语...2011-08-29 14:18:07 · 223 阅读 · 0 评论 -
《编程机制探析》第八章 Compositor Pattern
《编程机制探析》第八章 Compositor Pattern在程序设计过程中,设计模式并不一定是单独使用的,很多情况下,我们可能同时组合应用多个设计模式,从而构建成一个更复杂的设计模式。当然,这样构建出来的设计模式,通常已经失去了通用性。在前面的章节中,我们用sort排序算法作为例子,讲解了最简单的Visitor(Functor)Pattern。那个排序的例子可以进一步扩展,引入更多的...2011-08-29 14:19:57 · 176 阅读 · 0 评论 -
《编程机制探析》第九章 线程
《编程机制探析》第九章 线程本章开始讲述线程(Thread)的相关知识。线程(Thread)是计算机编程中的非常重要的概念,其概念与进程(Process)类似,都代表着内存中一份正在执行的程序。两者的共同点在于,两者都有自己的运行栈。两者之间的区别在于,进程拥有一份独立的进程空间,而线程没有。线程只能依附于进程存在。一个进程下面的多个线程,只能共享同一份进程空间。因此,线程和进程的主要区别...2011-08-29 14:21:26 · 149 阅读 · 0 评论 -
《编程机制探析》第十章 线程同步模型
《编程机制探析》第十章 线程同步模型上一章讲解的同步锁模型只是最简单的同步模型。同一时刻,保证只有一个线程能够运行同步代码。有的时候,我们希望处理更加复杂的同步模型,比如生产者/消费者模型、读写同步模型等。这种情况下,同步锁模型就不够用了。我们需要一个新的模型。这就是我们要讲述的信号量模型。信号量模型的工作方式如下:线程在运行的过程中,可以主动停下来,等待某个信号量的通知;这时候,...2011-08-29 14:22:43 · 631 阅读 · 0 评论 -
《编程机制探析》第十一章 Copy on Write
《编程机制探析》第十一章 Copy on WriteHash Table(哈希表,也叫散列表)是计算机编程中极为重要、极为常用的数据结构,其用法如下:我们可以用一个名字(name,或者叫做键值key)作为索引,把对应的内容存入到哈希表中;以后,我们可以提供对应的名字或者键值,从散列表把对应的内容取出来。用代码来表示就是这样:hashTable.put(“myName”, myThing...2011-08-29 14:24:24 · 577 阅读 · 0 评论 -
《编程机制探析》第十二章 Iterator Pattern
《编程机制探析》第十二章 Iterator Pattern本章讲解一个极为重要、极为常见的设计模式——Iterator Pattern。关于Iterator的用法,实际上我们在前面的章节中有过一面之缘。Java语言开发包(JDK)中定义了一个Iterator接口,很清楚地描述了Iterator的行为。如果对这一点还不清楚的话,请查阅Iterator接口的相关文档和入门例子。Iterat...2011-08-29 14:25:34 · 559 阅读 · 0 评论 -
《编程机制探析》第二十八章 ORM
《编程机制探析》第二十八章 ORM本章的主题是ORM(Object Relation Mapping,对象与关系数据的映射)。ORM是一种技术框架,其主要作用是在面向对象语言和关系数据库之间搭建一个转换桥梁。这个转换是双向的。ORM既可以把关系数据转换为对象,也可以把对象转换为关系数据。ORM种类繁多,功能或繁或简,这里不便一一列举。本章只拣ORM的一些重要特性进行阐述。ORM...2011-10-19 15:02:54 · 801 阅读 · 1 评论