当前位置:网站首页>C陷阱与缺陷 附录B Koenig和Moo夫妇访谈

C陷阱与缺陷 附录B Koenig和Moo夫妇访谈

2022-08-01 21:00:00 weixin_客子光阴

Alex Stepanov 惠普实验室工作 正在开发的一个C++库   
向标准委员会提交STL,并建议将其并入标准库。

就其本身而言,C++是一种非常低级的语言,唯有利用库才能写出高层次的程序来。初学者还不能自己构造库,所以他们要么用现成的标准库,要么自己去写低层次的程序。确实有不少程序应该用低层次技术来构造,但是对于初学者不合适。

当然是库由于语言细节,这里有两个原因:首先,学生可以不必费力包装低层次的语言细节,从而更容易建立整体语言的全局观念 ,了解到其真实威力。学生在掌握如实使用程序库之后,就会很容易理解类的概念,学会如何构造类的技术。
更重要的一点是,首先学习程序库,能够使学生培养良好的习惯,就是复用库代码,而不是凡事自己动手。首先学习语言细节的学生,最后的编程风格往往是C类型的,而不是C++风格。它们不会充分地运用库,而自己的程序带有严重的C主意倾向---指针满天飞,整个程序都是低层次的。结果是,在很多情况下,你为C++的复杂性付出了高昂的代价,却没有从中获得任何好处。

《C++沉思录》提到:“C++希望面对把实用型放在首位的社群”
“糟糕的手艺人常常责怪自己的工具?”
“当你手里拿着锤子的时候,整个世界都成了钉子。”
如果你选择了这样的工具,那么你就必须负责选择合适的设计方案。

C++在运行时性能上做了一个很好的折中,能够在“一切都是对象”的语言与“避免任何抽象”的语言之间取得恰到好处的平衡。这就是C++的实用型。

“基于对象”和“基于模板”的抽象机制优先于面向对象抽象机制
所谓面向对象编程,就是使用继承和动态绑定机制编程。在我们看来,这意味着该程序有两个或两个以上的类型,至少有一个共同的操作,也至少有一个不同的操作。否则,就不需要继承机制。此外,程序中必然有一个场景,需要在运行时从这些类型中挑选出一个,否则就不需要动态绑定机制。

某些面向对象编程语言,如Python,其所有类型都是动态的,那么技术图书的作者就不会面对这样的问题。例如,C++中的容器类大多数用模板写成,因其可以容纳毫无共同之处的对象,所以要求元素类型必须是某个共同基类的派生类毫无道理。然而,在Python中,容器类中本来就可以放置任何对象,所以类似模板那样的类型机制就不必要了。

所以,我认为你所看到的问题,其实是因为很难找到又小又好的面向对象程序来做范例,才会产生的。而且,对于其他语言必须烦劳动态类型才能解决的问题,C++能够使用模板来高效地解决。

除非你首先掌握了构造良好类的技术,否则急急忙忙去研究继承就是揠苗助长。

《C++沉思录》“用类表示概念”假设我能再记住一句话,你们觉得应该是什么?
“避免重复”如果你发现自己的程序的不同部分中做了相同的事情,则试着把这两个部分合并到一个子过程中。如果你发现两个类的行为相近,则试着把这两个类的相似部分统一到基类或模板中。

《C++沉思录》中有两句名言:“类设计就是语言设计,语言设计就是类设计”

Python和C++程序构成了完美的一对组合。Python程序比相应的C++程序短小精悍,而C++程序则比Python运行程序快得多。因此,我们可以用C++来构造那些对性能要求很高的部分,然后用Python把它们粘在一起。Boost中的一个作者Dave Abrahams写了一个很不错的C++库,很好地处理了C++与Python的接口问题。

我们应该保持谦虚。

成为更好的C++程序员。请给我们3个你们认为最重要的建议:
1.避免使用指针
2.提倡使用程序库
3.使用类来表示概念 

其他著作:
Ruminations on C++

中文班序
本书内容:
C语言编程中一些重要的经验教训。

学习方式:
1、要成为一个优秀的程序员,最重要的无非是学习一种特定程序语言、函数库或者操作系统的细节,而且多多益善。
2、需要一本索引丰富完备的参考书就已经足矣;
3、最多可能还需要一位稍有经验的同事不时从旁点拨,指明方向; 

学习难点:
难的是那些我们已经了解的东西,如何“运用之妙,存乎一心”。

掌握学习难点的方法:
1、学习那些是不应该做的; 
2、研究一种语言中程序员容易犯错之处; 

学习方式:
对一般人而言,最有效的学习方法是从感性的、活生生的事例中学习,
比如自己的亲身经历或者他人的经验教训。

书籍推荐: 
C语言编程:kernighan和Ritchie:The Programming Language,第2版,Prentice-Hall, 1988 
C语言参考手册:Harbison和Steele: C:A Reference Manual,第2版,Prentice-Hall,1987 
数据结构和算法: Van Wyk: Data Structures And C Programs,Addison-Wesley,1988 
可移植性:Horton: How To Write Protable Program In C,Prentice-Hall,1989 
操作系统接口:Kernighan和Pike: The Unix Programming Environment,Prentice-Hall,1984 
绞尽脑汁的C语言难题:Feuer: The Puzzle Book,Prentice-Hall,1982 

原网站

版权声明
本文为[weixin_客子光阴]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_40186813/article/details/126057985