<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="bbPress/1.0.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>冒号论坛 &#187; Forum: 《冒号课堂》讨论区 - Recent Topics</title>
		<link>http://bbs.zhenghui.org/forum/colonclass-discussion</link>
		<description>冒号论坛 &raquo; Forum: 《冒号课堂》讨论区 - Recent Topics</description>
		<language>en-US</language>
		<pubDate>Thu, 09 Feb 2012 00:33:00 +0000</pubDate>
		<generator>http://bbpress.org/?v=1.0.2</generator>
		<textInput>
			<title><![CDATA[Search]]></title>
			<description><![CDATA[Search all topics from these forums.]]></description>
			<name>q</name>
			<link>http://bbs.zhenghui.org/search.php</link>
		</textInput>
		<atom:link href="http://bbs.zhenghui.org/rss/forum/colonclass-discussion/topics" rel="self" type="application/rss+xml" />

		<item>
			<title>Todd on "数据和代码"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%95%b0%e6%8d%ae%e5%92%8c%e4%bb%a3%e7%a0%81#post-360</link>
			<pubDate>Tue, 25 Oct 2011 18:09:10 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">360@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;最近体会到抽象数据类型是用代码实现了数据的性质，所以是“代码即数据”的体现，不知道是否正确？
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "对象的消息模型"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%af%b9%e8%b1%a1%e7%9a%84%e6%b6%88%e6%81%af%e6%a8%a1%e5%9e%8b#post-329</link>
			<pubDate>Sun, 14 Aug 2011 18:15:02 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">329@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;以前我主要接触的静态类型语言，现在接触了动态语言之后对于对象的消息模型又有了一些新的理解。今天把理解写出了出来，请郑老师看看，谢谢！http://www.cnblogs.com/weidagang2046/archive/2011/08/14/2138059.html
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "如何看待STL的stack?"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%a6%82%e4%bd%95%e7%9c%8b%e5%be%85stl%e7%9a%84stack#post-334</link>
			<pubDate>Thu, 01 Sep 2011 21:16:55 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">334@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;STL的stack类的对象有标识，有状态，有行为，符合引用语义；而stack又允许拷贝构造，同时相等性比较又重载了==进行值比较，符合值语义。那么从值和引用的角度，我们应该如何看待STL的stack呢？
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "从数据亲和力角度看语言"</title>
			<link>http://bbs.zhenghui.org/topic/%e4%bb%8e%e6%95%b0%e6%8d%ae%e4%ba%b2%e5%92%8c%e5%8a%9b%e8%a7%92%e5%ba%a6%e7%9c%8b%e8%af%ad%e8%a8%80#post-326</link>
			<pubDate>Wed, 22 Jun 2011 20:59:24 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">326@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;最近我对程序设计语言又有了一些新的体会，大致说来是从数据处理的角度来看待语言的差异。我抽象出了一个概念-“数据亲和力（Data Affinity)”，它指的是语言的数据模型与某种数据形式之间的匹配程度。数据亲和力也是决定语言适用于哪些应用场合的重要因素。比如：&#60;br /&#62;
1. C语言的struct（语言的数据模型）和字节块（数据形式）之间可以建立起直接的映射关系，所以C语言具有较高的对字节块形式数据的亲和力，适用于需要进行直接内存操作的底层应用；&#60;br /&#62;
2. Javascript的对象（语言的数据模型）和JSON数据（数据形式）之间可以非常方便的相互转换，所以Javascript具有较高的对JSON数据的亲和力，适用于在分布式系统之间用JSON进行通信；&#60;br /&#62;
3. Shell对文本流形式的数据和文件具有较高的数据亲和力，适用于文本处理和文件操作应用.&#60;/p&#62;
&#60;p&#62;我发现数据亲和力和语言的范式没有必然的联系，比如：一门语言是面向过程的并不意味着它拥有对字节块形式数据的亲和力；一门语言是OOP的也不意味着它有对JSON数据的亲和力。根本上讲，数据亲和力取决于语言的数据模型，但也可能会和语言的强/弱类型、动/静类型有关系。C语言拥有字节块亲和力用到了弱类型特性；Javascript拥有JSON亲和力的关键是其动态类型。&#60;/p&#62;
&#60;p&#62;除了上面的例子，像SQL这样的DSL更是专门针对一种数据模型而量身定做的，所以DSL通常也会表现出某种数据亲和力。
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "抽象机制"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%9c%ba%e5%88%b6#post-47</link>
			<pubDate>Fri, 12 Feb 2010 19:31:13 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">47@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;第7课P186讲到：借助这两种抽象机制（参数抽象和规范抽象），我们可以实现五类基本抽象：过程抽象、数据抽象、迭代抽象、类型层级、多态抽象。&#60;/p&#62;
