DJ's c++ blog

c++学习历程

常用链接

统计

最新评论

2009年10月14日 #

啃书笔记:设计模式

最近在啃的书,都是大部头,不方便随身携带.于是,就在包里丢了本<设计模式解析>,以便平时没事干的时候看.

可是由于看了的很多东西都不能立刻投入到实用中,久而久之就很容易忘记.(effective那两本就是这样).

于是就想在读书的同时写写一些关键点以及理解,权当加深记忆,还有锻炼表达能力.

这个坑就献给<设计模式解析>,<设计模式>这两书吧.前者是听到网上评论说不错,读了再读<设计模式>会理解的更好,于是就入了.现在在读.

由于这是刚看刚写,如果有不正确的,希望赐教,见笑啦.
======================================================================

内聚性指的是类内部组成部分之间相互联系的紧密程度
耦合性指的是一个类与其它类之间联系的紧密程度

封装变化
用类的聚合代替继承

Facade

"为子系统中的一组接口提供一个统一的接口.Facade模式定义了一个更高层的接口,使子系统更加容易使用"

Facade模式是提供一个新的,更加简单以及符合实用的接口,来使用一个复杂系统的子集.
我写的那个俄罗斯方块中的Console类,貌似就是符合Facade模式的,需要用的控制台API(占总数的一小部分)封装到Consol类中,使得控制方块的显示改变更加容易.


Adapter

"将一个类的接口转换成客户希望的另外一个接口.Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作."

1.例如抽象类有接口int foo(int a,int b,bool c),其派生类A中的foo函数已经由另外一个函数实现,但是函数foo2只需要两个参数,则可以如下复用代码.
int foo(int a,int b,bool c)
{
   return foo2(a,b);
}

2.如果虚基类Shape有多个派生类,如Point,Square,Circle等.但是其中一个派生类已有相似实现,如ShapeCircle,但是ShapeCircle的接口又与Shape不一致.则可在Circle中包含一个类型为ShapeCircle的数据成员,并在接口的实现中运用1,以此复用代码.


Strategy

"定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.Strategy模式使算法可独立于使用它的客户而变化."

(话说,这句话真是看的人云里雾里的...)

一个类A中,拥有许多的成员函数,这些函数都需要根据一些状态进行不同操作.如果将A当作基类直接写相应状态的派生类时,随着状态的复杂程度增加,则会导致继承层次过大,特化版本过多.
Strategy模式则是将类A中的函数封装成虚基类,然后通过继承A中的类成员以应对不同的状态.


Bridge

"将抽象与其实现解耦,使它们都可以独立地变化."

一个类A需要调用不同的实现做不同的事情,如果用继承去解决(用某种实现实现某种事情则为1个派生类),随着不同的实现(m)和不同的事情(n)的数量增长,会造成派生类数量的爆炸性增长(m*n).Bridge模式是把实现抽象,然后在A中持有实现的句柄,再通过动态创建做事情(m+n).


Abstract Factor

"为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类."

@_@ 这个觉得定义的挺明确的,刚看完,还没怎么思考过,有空再补写...

to be continue...

posted @ 2009-10-14 20:54 DJ 阅读(152) | 评论 (0)编辑 收藏

2009年9月14日 #

五子棋 静态AI版

点我下载

源码乱的很,没注释,就不放上来了.

开学的时候,每次复习数分就觉得恶心,一恶心就想编程,于是2天弄出了这个,再加上几天的杀虫和微调(弄那么久是因为我不会玩五子棋..)

本来都不敢拿出来献丑.后面想,反正这个blog就是要来摆自己的编程历程中的东西的嘛,也就弄上来了.

基于静态判断,如上所说,我不会玩五子棋,甚至是打败现在这个版本都要费点时间.所以这判断可能会有不合理的地方,如果有心人玩过后给与指点,则非常感谢.

之前设想的进阶AI实现方法,查阅一些基本资料过后,才知道叫作极大极小值算法&剪枝优化.没看任何详细资料自己实现..应该得花点时间.可惜偏偏这段时间要较忙,要割舍编程时间给别的方面,所以没那么快能完工.

posted @ 2009-09-14 23:42 DJ 阅读(170) | 评论 (0)编辑 收藏

2009年8月18日 #

俄罗斯方块

控制台下的俄罗斯方块.

exe/Files/scut-dj/TetrisOnConsole.rar
代码/Files/scut-dj/TetrisCode.rar
//edit 090917 自己暑假烧饼 把简单问题复杂化了 所以消行出现了bug..


因为在上学期末,有几个同学来找我说写一个MFC下的俄罗斯方块,因为考虑到自己对于MFC不是很熟,想顺便学学MFC,就答应了.
本来打算回到家后就写一个在控制台可以运行的出来,结果一回到家就开始学车,每天都蒸到傻,就没有写了...

然后最近眼看要开学了,不写不行了..于是就开始写了,前两天写了一个初始版本,没有调用Windows的console的API,只用刷屏(cls)的方式来下落的..看的我那个眼瞎啊...后面得知有函数可以弄的,就看鸟语版的MSDN看了一下午,弄清楚了,开始改造..今天终于完工.

前面说了要写MFC的,为啥写了个控制台的呢?那是因为我没有看多少MFC啊....怨念...
7月就断断续续的看完了编程珠玑,后面的习题都没做多少,8月终于过了桩考之后时间才充裕了,开始看<算法导论>,然后再实现了些算法,写了个链表类什么的.就到了今天了.时间过的真快..悲剧啊.

继续努力..

posted @ 2009-08-18 15:22 DJ 阅读(337) | 评论 (3)编辑 收藏

2009年6月18日 #

09.06.18-最近&暑假计划

