《设计模式》,C++与软件工程

http://topic.csdn.net/t/20051216/10/4462614.html

    《设计模式》其实并不难学。如果你觉得设计模式难学,往往是因为你平时上课没有好好听课:    
    在面向过程的年代,人必须充分了解计算机的处理细节,因此编写程序的方式完全是迁就计算机的线性思维的。在写程序的时候,把绝大多数精力放在了设计数据结 构以及编码、debug上了。在面向过程开发中的IDE开发环境的引入对面向过程开发的编辑和调试起了巨大的推动作用,让新手上手很容易。但是IDE实际 上是软件设计的大敌。学不好面向对象或者说《设计模式》的人十有八九是精通某个编程环境的IDE的。面向过程的开发特性加上IDE使得学习者过分关注软件 的细节实现、关注算法、关注函数调用,而对软件框架的设计以及接口设计关注得太少。拿到软件后就用IDE建个工程,一边写一边编译一边看结果。等到所需要 的结果出来时,才发现“wokao,我的代码怎么写得这么烂”。    
    在面向过程的时代,我们的邻国印度不是这么做的。他们的开发大多是是在UNIX下进行的,用VI或者EMACS作为编辑器,用命令行方式编译。他们不太提 倡用IDE。他们的软件高手未必玩得转VC的IDE,玩转BC3.1的IDE都够呛。所以我们看印度人的软件行业就觉得很奇怪。一方面,单纯看代码或者功 能模块,印度人的代码简直就叫弱智。千人一面的格式尚可解释为“便于阅读”,其算法之粗糙简直令人难以忍受。印度人很少进行代码优化!但是另一方面,印度 人有能力设计和实现很大、很复杂的软件,而我们却不具备这个能力。印度随便就可以找出国内屈指可数的软件构架工程师来。    
    面向对象——或者说《设计模式》是软件工程的一次革命。在面向过程的年代,软件工程的教条和实际的软件实现过程并没有必然的联系,软件工程的那些东西可遵 守可不遵守,而且往往出现“不遵守那些迂腐的信条,开发速度更快更有效率”的情况(这种风气被IDE推波助澜了)。在学习设计模式的时候,首先要看到的就 是这一点——软件工程成为一个必须遵守的法则,而不在是可有可无的“建议”。《设计模式》这本书难学,最难的地方就是作者假设了读者有良好的软件工程的观 念,而中国的读者则一般都不具备。    
    我看完设计模式之后,懂了很多东西,也很迷茫,不知道这东西具体有什么用。后来发现,其实老外已经用这些东西实现了很多我们很难理解的功能了。读完《设计 模式》后通常会认为这些东西只能用来设计大型软件、普通的应用软件。而实际上,大到交换机小到手机以及各种嵌入式的设备,无处不有设计模式的影子。   sourceforge上这类例子到处都是。看完了这些例子之后,我不免想:设计这些程序的人,到底是从哪儿开始动手设计的?    
    “到底是从哪儿开始动手设计的?”——这就是学懂《设计模式》的突破口了。    
    其实和《设计模式》并列的还有一本书,叫《代码重构》。这两本书表面上看起来说的东西水火不相容,而实际上它们说的是同一个东西。《设计模式》主张一开始 就借用已有的模式来解析需要实现的目标系统,然后用这些成熟的模式来实现;《代码重构》主张一开始随便写,随着对需求理解的不断深入,对代码进行反复的修 改。仔细品味这两种主张,你发现了什么?软件工程!!设计一个系统的时候,首先用已有的模式来大致解析这个系统,然后再实现的过程中不断细化,用设计模式 的各个模式组合起来去实现,或者提炼出新模式——这刚好就是《设计模式》和《代码重构》讲的内容。这两本书讲的就是进行这些操作的时候的方法——而所有的 这些,有一个大前提:整个设计过程是按照软件工程的方法来的。如果没有一个大家都认可的流程来做,代码重构往往会搞得一塌糊涂。面向过程的年代我们是拒绝 承认框架缺陷的。代码有问题了就debug,debug的目的是为了修成代码中不符合框架的部分。而面向对象的开发中则认为:代码通常是没有问题的(当然 不是指没有语法错误),如果有问题,则是由于模式之间的配合有问题、框架设计有问题。这是很不同的两种态度。    
    用过JBuilder的人应该知道,Jbuilder里面提供很丰富的“重构”功能。重构是通过工具实现的!那么,设计模式是靠什么工具实现的呢?不是我 们所熟悉的IDE,而是Rational的UML工具集。而在用UML工具集之前,我们首先必须具备面向对象的头脑。只有具备了面向对象的头脑,工具才能 帮助我们。而所有的这些的前提,则是——“你到底想做个什么东西”!有了目标,才有模型,然后开始选工具,然后开始编码、重构……    
    已经说到了工具了!回头再看看,是不是觉得面向对象的开发和面向过程有根本区别了?面向对象开发的每一步都已经有了比面向过程更加严格的要求,从设计者的 基础知识的要求、操作的过程、操作过程中的着眼点、对待bug的方法(debug还是重构?)以及所有这些过程中工具的介入等等,都有了全新的要求。    
     
    一点心得,但愿有用。      
 
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页