Solstice的“朴实的C++设计”一帖中的OO问题的争吵似乎告一段落。在那个帖子里,有人说我的观点跳跃性太强,其实不然。一方面我不觉得有些话说得太明了有什么用。能懂的人点一下自然知道你说什么;不懂的人要说明白的话还要给他补最初级的概念课,那就冲淡了帖子的主题,一会儿就水得不知道跑到哪里去了。
另一方面有些话是故意卖了些破绽,不过Solstice同学为人还是很厚道的,基本上打不还手,骂不还口。从恶意地想,可能是已经看破了我的把戏,所以不向前,这样一方面保护了自己的弱点,一方面还显得很大度。所以很多手里暗藏的ZhaDan没有发出,只靠一块板砖了事,不免寥寥。
其实对于Solstice的所谓“纯对象”设计最大的漏洞,在于它不可能实现真正的动态类型判定。刨除以虚函数表为基础的多态,或者是不为我们倡导的指针强制类型转换,C++的其它东西,都是静态的,是编译器玩的技巧。用boost玩儿的再花,也不可能超越这个藩篱。所以这是所谓纯对象不可能任务之一。
其次,各位真的以为所谓的pImpl也好,C++多态也好,有任何的区别么?C++的虚函数表本质上也不过是编译器替你做的一点儿工作,在对象中插入了一个隐含的指针。pImpl本质上是个一模一样的东西。转换成汇编代码,除了pImpl模式多了一个函数跳转,除了虚函数表和pImpl指针使用的寄存器可能不同,其余的东西看不出有任何的区别。原因何在?pImpl也好,delegate也好,其实就是一种变通的继承关系,就是自己用编码做了一些编译器同样的事。从设计角度上来说,如果你使用UML设计了A同时继承B和C,而你又不想使用多继承,就完全可以把其中任一个转为delegate模式而不会产生任何问题。
再其次还是忍不住说一下,boost这个东东真的有那么好?C++的template和GP设计出来的东西,僵化程度绝对是强于OO设计的。OO至少还提供了多态这种和稀泥的把戏。在template库里,如果你想引入一些新的东西,90%以上你是需要另起炉灶的。这是个什么代价?读读boost有多少行就明白了。
而boost的本质,是预编译。也就是和宏同样的东西。除了加入了强类型支持,以及一些让人根本看不懂的编译错误之外,模板不能比宏提供更多的东西。C语言的高手甚至可以用宏定义自己的语言。从boost的实现上看模板离开宏还不能干太多的事情。
通过引入boost而降低程序复杂度,很有可能只是表面现象。因为你引入了一个超级大的模板库,也就是无数的外部依赖。在标准化以及被主流编译器支持之前,有些特性还是少用为好。而从C++标准委员会的恶劣历史来看,这个周期很有可能是我们还需要再等5年到10年。
我个人的感觉,C++的风格,如果写小型程序,各种流派各有所长。而大型工程,还是以“杂拌儿”的风格为好。OO的风格当然也可用。我认为需要谨记的是:template模式要慎用;类型继承3层或超过3层的要慎用;受其它模块调用的类最好用虚基类,Facade模式隔离内部细节。在确定是完全局部化的问题里,我认为就百无禁忌了。
关于OO设计更倾向于完美设计的问题,我没有考察过,所以不做评论。但是个人以为,追求“完美设计”应该是个软件工程上的问题,出现这个问题,更应该做检讨的是开发流程,而不是编码技术。
分享到:
相关推荐
教育精品资料
在高考政治复习中,"透过现象看本质"是一个重要的知识点,它涉及哲学认识论的基本原理。教学目标主要包括理解和掌握现象与本质的关系,感性认识与理性认识的区别和联系,以及真理与谬误的辨析。教学过程中,学生需要...
《透过C++看Java》这篇文章主要探讨了C++和Java这两种编程语言之间的差异,以及它们各自的设计理念。本文从多个方面进行了深入的比较,旨在帮助读者理解这两种语言的不同设计思想。 首先,C++和Java在类型设计上的...
《数值策划-透过现象看本质》是一份深入探讨游戏数值策划的专业资料,它揭示了游戏设计中的数值背后所隐藏的深层逻辑和原理。在游戏开发中,数值策划扮演着至关重要的角色,他们通过数学模型和算法来构建游戏的经济...
计算机后端-全面解读PHP面试-程介绍透过现象看本质.mp4
3. D3:制定临时措施 —— 设计并实施一个临时解决方案,以防止问题恶化或继续影响。 4. D4:找出根本原因 —— 使用5W's(五个为什么)或其他问题解决工具,挖掘问题的根源。 5. D5:制定永久性纠正措施 —— 基于...
透过专利看微处理器的技术发展(九)——多核处理器中Cache专利技术分析.pdf
运行时机制:突破现象看本质,透过语法看运行时
透过各种自然现象,如阳光折射出的彩虹、雨后的清新景色,以及周围环境中丰富的色彩,孩子们可以体验到颜色所带来的美妙感觉。对于幼儿园小班的孩子来说,通过游戏和活动认识颜色不仅能增加他们的感官体验,还能促进...
在“Visual C++动感设计”这个主题中,我们主要探讨的是如何利用Microsoft的Visual C++开发环境来实现图像处理中的半透明效果。这种效果在现代软件界面设计中极为常见,可以提升用户界面的美观性和交互体验。半透明...
这需要我们在实践中不断提高透过现象看本质的自觉性,学会分析判断,不被表面现象迷惑,同时,明确是非界限,提升对事物本质的认知,从而在生活的各个方面做出明智的决策。 综上所述,现象与本质的辩证关系,以及...
透过专利看微处理器的技术发展(三)——预译码技术专利引证分析.pdf
高考政治全程检测十四:透过现象认识本质.pdf
从事这一行业近十年的时间,我目睹了无数用户的热情、希望和失望,也经历了一次又一次的病毒流行所造成的恐惧,作为一个长期以来以电脑病毒为生的行业人士,感觉到有必要向大家讲述一些真实的病毒故事,在病毒和反...
在繁忙的调度中心内,随着清晨的第一缕阳光透过窗户,电力行业运行班的一天正式开始了。今天,他们将面临一次严峻的考验,展现他们专业精神和团队协作的时刻即将到来。 早会中,班长周全强调了“三不伤害”的原则。...
【海门市2006——2007学年第一学期高三第一次诊断考试化学试卷】 这份试卷是一份针对高三学生的化学考试,旨在诊断学生在化学学科上的掌握情况。试卷分为选择题和非选择题两部分,总分150分,考试时间为120分钟。...
总的来说,微处理器的技术发展是一个由专利引领的历程,这些专利不仅是技术的证明,也是历史的见证。通过深入研究专利文献,我们可以更深入地理解微处理器的早期发展历程,从而更好地把握当今信息技术的脉络,并为...
在文学创作中,心理描写是一种极具表现力的艺术手法,它通过作者对人物内心世界的深入挖掘和细腻刻画,赋予角色以血肉和情感,为读者呈现一个个生动形象。心理描写的作用,不仅限于简单的情感表达,它还能折射出人物...
【现象与本质】在认识论中,现象与本质是两个重要的概念。现象是事物的外在表现,是我们通过感官可以直接感知的部分,它可能是多变且个别的,如苹果落地这一现象。而本质则是事物内在的规律性和根本性质,是无法直接...