&#60;p&#62;还不是很明白这两种抽象机制与五类基本抽象的关系。比如：迭代抽象如何体现了参数抽象和规范抽象。
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Lumj on "成员函数的枷锁"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%88%90%e5%91%98%e5%87%bd%e6%95%b0%e7%9a%84%e6%9e%b7%e9%94%81#post-319</link>
			<pubDate>Tue, 31 May 2011 19:37:53 +0000</pubDate>
			<dc:creator>Lumj</dc:creator>
			<guid isPermaLink="false">319@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;大多OO语言对多态的支持,都限定了多态能力的使用方法,即,要使一个操作多态,它必须以成员函数的形式存在&#60;br /&#62;
——对了,说明:指动态的类型多态,GP不算(也就是老师你的书里说的..'inclusion poly')&#60;br /&#62;
我在最近的开发中发现这似乎很容易带来设计枷锁:&#60;br /&#62;
有时,想做的仅仅是以类型为指标来作分派,但是这就(由于语言提供的接口的限制)必须走那条唯一的途径:通过成员函数.但是我想这前后两者是没有必然联系的,至少从可行性(语义的合理性,实现的可能性)上说一样可以通过游离函数来做&#60;br /&#62;
假设有A,然后X,Y都继承A,现在对A类型的变量的某种操作需要多态(对X,Y有不同的做法),那么这样的限制就逼迫人把该操作写成A的成员函数,但是这有可能是违背当前的设计场合的.比如,这个操作的逻辑是使用A对象的上下文的逻辑,A对其的知情根本就没有意义,那么要么就通过成员函数被强迫耦合,要么就自己写类型判断分派&#60;br /&#62;
不知我的表达是否清楚?
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>folger on "关于继承"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%85%b3%e4%ba%8e%e7%bb%a7%e6%89%bf#post-316</link>
			<pubDate>Tue, 10 May 2011 18:22:31 +0000</pubDate>
			<dc:creator>folger</dc:creator>
			<guid isPermaLink="false">316@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;有个小问题,请老师指教.&#60;/p&#62;
&#60;p&#62;在第九章讲继承时,您有这么一个观点,父类应该尽可能禁用protected域成员.我想知道什么情况下可以违背这一原则.因为现实中这种情况似乎非常普遍:父类中含有需要和子类共享而又不便为外界所知的数据,这时候难道不是将其设为protected更为合适吗?
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Lumj on "变量与函数,lazy &#38; eager"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%8f%98%e9%87%8f%e4%b8%8e%e5%87%bd%e6%95%b0lazy-eager#post-310</link>
			<pubDate>Sat, 23 Apr 2011 16:32:14 +0000</pubDate>
			<dc:creator>Lumj</dc:creator>
			<guid isPermaLink="false">310@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;冒号老师,我最近从FP中又悟出些奇妙的道理:&#60;br /&#62;
http://tieba.baidu.com/f?kz=1059256883&#60;br /&#62;
PS:上周我在学校的微软俱乐部尝试以abstraction为主题进行了一个小讲座,非常酣畅!
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>awayings on "求后续阅读推荐"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%b1%82%e5%90%8e%e7%bb%ad%e9%98%85%e8%af%bb%e6%8e%a8%e8%8d%90#post-311</link>
			<pubDate>Sun, 24 Apr 2011 01:05:50 +0000</pubDate>
			<dc:creator>awayings</dc:creator>
			<guid isPermaLink="false">311@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;非常幸运能读到这本书，让我从一个编程的门外汉得以窥见通向这个领域的种种大道和它们生动的细节。唯有遗憾之处在于很多地方未能展开以详情。前面讲编程范式只是告诉我们世界上有刀枪有各种武功门派，中间讲对象导向算是讲了一家的内功心法，最后走马观花般的浏览了下招式。 求问如果想细读对象导向的设计模式，有哪些阅读可以推荐。书中讲设计模式的参考阅读只有一本经典的设计模式一书，有无其他细节实例的书籍？网上搜到讲这些的文章不少，很多拼凑的例子实在是让人难以下咽。本人素来太懒的关系。&#60;/p&#62;
