风格的选择
【警告】我目前从事嵌入式开发,文章中的观点受到我浅薄开发经验的强烈影响,各位请抱着批判的观点看待。另外,此文的以项目实际开发为衡量标准,请不要以仅在理论中存在的理想标准来评价本文的观点。
【大师语录】
Herb Sutter(1998):...在我们公司的开发中,大量使用的是封装,包容,访问控制,ADT,不大用继承和多态。我们经常使用STL,template...至于异常,我通常都用new (nothrow) Classname!;-) ...
Douglas Lea(1995): 也许对C++最好的看法是把它看成一系列较小、较简单的语言。包括:一种接口定义语言,一种数据抽象语言,一种静态类型的面向对象语言,一种过程化语言(也就是C)。它的每个方面都有一些缺陷...,让这些模型和特性彼此交互协作会导致严重的复杂性。通常,对付这种复杂性的最佳手段是始终坚持使用少量的几个设计和编程惯用技术(就是今天所谓的模式——译者),这些技术又组合成为更加通用和有效的技术。(设计开发中的)一个首要目标是尽可能远离这个语言中的阴暗角落。
【正文】
Bjarne Stroustrup说,C++有四个部分:better C,ADT,OO,和GP。虽然现在也有一些新的风格被证明可以在C++中运用,比如functional, generative,meta programming等等,但是在实际工程中,主流的风格就是这四种。我们通常使用OO风格进行软件开发,但是,严格来说,目前C++中的所谓OO风格是一种典型的混合风格。
是不是可以这样认为,C++实际上是几种不同风格的语言集合。也就是说,你可以把它看成几种不同的语言,可以只使用其中一种语言进行完整的软件开发。如果同时杂合使用一种以上的风格,则复杂性会大幅度地增加。我个人认为,这是C++在实践中难于控制的一个主要原因。混合使用不同风格,就好像在一个源文件里混合使用多种不同的语言,复杂和不一致性必然暴露。当然,C++独特的魅力正在于混合风格编程的强大威力。这正是一把双刃剑,虽然具有潜在的强大威力,但是通常来说也是导致项目混乱