300分请教myan, gigix, cber等大虾关于泛型程序的设计问题

可口可乐 2001-12-06 02:43:34
近几日在读潘爱民老师翻译的《深入解析ATL》,书中说ATL是得到STL的启发而得来的,我认为ATL也可以看成是一个泛型的实作吧。
读完3,4章,感觉书写的很好,把一些类解释的很清楚,也感觉收获很大。可是放下书本,再让我想想这些类,我感觉头脑一偏混乱,什么这个泛型类,那个泛型类,常常搅和在一起,也就是潘爱民老师在书评中所说的“陷入ATL的复杂语法之中”。思考良久,我认
为单个的每个类我是看懂了(至少是表面上看懂),可是每个类为什么要这么设计,每个
类的模板参数为什么要这么定,我就不知道了。对于一个面向对象的程序,如果你告诉我
这个类的设计是遵照这个设计模式,运用此设计模式会有什么好处,我会对程序的框架很
清楚。可是《深入解析ATL》没告诉我,为什么每个类会这么设计,而不是那么设计,每
个类的模板参数为什么要这么定,而不是那么定,所以到头来,单个的每个类我知道,可
以整体的框架我一篇混乱。
我想请教各位大侠是,关于泛型程序的设计,有没有类似面向对象的程序设计中的设计模式,或者是有没有什么准则,能够以不变应万变,按照此准则设计出来的泛型程序会有什么好处。
myan大侠曾经说过“使用GP,你的设计思路变了,分析问题的角度变了,写代码的方法变了,评价程序的尺度变了,对于整个程序结构和软件构造的看法也变了”,我希望大侠能解释一下,到底变成什么样了。你拍案叫绝的一些程序是写的很好,可是它们是按照什么思路写出来的,有什么是可以遵循的。
希望各位大侠能够不吝赐教,结合你们的设计经验,说说关于泛型程序的设计的准则问题,最好能给出例子来解释你们的观点, 如果能结合ATL的设计来解释那就更好了。
...全文
214 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahaha88 2001-12-09
  • 打赏
  • 举报
回复
惨啊!我昨天就在教室里放了一个小板凳来占座,怎么被人扔到教室外面了?
唉。。。站着听吧。。。哈哈哈哈哈
陈硕 2001-12-08
  • 打赏
  • 举报
回复
Here am I.
hh 2001-12-08
  • 打赏
  • 举报
回复
<<The C++ Standard Library>>什么时候能译好出书呀?
myan:
碰到你一次不容易,我想问你以前是在马房山山顶的东边还是在西边过日子?
hh 2001-12-08
  • 打赏
  • 举报
回复
最近潘爱民先生翻译的书可真多,但愿翻译质量别下降呀,别只挂个名。
FMD 2001-12-08
  • 打赏
  • 举报
回复
Cool.
Waiting...
babysloth 2001-12-07
  • 打赏
  • 举报
回复
我对模式与GP只是有一点点想法,寒假整理一下。
关键的问题在于,这些东西没有多少实际的、开发中成功的经验和例子,泛泛而谈,没意思。
ATL中其实基本上看不到多少GP,我只看到一些基本的模板技巧,比如CComCreator。
也许我们大家还是一起多用用STL或者boost,先体会一些基本的东西,再谈GP设计,会更好一些吧?
liu_feng_fly 2001-12-07
  • 打赏
  • 举报
回复
听课听课,大家赶快把座位排好~~~~
招RD和QA 2001-12-07
  • 打赏
  • 举报
回复
gzer
gigix 2001-12-07
  • 打赏
  • 举报
回复

另外,在设计模式方面,我可以肯定的说:GP一定有很多的设计模式存在。不过这需要整理和实践检验。babysloth对此有了一点点心得,你可以去问问他。

pattern是无处不在的。不仅仅是“设计模式”、不仅仅是“面向对象”。pattern是“反复出现的解决某种场景下的特定问题的特定解决方案”,它就在哪里,等着你去发现总结。

gigix 2001-12-07
  • 打赏
  • 举报
回复

首先,我也不是大虾。比起myan和cber来,我羞愧难当。甚至babysloth也比我强多了……

其次,我对泛型还处于观望阶段。我这个人是比较懒的,我喜欢等别人把一个东西研究得有模有样了,再去剽窃一点别人的成果。就好象对待设计模式一样。

最后,我现在的兴趣还是在设计模式上面。不限于面向对象的设计模式,也许会包括GP模式。前一段,我在考虑:如何真正学懂设计模式;现在我考虑的是:如何在实际应用中结合设计模式。对于GP,我还是等myan搞出点东西来我再去剽窃吧。

废话一句:如果myan真的搞出什么东西来,你的article当然要在我这里发表了,你不会反对吧?

huang_brid 2001-12-07
  • 打赏
  • 举报
回复
原来是大虾们在论箭啦,赶快做下来听听!
myan 2001-12-07
  • 打赏
  • 举报
回复
ATL那本书我是买了,买来收藏——也就是说我不会认真去看。因为我对COM的兴趣已经完全失去。ATL是用来产生“ATL风格的COM组件”的模板库,所以如果你不理解COM,当然很难理解其中的设计原则。而COM本身是80年代末,CORBA规范刚刚有点苗头时,M$从OMG那里copy过来,然后在尚不成熟的工业基础上,建立起来的一套实用规范。注意是实用规范,也就是说从理论上看,其中有不少地方是混乱而矛盾的。CORBA在理论上是精心设计的规范,虽然成熟的晚,让COM在时间上占了先,但是这几年来,CORBA逐渐成熟,与Java、XML的结合,开始发挥出理论上的优势。所以我如果要学,会去学CORBA。