&#60;p&#62;另外P400的插语似乎有误，解释创建者模式有助于解决构造函数参数过长的问题。说“可参见文献【2】item2”。翻开文献【2】Effective Java：&#60;br /&#62;
item 2，Enforce the singleton property with a private constructor，似乎没有多大关系&#60;br /&#62;
item 1, Consider providing static factory methods instead of constructors，似乎是静态工厂的。总算是靠点边。
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "精神和思想"</title>
			<link>http://bbs.zhenghui.org/topic/%e7%b2%be%e7%a5%9e%e5%92%8c%e6%80%9d%e6%83%b3#post-200</link>
			<pubDate>Sat, 02 Oct 2010 10:03:03 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">200@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;许多技术书籍都强调思想很重要，但《冒号课堂》讲“思想之上是精神”。书上讲到了“专研精神、批评精神”，但我不是特别明白到底精神和思想的区别在哪里？我只知道似乎二者都是与物质相对的，但区分不开。
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Lumj on "FP"</title>
			<link>http://bbs.zhenghui.org/topic/fp#post-304</link>
			<pubDate>Sat, 26 Mar 2011 12:00:39 +0000</pubDate>
			<dc:creator>Lumj</dc:creator>
			<guid isPermaLink="false">304@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;近一月翻来很多关于语言与范式的书(这归功于冒号课堂:))来看,觉得很有意思&#60;br /&#62;
尤其是对于FP,很诱人,因为了解到它与命令式语言描述问题的方式的对偶关系,使我觉得,它与命令式的互补一定能发挥强大的威力&#60;br /&#62;
后来我找来个scheme玩了一下&#60;br /&#62;
现在我正尝试把FP应用到日常开发当中,我初步的想法是,将状态映射(计算)与状态改变(赋值,side effect)有意识地清晰地分开,并分别以FP与IP(imperative pro..,有这个词吧??)实现,具体地,Object的本性是维持状态,于是我设想在 单个方法体内的局部计算 或是 查询类方法的整体 这样的无状态瞬间应用纯FP——当然是尽可能地,因为由于需要依赖环境的代码以及问题本身的特性等等,也是有可能不适合FP做的——我想也许这样的实践会很自然地促使对代码的清晰理解和合理轻便(对了,还有正交)的设计(有点像DbC促使人意识到query与command的分离那样)&#60;br /&#62;
我是在一个使用c#的工程(我自己开发着玩的东西)中作这样的尝试的,昨天我的代码一下呈现出和以前很不一样的风格,感觉很不错..&#60;br /&#62;
我感觉维护控制流的状态的逻辑是一个在普通IP过程中一直被隐性地重复描述着的逻辑(比如标记某个循环的退出是循环个某个条件成立导致的还是先达循环终点时的自然结束并作不同处理)&#60;br /&#62;
还有,空逻辑(我把它叫nulling)也是:根据某个值是否为0或null还是有内容来制造出一个新值——比如为0或false就生成一个新的null(下级以0体现空,本级由于其返回值等因素需要以null来体现'空'),否则就利用那个内容计算出一个新的有内容的对象,这类逻辑也是被无限期地隐性重复着&#60;br /&#62;
我感觉这类现象是导致错误和降低生产力的一类因素,因为同一件事每次都要描述一遍(而且有的本身就容易出错),自然带来出错的可能性,而在我的FP实践中,这类事就(几乎)可以完全消除,使我感觉代码很纯净&#60;br /&#62;
感受很多,所以写到这里我也不知道有没有偏题,上面说的这类因素是否和FP有必然的关联我也还不好说.好,就到这吧
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "多态的本质是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%a4%9a%e6%80%81%e7%9a%84%e6%9c%ac%e8%b4%a8%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-152</link>
			<pubDate>Tue, 06 Jul 2010 12:03:16 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">152@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;多数人以为多态就是基于继承的子类型多态，而书中提到了几种不同的多态。为什么这几种不同的形式都被称为多态呢？它们的共同点或者说多态的本质是什么？我思考的结果是：类型（Type）是语义要求，类（class，struct）等是语法机制，多态的本质是不同的类满足同一类型的要求，即同一语义不同语法。
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Lumj on "冒号老师,如果有人这样问你,你会怎样回答?"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%86%92%e5%8f%b7%e8%80%81%e5%b8%88%e5%a6%82%e6%9e%9c%e6%9c%89%e4%ba%ba%e8%bf%99%e6%a0%b7%e9%97%ae%e4%bd%a0%e4%bd%a0%e4%bc%9a%e6%80%8e%e6%a0%b7%e5%9b%9e%e7%ad%94#post-298</link>
			<pubDate>Mon, 07 Mar 2011 09:35:58 +0000</pubDate>
			<dc:creator>Lumj</dc:creator>
			<guid isPermaLink="false">298@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;我杜撰了一个错误的设计,并想以它为例来告诉别人某类设计是错误的,但是我发现我可用以表达的词汇不够,由此陷入一种很奇怪的境地,所以突发奇想想看看冒号老师会怎样回答&#60;br /&#62;
