课程总结
感谢同学们的大力配合和支持,我们这门课顺利结束了。经过我和王刚两天的紧张工作之后,最终的成绩也出来了,我们会尽快送到系教务处,同学们下学期开学后可直接到系教务处查看自己的成绩。
我们的课程从最初火爆的场面,经过五
-六次的猛灌之后,教室开始出现空座,又经过五-六次猛灌之后,同学们可以隔座而坐,其实最精华的内容在最后的几次课上,也是我最卖力的几次课。幸好还有不少同学坚持下来陪着我走到最后。感谢这些同学,你们使我倍感欣慰。我知道,来听课的同学不仅仅有计算机系和数学学院的研究生,还有其他系的一些旁听生,以及来自清华大学、科学院及其他高校的软件技术爱好者,面对大家的求知热情,我没有理由不把这门课讲好。这种信念使我坚持了整整一个学期,虽然辛苦,但内心非常充实。
原来的设想是开一门小课,在讲课过程中可以有更多的交流活动,但事实上这一点并没有做到。尽管没有直接的交流,但是整个学期过程中我和许多同学有电子邮件的交流,这也是一分难得的交情。在课堂上,我发现有许多同学
(甚至包括一些女同学,之所以特别提及女同学,是因为在软件工业界,女高级技术人员很罕见)听课特别专注,专注得让我惊讶,因为我读书时候上课从来做不到这么专注地听课。所以每次一想到这些专注的眼神,我心里不由得一阵激动。特别是,当我在课堂上说话不流利或者提不起气来时,面对这样的眼神,心里总是愧疚和不安。这也是我每次上课要准备两杯水的原因之一,怕讲不下去。专注的眼神值得我感动,同样地,有一些同学在课堂上抵抗困意的袭击,或者明知自己听不明白,却坚持来听课,这更让我感动。不论你们从课堂上获得的收获是大是小,就凭这种精神,你们将来会有成就的,不在今日,但是会有一天。
我发现在上课的时候,
每当我提及技术以外的内容时,有些同学的兴趣大增,即使原来在打瞌睡,也能立马精神起来。不过,我还是希望少讲一些课堂内容以外的话题,尽量控制在每次课10分钟以内。除了最后一次课,我都能坚持这一条。直到课程结束之后,才有人给我提建议,说这门课内容太多,同学们难以接受,建议把内容分开,开设两门课。而且有同学反映,其实大家并不能每周消化这么多内容。一切为时已晚,如果还有下一次,再作调整吧。有下一次吗?我不知道,这门课不是我目前主攻的方向,不知道明年我是否还能拿得起来。
最后一次课上,在最后的半小时中,我介绍了一些与技术无关的体会,这些内容是我仔细斟酌过的。虽然我提到的四点体会是非常普通的道理,但这毕竟是一个过来人的肺腑之言,特别是这几年我的一些教训,希望能够成为你们的前车之鉴。事后,有一些同学写信表示慰问,也有一些同学与我交流想法,这是我通过这门课得到的另一个收获。
再次感谢同学们!
潘爱民
2001-7-1
考试答题情况介绍
这次考试的平均成绩达到
85.3,有一位同学得了100分,这份卷子一改出来,我感觉非常高兴。
下面是针对每一个题目的说明。有兴趣者可以回忆一下。
这一部分的题目都比较基础,但是要把分拿全了需要非常仔细地回答每一个问题。
IUnknown
解决的两个基本问题。除了个别同学答错之外,几乎都能够正确地答出来。这样的题目答错太不应该,几乎是送分的题目。我送你分,你不要,那就没办法了。COM
接口的规则问题说起来很简单,但是一问到为什么,很多同学都答不到点上,所以都要丢点分。(我扣分不狠,只要你写了字,劳务分总是有的。)COM
的重用性当然是指包容和聚合两种模型,也有少数同学绕着重用性说了半天,就是绝口不提包容和聚合。对不起,扣3分。关于进程透明性的问题,我希望答题时候提到
proxy/stub、marshaling这些过程,有的同学大谈COM库在创建过程中的作用,这样说并没有错,但是只能挣点劳务分,毕竟没有说到要点上。下一个题目问:
COM对象与C++对象的区别和联系,我很奇怪,有一半的同学没有讲到两者之间的联系。为什么不看清楚一点,我在考场上提醒大家要注意审题,还好我把评分原则调整为“不讲两者的联系扣2分”,否则平均成绩还要下降2分左右。说到
composite模式,相信同学们都复习了,而且同学们举的例子也很好,有些同学用生活中的例子来说明composite模式。但是答题中存在两个问题:1 有些同学没有讲到composite模式普遍性的问题;2 有的同学举的例子中,只用树结构来描述事物,但是事物之间并没有包容或者组合的关系,仅仅一颗对象继承树不足以构成composite模式,composite模式的本质是组合关系,或者理解为自相似关系(或递归包含关系)。
COM
对象的结构模型大家都很熟悉,但是我发现大多数同学说不清楚对象的状态和操作之间的关系。在题目给定的内存模型中,每一个操作都作用在特定的对象上,有一个隐含的参数(this)指示了对象的状态,但是客户是看不到的。而对象的状态是由这些操作来维护的。有的同学只画出了内存模型,甚至有的同学画了三个内存图,但不说明状态与操作之间的关系。又是审题不清。关于
Adaptor模式的题目,大家答得很好,只有少数同学没有说清楚两种模型的优缺点。
COM
对象的线程模型是否符合strategy模式,这个题目没有标准答案,大多数同学都回答yes,少数同学回答no。只要理由充分,都可以得全部的分数。如果理由不足,会扣一点分。从总体来看,同学的思路非常开阔,下面两种答案我认为比较标新立异,而且思路也很清晰,所以得全分:1
答案是no。首先分别讲述strategy模式的结构和COM的线程模型,然后发现两者联系不起来,于是说“这是两个不同层次上的概念,所以我认为COM线程模型不符合strategy模式”。2
答案是yes。首先分别讲述strategy模式的结构和COM的线程模型,然后把线程当作strategy模式中的主体对象,把COM对象当作strategy对象,并且COM对象的每一个方法都对应一个算法,也就是说,以COM对象作为策略对象来配置COM线程对象。思路很好,结构也很吻合,这属于灵活应用strategy模式。其他答案一个普遍的现象是,没有真正把
COM线程模型与strategy模式联系起来,然后就得出答案yes。
最后一个题目就更加没有标准答案了,从组件软件和单个组件的角度来说明软件的可扩展性和可重用性,这怎么说好呢?评分标准就看是否回绕这两种情形,是否回绕这两种特性来答题。有的同学话说得很多,但是很散乱,缺乏条理性,害得我只好从他
(她)的字里行间去发现他(她)是否真正明白组件软件的思想。如果我一时迷糊,倒霉的就是他(她)自己了,不过这里扣分不多。