伴读《Applied C++》

 
   《Applied C++》是一本非常不错的程序员进阶学习的示范教材,适合有一定C++基础并且具有实践经验的程序员向老手修炼之用。书中全面涉及了C++的积极有效的特性,比如模板特偏化(侯捷是这么译的吧),如果对C++了解的程度不够高,阅读难度会非常大。书中反复探讨的使用C++的一些良好的设计习惯,也需要有经验的读者才能产生共鸣。
    由于作者简练的写作方式(这也不能怪他们,涉及面这么广的书是很难展开来讲的),和中文版译者忠于原文的翻译,阅读时要仔细思考才能发掘出作者的没有说完的话。所以我才有把看书时想到的内容写下来的想法,希望这些文字能成为共读者的伴读书童,“书是人类进步的阶梯”,在此与爱读书的人共勉,望与我交流。
 
     全书以一个图像处理软件产品为目标,把从Idea到Product的过程中的设计实现要点一一按时间顺序记录下来,几乎可以达到完全仿真工程实践的地步,展现了C++语言技术和工程应用结合的和谐美感,对于程序员来说,不亚于一部好莱坞大片。
    【绪言】介绍了应用背景、一些概念、算法等等,直接看原文就可以了。内容不多,因为好像我们从领导、从客户那里得到的东西差不多也只有这么多 :)。
    【第二章】作者建立了一个近乎潦草的应用原型,它来自程序员对绪言所描述应用的第一印象,几乎忽略了全部的设计细节,相当于只把概念、算法等等用程序语言描述了出来。但是这个原型从概念模型的层次是完整的,可以达到小组内统一认识,发现问题,发现设计难点的目的。书中,作者是采用传统的设计概念来写作的,我觉得在看的时候与Fowler重构即设计的思想相比对来学习,会有奇妙的受益。在接下来的几章,你会发现通过经验在原型中获取的设计蓝图和决策条目同样也可以通过原型重构来发现(不过重构更依赖对代码的直接嗅觉)。在一个正在进行中的工程中,设计经验和代码嗅觉都对设计产生强烈影响,它们有时是等价的、有时又是互补的。

本图无法粘贴

     【第三章】作者列出了一些常用的设计技术。实际上它们都和第二章中原型发现的问题有直接关系:
    从原型中,作者估计到对图像对象的拷贝会造成大量的内存复制,所以讨论了内存分配对象,使多个对象可以共享一块堆内存,然后通过引用计数来管理。这点同样可以给原型添加性能相关的单元测试后观察到,从而引发设计重构,不过这一般会发生在原型进化的后期。内存分配对象引入了对模板技术的讨论,因为支持对多种数据类型的类似的操作正是模板的用武之地。哦对了,这里还提到了单例空对象,它一般不是重构能演化出的设计,可以把它看作一种基本的编程习惯(出于对C++中任何空悬指针的恐惧)。
    ①当程序需要支持多种长度的象素类型时,导致了第一次较大的原型进化。将图像类改写成了一个模板类,内存管理采用了上文所述的内存分配对象。我个人认为这一过程,如果使用重构的视角观察和重构的方法来改写,也是非常自然的。
    ②第二次原型进化,作者加入了图像对象的句柄对象,后文提到这里使用的带有两层间接性的模板设计价值并不大,在后来的设计中把它简化了。提倡在设计中使用重构的手法的一个好处就是一般不会带来过度复杂的设计。
    ③第三次原型进化,作者发现图像类本身过于复杂,从而把它分离成两个类:图像类和图像存储类(这也是重构的思路噢)。
    这三次原型进化之间其实有较强的独立性,在一个小组内可以并行进行,不过这取决于团队的整体水平。作者通过原型进化给最终的软件产品结构划出了一个轮廓,发现了一些重要的问题及其解决方案,有经验的读者会依此对目标和工作量有一个估计了吧。
    【第四、五章】作者列举了在一个小组在启动这个产品过程时必须要考虑的设计问题和系统问题。对应于我的分类是:产品的设计要素(上半部分)和产品环境(下半部分)。 

本图无法粘贴

    到此为止,读者应该已经完全进入作者营造的一个虚拟项目环境中,成为作者领导下的一名开发成员了,并有一种上阵工作的冲动。
    (秃笔肯体牛的)
 

 

 原型1234……

 重构

设计经验

 原型管理

 自动化单元测试

原型验证

原型进化

设计蓝图

决策条目

阅读更多
个人分类: 评论
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