在需要一个NameValuePair的地方,某人说:&#34;唉,再去写个NameValuePair class太烦了,不就是两个变量放一起么&#34;,然后在需要传递NameValuePair的地方都以Array[2]来代替,每次取出array[0]当作name,Array[1]当作value,如此工作&#60;br /&#62;
我的想法是,这样做的确能工作,但是语义上是错误的,如果感性地表达一下我的感觉,像是这样:&#60;br /&#62;
Array里的东西是'数出来的',并且各个元素没有相互之间的独特性(这个形容相当拙劣,我找不到好的词语),而NameValuePair里的东西是'枚举出来的'&#60;br /&#62;
就好像,对一个班级里的学生们,老师的看待方式会是这样:一个班长,一个副班长,一个学习委员,一个..等等,最后,剩下的是一个学生数组,如果问起班长之类的,老师会说出名字和其它他的各种表现,而问起那个学生数组里的人,也许会想一想才分辨出他的各种信息(哎?!我写到这才发现,这个'想一想'好像暗合了Array的性能劣势),因为那个学生数组里的学生是被批量看待的&#60;br /&#62;
不知冒号老师是否理解了我的想法,是否有好的词汇和语句可以直截了当地说明这个设计的错误&#60;br /&#62;
PS:不考虑性能之类的问题,就考虑语义问题
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Lumj on "为什么Object不是抽象的?"</title>
			<link>http://bbs.zhenghui.org/topic/%e4%b8%ba%e4%bb%80%e4%b9%88object%e4%b8%8d%e6%98%af%e6%8a%bd%e8%b1%a1%e7%9a%84#post-264</link>
			<pubDate>Thu, 23 Dec 2010 17:53:21 +0000</pubDate>
			<dc:creator>Lumj</dc:creator>
			<guid isPermaLink="false">264@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;RT,冒号老师你在书中提到过不论是.net还是java中的Object class都不是抽象的,我看到这之后突然发现好像没注意过这个问题.我思考了一下,想不出为什么会这样设计&#60;br /&#62;
我的想法很简单:一个Object实例并不能完成什么工作
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "迪米特法则"</title>
			<link>http://bbs.zhenghui.org/topic/%e8%bf%aa%e7%b1%b3%e7%89%b9%e6%b3%95%e5%88%99#post-184</link>
			<pubDate>Fri, 03 Sep 2010 22:00:29 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">184@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;目前，我能够识别并避免违背迪米特法则，但是总感觉对迪米特法则的认识深度还不够，还不能说清楚到底迪米特法则本质上意味着什么。我目前思考的结果是：&#60;br /&#62;