这是题外话。

我的意思是说,你想理解“为什么”,一定要先知道原理。如果你不知道作者的目标是什么,当然没法理解他的行为。

你想学习的准则,或者是不存在的,或者是一种艺术。我想在现在的阶段,我们这些对GP感兴趣的人,应该更加务实,我们并不是人人都要成为什么TL库的创造者,我们的首要任务是使用,标准C++库、Boost库里的东西我们了解多少,真正大规模运用过吗?没有,我敢说全国都没有。我现在翻译Nicola Josuttis的那本The C++ Standard Library,感触很深,以前曾经一度以为自己能阅读源码,能写几个三脚猫级的algorithms,就算过了第一层次。现在才明白,差得太远了,标准库里那些东西的结构、原理、设计思想,根本就没摸到门径,谈什么自己发明创造啊!?早着呢。

你的情况我不了解,也许比我强。但是总的来说,我认为我们所有人都应该谦虚。不要看了几个模板类,就雄心勃勃地要去写模板库。这个阶段我也有过,结果是设计时完全找不到方向,凭着感觉乱来。

如果你的目标是COM,我不反对你学ATL,反之,如果你是想学习GP,不如先学习一点STL,然后从www.boost.org入手寻找感觉,先明白用法,多看文档,源码,了解设计者的目标和设计选择。大家都是人,他们也不是神仙,领域知识雄厚,经验丰富而已,他能做出来的,你明白道理,一样能做出来。先打下坚实的基础,到时候再图更高境界不迟。在这是我学习GP一年半之后,认识到的东西。
potato_121 2001-12-07
  • 打赏
  • 举报
回复
关注!
softarts 2001-12-07
  • 打赏
  • 举报
回复
不觉得atl用了什么与stl有关的东西,它只是利用了模板这一概念,方便的产生了一系列的对象。看起来的确atl用的是oo的思想,封装得不错,且代码精良,例如ccomcreator里面有一个静态函数用于生成对象实例,这样不用生成ccomcreator实例也可以生成对象的实例。
babysloth 2001-12-06
  • 打赏
  • 举报
回复
呵呵,小虫一只,不是大虾。
您说的对啊,所以我说ATL“偏向OO多一些”,也有一定的GP成分。
可口可乐 2001-12-06
  • 打赏
  • 举报
回复
小懒虫虫大虾也来啦,你的“把心目中的MM按漂亮程序排顺序”(sort)给我很深的映象。
你说“看ATL,依然可以用传统OO的思想去看”,可是ATL中的确也有很多泛型的东西,就不说
集合对象和枚举器对象了,CComCreator我个人认为,就是一个很泛型的东西。
如果单独用传统OO的思想去看ATL,我感觉很多东西,并不是依照OO的思想来设计的,理解会有些问题。
babysloth 2001-12-06
  • 打赏
  • 举报
回复
随便说几句。
ATL并没有基于GP的思想来设计,所以不是一个泛型的实作。
ATL用到的常见的模板技巧主要是traits和recurring template pattern。
ATL中的模板主要用于产生精练的代码,本身的思想仍然偏向OO多一些。所以ATL中(模板)类的继承很多,层次并不浅,而STL中的继承则很少见。
所以看ATL,依然可以用传统OO的思想去看。
GP本身的实践太少,经验和例子都不足,没有必要强求自己用GP的思想来编程,做不到,也不现实。
传统的东西往往才是最成熟,最稳定的,不是吗?
可口可乐 2001-12-06
  • 打赏
  • 举报
回复
cber大虾第一个发话,感谢!
我刚接触GP没多久,所以头脑中充斥的很多还是OO概念,
你说以Concept来划分你所需要解决的问题域,提取出这些问题的共性,可是这谈何容易
。给定一个项目时,将来还可能还有面临什么新的问题(新增加的功能),都是很难预计
的。从这些问题中提取出它们的共性,每个人都有这个能力吗?有什么指导性的原则可以指导提取出问题的共性吗?
相对来说,我认为对象的划分就容易些了,因为现实生活中对Object有感性的认识。
XP还不懂,请问哪儿有关于Refactoring的资料。
echolover 2001-12-06
  • 打赏
  • 举报
回复
不好意思问个问提:GP 是generic programming么?
cber 2001-12-06
  • 打赏
  • 举报
回复
另外,Andrei Alexanderscu所写的《Morden C++ Design》一书是我目前唯一见过的使用GP结合DP起来编程的书籍(当然,也是最好的^_^),不过现在我们还无法见到它,但明年应该会有中文版出版(据说是潘爱民翻译),它绝对值得我们期待,唯一的不好之处就在于——它太难了,里面使用到的语言特性据说只有少数几种编译器能够支持(VC,BCC都不在此列)。

对于DP的使用,我目前没有什么好的建议,因为DP这玩艺看起来好像很简单,但掌握起来却很复杂,在我经验不够的情况下,我是不会贸然使用它们的。相反,我更倾向于用Refactoring来改善代码的设计。
加载更多回复(1)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