说来惭愧,之前给自己订下的一堆目标,并没有实现多少个.

一个月前说过自己的效率低整天浪费时间...结果一个月后看回来,做的到的时间也就是10天.

没什么成果,这个月其实只花了5天左右编东西,其余时间也只是在看书然后写些小东西实践实践而已.

编的那东西其实就是c++的大作业,MFC写的计算器.

内核我写的,界面舍友弄的,我改了微小部分.





==================================================================

本来自己不好意思把计划写出来的,怕在这高手如云的地方遭到嘲笑.

可是现在想想如果写出来反而能激励自己去完成吧?

1.暑假打算看<编程珠玑I&II>&<算法导论>&<算法引论>&<设计模式解析>&<MFC Windows 程序设计>

我不知道看什么书..我手头上有这些书就先看着了.算法导论和MFC那本都是大部头,不过MFC我已经看过一些了.算法导论估计看不完,看一部分吧.

2.程序的话打算按照何咏师兄的建议去实现一些STL的功能(auto_ptr,string,vector等,当然应该比较粗糙),实在惭愧,现在才来做.

还有试着用MFC完成一个账本.为什么要做这个奇怪的东西呢?应为记得以前跟我女朋友说过一年之内要做一个给她用.很不幸,我食言了.

3.调整生物钟,尽量在1点前睡觉!

所以,要努力啦!

===================================================================

当然,现在主要还是要忙着期末考,加油啦!

posted @ 2009-06-18 16:30 DJ 阅读(129) | 评论 (0)编辑 收藏

2009年5月11日 #

09.05.11-最近

最近似乎都没有怎样的好好编程和看书,五一回家的那3天就看了看<影响力>.
然后回来的劳动周过的更是浑浑噩噩.老被一些七零八乱的事情把时间打断.
我总是习惯一下子拿出连续的5.6小时来看书或者编程,那样子看一个小时书然后去弄点别的事情然后又回来继续看对我来说真是困难.

惭愧,最近几乎没有编程.
就是之前把自己写的长整数高精度运算和四则运算表达式整合在一起了,应该是耦合度没那么高,稍微改2行代码就弄在一起了,然后解决了几个bug之后就没再弄了.
用还用的了,只是效率不佳,1/3保留1000位小数要算个几秒...然后设计的也恶心吧.又是类又是函数的,乱七八糟,哪天再来大改一次吧.

因为要应付c++的大作业,所以现在在看<深入浅出MFC>.我没有半点windows编程经验..头晕脑胀的看了350多页,也只是有个模模糊糊的概念.

更糟糕的是没有动手实践.这样真的会变成看了和没看一样.

哎.感觉这段时间实在是荒废.都没有做些什么东西.那天何咏师兄来询问都感觉极其不好意思了..

努力努力.

争取这个月能把书过一遍,自己动手做些MFC的东西,然后再重看一次讲MFC框架的部分.

然后下个月就看看写写STL的东西啦.

posted @ 2009-05-11 14:22 DJ 阅读(148) | 评论 (1)编辑 收藏

2009年4月20日 #

四则运算语法分析

/Files/scut-dj/parsing.rar



刚写好,也没有改啥了,只支持整数不支持小数,然后头文件组织的也很恶心..
类设计的也差..没有封装数据..

我是看了何咏师兄的文章才写的出来的..http://www.graphixer.com.cn/ShowWorks.asp?Type=1&ID=98

词法分析是自己写的..语法分析自己写了发现有些bug,然后再参考一下..弄下弄下变得和教程上一样..罪过罪过..
水平很有限啊.

posted @ 2009-04-20 22:49 DJ 阅读(509) | 评论 (2)编辑 收藏

=v= 开博客啦.

水平很菜.

本来是把自己写的一些弱智程序的c++代码丢到QQ空间上面去的.

后面发现不是很合适,和平时一些牢骚堆在一起,显得比较奇怪.


于是开始专门开blog吧.

我还属于菜鸟..所以目前是肯定不可能有啥有意义的内容的了.

就写写平时的学习历程咯.


=================================================================

最近与牛逼的何咏师兄取得联系,然后问了一些现在该怎么学习和提高自己能力的方法.

然后他就建议我先做一个四则运算的语法分析器,然后写一些自己的库,例如string,vector,list什么的..

所以最近就在研究四则运算的语法分析咯.

因为之前不知道词法分析结果的数据结构是怎样的,于是在看懂了那篇教程后,虽然明白了原理,可是在实现上却遇到很多困难.

然后参加了何咏师兄开的一个SIG后才恍然大悟..

不过后面几天又没时间了,所以做出了一个词法分析就没有继续了.今晚就来尝试下实现咯

不过写到一半却发现自己理解的可能还不够透彻,总要看一下教程才写的下去,不然总是脑子里面有构想却实现不了的感觉..

然后这样的后果就是写出来的东西基本和教程上一样.......

哎.

然后在SIG上也看到大名鼎鼎的vczh 陈梓翰师兄..不过没有交流过..太敬畏了于是当神膜拜..失策失策..

===================================================================

然后星期六去听了那个软件设计的讲座...

第一个师兄实在让人郁闷...用一种半夜电台情感节目主播的腔调来讲东西..然后又烦,整天来反问,设问..节奏之慢内容之无聊(对我来说)让人昏昏欲睡..

然后第二个个师兄讲的东西基本上可以用一句话概括."请到图书馆借阅<解析极限编程---拥抱变化>"

第三个就是何咏师兄啦.他主要讲了自己对于技术的一类看法.其实我是很赞同的.~

所以.自己也要努力啦!

posted @ 2009-04-20 19:15 DJ 阅读(294) | 评论 (6)编辑 收藏

仅列出标题