OOP中，对象间的交互是消息传递模型，而消息是值语义的；而obj.GetAnotherObject()的结果是引用，违背了对象消息传递模型。所以，违背迪米特法则的设计其实是不符合OOP的。
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Lumj on "关于Demeter原则的疑问"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%85%b3%e4%ba%8edemeter%e5%8e%9f%e5%88%99%e7%9a%84%e7%96%91%e9%97%ae#post-279</link>
			<pubDate>Mon, 10 Jan 2011 22:39:50 +0000</pubDate>
			<dc:creator>Lumj</dc:creator>
			<guid isPermaLink="false">279@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;something.getWidth().toString();&#60;br /&#62;
这样常见的做法岂不也是违背Demeter原则了?
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "实现继承问题的经典实例"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%ae%9e%e7%8e%b0%e7%bb%a7%e6%89%bf%e9%97%ae%e9%a2%98%e7%9a%84%e7%bb%8f%e5%85%b8%e5%ae%9e%e4%be%8b#post-274</link>
			<pubDate>Mon, 03 Jan 2011 16:46:05 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">274@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;&#34;You must override hashCode() in every class that overrides equals(). Failure to do so will result in a violation of the general contract for Object.hashCode(), which will prevent your class from functioning properly in conjunction with all hash-based collections, including HashMap, HashSet, and Hashtable.&#34;&#60;br /&#62;
-- from Effective Java, by Joshua Bloch&#60;/p&#62;
&#60;p&#62;《冒号课堂》中提到了实现继承的诸多问题，必须引起重视，解决的方法其中之一便是将这类实现相关的“潜规则”明确写入文档。我觉得最经典的实例就是Java中覆盖equals()方法必须同时覆盖hashCode()的问题。
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "左值和右值"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%b7%a6%e5%80%bc%e5%92%8c%e5%8f%b3%e5%80%bc#post-276</link>
			<pubDate>Tue, 04 Jan 2011 12:52:50 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">276@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;这几天又看了一下“值与引用”这一章，有一个想法：在介绍值类型对象的时候，如果明确区分并介绍一下左值和右值的概念或许会使得值类型对象的概念更加清晰。我的理解是：右值是天然的不可变的值语义对象，不具备可引用的存储空间，因而是引用透明的；左值具有可被引用的存储空间，可以用来存储右值，对左值的改变是一种新旧更替。&#60;/p&#62;
&#60;p&#62;http://accu.org/index.php/journals/227
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "ORM是否会导致难于基于数据库管理工具管理？"</title>
			<link>http://bbs.zhenghui.org/topic/orm%e6%98%af%e5%90%a6%e4%bc%9a%e5%af%bc%e8%87%b4%e9%9a%be%e4%ba%8e%e5%9f%ba%e4%ba%8e%e6%95%b0%e6%8d%ae%e5%ba%93%e7%ae%a1%e7%90%86%e5%b7%a5%e5%85%b7%e7%ae%a1%e7%90%86%ef%bc%9f#post-271</link>
			<pubDate>Tue, 28 Dec 2010 16:46:56 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">271@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;我们没有在项目中使用过ORM，一个原因是一般公司的运维人员都基于数据库管理工具(GUI或命令行）使用SQL直接操作数据表（查看、编辑、统计等），必须考虑运维的需要。如果ORM是从对象设计入手，不知道这样出来的表会不会不利于使用数据库管理工具直接管理？
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Lumj on "不知冒号老师对public static void Main现象怎么看?"</title>
			<link>http://bbs.zhenghui.org/topic/%e4%b8%8d%e7%9f%a5%e5%86%92%e5%8f%b7%e8%80%81%e5%b8%88%e5%af%b9public-static-void-main%e7%8e%b0%e8%b1%a1%e6%80%8e%e4%b9%88%e7%9c%8b#post-255</link>
			<pubDate>Fri, 17 Dec 2010 20:13:24 +0000</pubDate>
			<dc:creator>Lumj</dc:creator>
			<guid isPermaLink="false">255@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;冒号老师,我快把你的书看完了,在最后一章,哈哈,对书里对抽象的讨论非常喜欢&#60;br /&#62;
