这两年从C++到OO的收获——为我的准论文序

这两年从C++OO的收获

The Last Two Years Harvest

——为我的准论文序

bykangtian0

        为了吸引注意,同时让理解了面相对象思想的人能够认真看我附件中的准论文,在这里写上一些可能让很多人觉得狂妄的话。其实,前一段时间,我在一个据说网络了csdn中闲人高手的群中就是这样做的,不过,目的是在这方面及其深入研究者的愤怒,对我在这方面的知识作个批判,也好让我知道我在面向对象思想上的不足。但是,很可惜,一直没有获得过任何打击。可能以这种方式来获得对自己知识的检测本身就比较特别,不过还是没有人能够给我任何指点:不管是方向上,还是我知识的具体缺陷。

       下面就在我主要学习的东西上狂妄一下吧。

     面向对象语言

 我对面向对象思想学习的主要载体是C++,所以第一个就说一下C++一个引入了大量会在模板(其实非模板)中产生设计复杂性和表达复杂性的鸡肋:引用。

       引用在目前的绝大多数实现中(这个是从书上获得的信息,我自己用的编译器就那么一两种)都是不可以重复的,也就是说不可以存在引用的引用。

       说引用是鸡肋的原因(当然我们不可忽略其好处:加强了类型安全性,编译识别的错误更多了,因为指针是弱类型的):

 1           实现错误,不允许引用的引用,并且符合C++98年的标准。(我估计其实现就是用指针,因为及其相似,指针的指针和指针就是不同的)。

 2           实现的功能或说带来的好处,其实就是简化了一点点书写,因为用指针来书写几乎完全一样,稍多几个字符而已。当然,前面的类型安全也是一个好处。

 3           由于其实现是在很受限制,所以带来很多复杂性,甚至我觉得这个语法在很多地方带来了代码的冗余。当然,也有比较好的解决方案,即使在《C++设计新思维》(Modern C++ Design)中提到过的模板特化和偏特化等技术。

 综上原因,认为引用没有为C++语言设计的灵活性或可靠性带来什么有价值的东西,并且为详细设计及实现带来了复杂性,是C++语言的一个鸡肋。

     设计模式

       我这里拿最经典的设计模式方面的书籍作说明的背景。《设计模式》(Design Patterns)一书中,所有23个模式全部是讲如何使用继承、多态和重载来进行实践的。如果我记得不错的话,重载还只有Visitor模式用到了,来辅助实现双分派机制。

       首先声明,我并无否定《设计模式》价值的意思,因为这本书对我来说是非常有价值的,它告诉了我如果使用面向对象思想,至少是在详细设计阶段。

       其实,设计模式应该叫做惯用法。设计模式就是面向对象的本质在特定需求的情况下的灵活应用(《C++沉思录》(Ruminations on C++)说面向对象的本质就是继承和多态。)。不过,温伯格(Winberg)在《探索需求》(Exploring Requirement)一书中,在第12章提到项目的名称时,有这样的一个结论:“如果命名事务能够影响到最后产生的结果,以及在这些结果的过程中人们的行为是怎样的。”虽然设计模式不是一个项目,当时也符合这个规律,因为至少“设计模式”这个词语引起了我们的足够关注。

     软件工程

       软件工程发展到今天,我确定自己了解的不多。但是,好像主线就是快速原型加迭代递增。不管是什么方法,就算是早期的结构化编程,也开始融入这个主线。快速原型法、RUP、敏捷软件开发(XPAdaptive ProgrammingTest-Driven Programming)等等都是这个主线。

 鉴于我以上提出来的三种简介,我想至少可以说明我初步理解了C++和面向对象的思想吧。下面附上的文章是我对C++这个表面和实现都及其复杂的语言中一致东西的抽取。取名叫逻辑模型,并不是因为和逻辑挂上了什么关系,而是因为C++程序,不管是在设计上,还是在具体实现上,在我脑海中想象它的执行的时候就是这样执行的。

       附上这篇文章,还有这样几个目的:

 1           我至少请教过4位博导或博士,只有其中一位博导恢复不知道这篇文章的用处,另外的一个回复是垃圾论文,其余的都是杳无音信。并且其中一位博导是我面向对象入门时,讲了几个错误的定义。就是这几个错误的定义,让我一直觉得无法理解,在试图理解的过程中,一直向面向对象方面学习,反而到现在证明那几个定义是错误的。其实我最初写这篇准论文的原因也就是想说明那几个结论是错误的。目前还是觉得我的准论文有这样几个价值:

 1 除去了面向对象的实现细节,抽取出了其本质的内容;

 2 讲复杂的交互用最简单的模型表达了出来;

 3 对这个系统设想了很多应用,并且这些应用都是确实需要的。

 2     请大家执教其中的错误。为了保证不出现任何在网上杂乱的版本,请直接讲错误的地方告诉我。我将尽快在我的blog上修改,以保证版本的统一,并且任何想要的人都可以尽快获得尽可能正确的版本。

 3     有很多应用方面,都不是我一个人能做出来的。并且由于编译原理的只是有限,估计嵌入源码部分我要做的话,也是仿照最开始C++的前生C front一样,在此上做验证。所以,这里也请有能力的朋友来一起实现。

 4     这篇准论文拖到现在已经超过了半年了,未尝试在学术期刊发表。虽然初时有这种想法,但是师长们的回复让我实在觉得没有底气。但是,又不想我的想法没有人知道理解,所以决定还是在网络上公开,希望能找到知音朋友。


 封笔:由于老板方向不同,估计2年广泛的阅读和实践、及更早的前期打下的面向对象上的努力将全部封存。为了不留下太大的遗憾,以此作为结束,希望能给学习面向对象和C++的朋友们有所帮助和参考。

 

另外,我在给大家列一个我看过并且觉得是好书的列表,相信对很多学习面向对象、C++以及软件工程方向的朋友有所帮助。其实,到现在为止,觉得一本书是否对你称得上好书,关键得因素是:1 是否符合了你现在得水平;2 书本身得讲解风格是否符合你得理解习惯。这里还是斗胆列出数目及对应水平(注意我的学习习惯是从下向上,从具体到抽象,可能和很多人的学习习惯相反):

1     C陷阱与缺陷                      入门

2     高质量C/C++编程                     C/C++入门,收集了很多易犯错误,是很多考试的参考书,对内存讲的比较详细和透彻

3     CC++代码精粹               几乎设计所以易错误的细节,但是不设计设计方面

4     C++语言的设计与演化        C++语言中各个重要组成的来源及作用的了解

5     C++沉思录                         开始面向对象思考及很多使用技术

6     C++ STL                             STL肯定是要学的,至于选哪本书,看个人了

7     程序员修炼之道                  知道知识面狭窄的害处,实用技术及工具真是多

8     设计模式                            熟练面向对象思想

9     OOD启思录                       面向对象设计的原则和经验

10    人月神话                            开始理解软件构造为何如此之难

11    敏捷软件开发                     面向对象熟练,软件工程实用技术

12    C++设计新思维                  面向对象和泛型联合的灵活运用,有很多美妙而复杂的东西


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值