第一次在这发帖,想听听在一些我感兴趣的问题上你是怎么看的&#60;br /&#62;
Java,c#都不允许全局函数,从而程序的入口点也必须成为某class的static方法,这一点上我好像还没听到哪位身边的朋友对其持批评态度的.不知你是怎么看的?&#60;br /&#62;
我的观点呢..其实很激烈,我认为这个设计很愚蠢.我想先不列出我认为这样的设计不合理的理由,先听听你是怎么看的?&#60;br /&#62;
我就先说一个很直白的理由吧:&#60;br /&#62;
我记得我第一次写下这个class时在给它起什么名上翻覆良久,最后实在无法,就随便拿了个名字来,好赶快写下面的&#60;br /&#62;
而给它起名如此痛苦,并非一种描述无能,而是,我根本不知道它是什么!我想我的脑中根本就没有这样一个&#34;class&#34;!&#60;br /&#62;
程序设计这项活动的本质便是把问题空间(逻辑空间)至代码空间作一个映射,而这个class我却在问题空间中完全找不到,它存在的意义是什么?&#60;br /&#62;
无法给它作身份定位.如果给变量起名,我知道,它维持程序的状态,也往往映射到逻辑空间中的某个对象;给class起名,我知道,它是逻辑空间中的概念在代码中的对应体;给namespace起名,我知道,它象征了论域,语境.而对这个天上掉下来的class,我实在无法想象它是以什么身份出现在我这的&#60;br /&#62;
嗯,先说这些,冒号老师你怎么看?&#60;br /&#62;
呃,再多说一句,我至今很奇怪,我几乎没有听闻在这个设计上有引起争议?(也可能是我的信息范围比较小吧,呵呵)
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "AOP的思想"</title>
			<link>http://bbs.zhenghui.org/topic/aop%e7%9a%84%e6%80%9d%e6%83%b3#post-212</link>
			<pubDate>Fri, 05 Nov 2010 09:15:41 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">212@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;在认识了抽象的多维度以后，我对AOP的思想有了新的认识。一个软件系统包含了多个方面，但传统软件方法各个方面是耦合在一起的，AOP的思想在于先对各个方面独立分析和开发，然后利用静态或动态的编织技术融合起来。我想这就是书中所谈到的SoC的含义。
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "动态类型语言需要接口吗？"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%8a%a8%e6%80%81%e7%b1%bb%e5%9e%8b%e8%af%ad%e8%a8%80%e9%9c%80%e8%a6%81%e6%8e%a5%e5%8f%a3%e5%90%97%ef%bc%9f#post-253</link>
			<pubDate>Wed, 15 Dec 2010 16:05:41 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">253@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;最近考察了一下用Python做中大型项目的可能性。发现Python里面没有接口，只有duck typing，就好象C++ template一样，模板参数T的约束是一种隐式的。这样就只有通过文档，或阅读源代码才能知道类型的约束。这样对于大型的项目的模块划分和协作来讲是非常不方便的。我觉得这算是动态类型语言在大型应用中的一个明显缺点吧。动态类型语言加入接口支持的意义其实不限于静态类型检查，而是一种语言的抽象机制，能够让模块间的交互更加规范。Python目前有一些基于库的模拟接口的方法，但还远不如语言级别的支持来得直接和有效。另外，我觉得C++0x被否决掉的concept也是一种为模板参数增加显式约束的方式，这个思路其实可以为动态语言所借鉴。&#60;/p&#62;
&#60;p&#62;下面是Python作者关于接口的一些看法：&#60;br /&#62;
http://www.artima.com/weblogs/viewpost.jsp?thread=92662
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Thomson on "CRTP是怎么实现mixin的呢?"</title>
			<link>http://bbs.zhenghui.org/topic/crtp%e6%98%af%e6%80%8e%e4%b9%88%e5%ae%9e%e7%8e%b0mixin%e7%9a%84%e5%91%a2#post-250</link>
			<pubDate>Wed, 01 Dec 2010 10:53:23 +0000</pubDate>
			<dc:creator>Thomson</dc:creator>
			<guid isPermaLink="false">250@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;我看到第多态的那章这么说,可是CRTP是c++实现static polymorphism 的, 怎么又和mixin联系起来了呢?
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "闭包与对象"</title>
			<link>http://bbs.zhenghui.org/topic/%e9%97%ad%e5%8c%85%e4%b8%8e%e5%af%b9%e8%b1%a1#post-206</link>
			<pubDate>Mon, 01 Nov 2010 09:50:48 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">206@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;这几天我用C#3.0的闭包实现了OOP风格的对象：&#60;/p&#62;
&#60;p&#62;http://www.cnblogs.com/weidagang2046/archive/2010/11/01/1865899.html
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "object范式与stream范式"</title>
			<link>http://bbs.zhenghui.org/topic/object%e8%8c%83%e5%bc%8f%e4%b8%8estream%e8%8c%83%e5%bc%8f#post-161</link>
			<pubDate>Wed, 28 Jul 2010 10:06:54 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">161@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;SICP的第3章比较了object与stream两种范式，但很可惜《冒号课堂》里面没有把stream列为一个独立的范式进行讨论。&#60;/p&#62;
&#60;p&#62;http://mitpress.mit.edu/sicp/full-text/sicp/book/node50.html
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "模块内聚方式"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%a8%a1%e5%9d%97%e5%86%85%e8%81%9a%e6%96%b9%e5%bc%8f#post-194</link>
			<pubDate>Thu, 23 Sep 2010 17:02:53 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">194@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;看到一篇文章对模块内聚方式进行了详细的介绍，可以作为《冒号课堂》的一个补充参考：&#60;/p&#62;
&#60;p&#62;http://www.waysys.com/ws_content_bl_pgssd_ch06.html
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "关于语言的复杂性"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%85%b3%e4%ba%8e%e8%af%ad%e8%a8%80%e7%9a%84%e5%a4%8d%e6%9d%82%e6%80%a7#post-191</link>
			<pubDate>Sat, 18 Sep 2010 11:17:37 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">191@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;网上常常见到C、C++、C#、Java的复杂性争论，《冒号课题》里面也有相应的讨论，我记得书中比喻“成年人比小孩复杂，因为成年人需要承担更多的责任...”。最近，我对这个问题又有了一些新的认识：从简单到复杂从低级到高级是自然界生物进化的过程，语言的进化过程与之非常相似，所以，自然的东西就让它自然去发展。
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "Creator与Factory"</title>
			<link>http://bbs.zhenghui.org/topic/creator%e4%b8%8efactory#post-189</link>
			<pubDate>Wed, 15 Sep 2010 17:28:00 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">189@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;Factory相关的模式主要是对对象创建过程的抽象，而除了创建过程还涉及到一个创建职责，即应该由谁来创建对象？这个问题似乎没有引起与Factory同等的重视。我只看到过GRASP里面提到了的Creator涉及了这方面的讨论。我准备对这一问题再进行一些深入的学习和思考。
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "DbC和TDD"</title>
			<link>http://bbs.zhenghui.org/topic/dbc%e5%92%8ctdd#post-158</link>
			<pubDate>Sun, 25 Jul 2010 11:48:18 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">158@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;昨天看了一个老外的视频讲座，他谈到：DbC适合用于表达无副作用的条件约束(constraint)；TDD适合用于表达类的外部行为(behavior)。二者是互补关系，可以结合使用。&#60;/p&#62;
&#60;p&#62;http://www.infoq.com/presentations/TDD-in-a-DbC-World-Greg-Young
&#60;/p&#62;
</description>
		</item>
		<item>
			<title>Todd on "UML感想"</title>
			<link>http://bbs.zhenghui.org/topic/uml%e6%84%9f%e6%83%b3#post-154</link>
			<pubDate>Fri, 09 Jul 2010 18:05:45 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">154@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;如果把系统视为一个多维对象，那么UML的用例图、类图、序列图、状态图等是在不同维度上对该对象建立的视图。抽象的角度不同，抽象的结果就不同，根据不同的需要选择不同的抽象角度。不知道这样理解UML是否正确？
&#60;/p&#62;
</description>
		</item>

	</channel>
</rss>

