摘要: 用途:将抽象和实现分离,以方便抽象和实现各自扩充。没有想到较好的使用场景,待挖掘。 阅读全文
posted @ 2013-06-14 22:57 pjh123 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 需要理解以下问题:一、适配器分两种,分别是:1、类适配器:2、对象适配器: 两者的区别,各自的使用场景,如何使用;二、对于类适配器,适配器类,公有继承自接口,私有继承自“需要被适配的类”,原因是什么? 阅读全文
posted @ 2013-06-13 23:10 pjh123 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 孙中山说过:人分三种,上、中、下;上:先知先觉中:后知后觉下:不知不觉做为一个开发人员,当我们做程序开发时,不应该仅仅关注于当前要实现的功能,而应该有全局意识,从整体上把握程序的意义。先知者,能够积极思考,挑战既有思维和既有框架,勇于创新;后知后觉者,发现问题后,能够及时弥补,举一反三,后进后勇;不知不觉者,人云亦云,思维懒惰,循规蹈矩,被牵着鼻子走。同样的道理,也适用于软件开发:不谋万事者,不足谋一时;不谋全局者,不足谋一域。 阅读全文
posted @ 2013-06-13 23:01 pjh123 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 简述:一个类应该只有一个发生变化的原因。 这里,把类承担的“职责”,称之为“变化的原因”。一个类只承担一个职责,如果一个类承担了多个职责,那么引起这个类变化的原因就会有许多。有时候,无法确定以一个类中,是否包含多个职责,不知道是否需要进行职责分离。这时候有个原则:仅当泪真的发生变化时,进行分离才有意义。如果一个类有多个职责,但是在实际系统中,确定没有发生变化,那么不需要分离,这时候进行分离,只会造成不必要的复杂性臭味。即:如果没有变化的征兆,那么英勇SRP原则或者其它原则,都是不明智的。 阅读全文
posted @ 2012-04-10 18:15 pjh123 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 阐述:子类型(subtype)必须能够替换掉它们的基类型(basetype)先提出一个问题:正方形是不是一种特殊的长方形(IS - A关系)?先不要回答这个问题,看下面的分析。理解:LSP原则的一个例子,假如有个people的基类,两个字类man类和woman类,都继承于people类。那么针对people类的任何操作,比如fun吃饭、fun睡觉、fun走路,对于man类和woman类都成立。这个很好理解,不管是man还是woman,归根结底,还都是一个people。(一)正常思维如下例子:class CShape{public:CShape(void);~CShape(void);publi 阅读全文
posted @ 2012-04-07 16:29 pjh123 阅读(6136) 评论(0) 推荐(0) 编辑
摘要: 面向对象设计有五大原则,分别是:1、单一职责原则2、开放-封闭原则3、里氏替换原则4、依赖倒置原则5、接口隔离原则这五项原则,说起来很简单,大家都能理解。但是实际设计时,有没有考虑使用,能不能准确使用,不知道有多少人能做到。以下几篇文章,认真分析每项原则,挖掘原则隐藏的道理。 阅读全文
posted @ 2012-04-07 16:26 pjh123 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 1、什么是设计 设计不是一个结果,而是一个过程。 为什么这么说呢?如下:2、软件开发的本质是:需求总是在变化的,而且还会一直变下去。 将软件腐化、退变的原因归结于需求的变化,是一种推卸责任。---------------阅读 Copy程序的演化有感。3、程序开发者,或者团队,不是从一开始设计该模块时,就试图预测程序将如何变化。相反,团队是以最简单的方法编写该模块。仅当需求最终确实变化时,才修改模块的设计,使之对这种变化具有弹性。这时敏捷软件开发的灵魂所在。注意:(1)、“设计”这个行为介入的时机,不是从一开始,而是在需求发生变化的时候。(2)、还要说明的是,此次设计的目的,不仅是适应此次变化, 阅读全文
posted @ 2012-04-01 08:52 pjh123 阅读(822) 评论(0) 推荐(0) 编辑
摘要: 这篇是从baidu文库下载下来的,讲的很清楚,感谢原作者!网络字节序与主机字节序不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序最常见的有两种1. Little endian:将低序字节存储在起始地址2. Big endian:将高序字节存储在起始地址LE little-endian最符合人的思维的字节序地址低位存储值的低位地址高位存储值的高位怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说低位值小,就应该放在内存地址小的地方,也即内存地址低位反之,高位值就应该放在内存地址大的地方,也即内存地址高位BE big-endian最直观的字节序地址低位存储 阅读全文
posted @ 2011-05-31 09:19 pjh123 阅读(291) 评论(1) 推荐(0) 编辑
摘要: 总是强调初始化,却总是忘。今天做抓包程序,打开网卡驱动的时候,lpAdapter = PacketOpenAdapter(AdapterList[Open-1]);总是失败。幸亏有参考程序,发现AdapterList数组声明为全局比变量的时候没问题,但是声明成局部变量就有问题。原因如下:全局变量是在编译时就分配好空间的。这意味着全局变量的大小,会影响exe文件的大小。例如:char str[100000] = "helloworld"; //编译出来的exe大小为156K若改为:char str[1000000] = "helloworld"; //编译 阅读全文
posted @ 2011-05-28 15:45 pjh123 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 首先,要知道一个重要的概念,没有官方的C++编译器,也没有官方的C++ STLPort。我们总认为官方的东西最可靠,C++的官方,也就是ISO委员会,没有发表过任何编译器和库的实体,官方只负责指定标准。定标准比实现要麻烦很多,我是这么认为的。也就是说,根本没有所谓的官方的C++编译器的STL的存在(我用了好多的“的”),所有的编译器和STL都是由厂商自己实现。目前最好的C++编译器应该就是gcc和intel C++了吧,而大家最为认可的STL库就是SGI了。不过SGI专门为UNIX实现,移植有些困难,所有就有了STLPort这个SGI的多编译器移植版。到现在为止,STLPort的最新版本是ST 阅读全文
posted @ 2011-04-20 11:05 pjh123 阅读(284) 评论(0) 推荐(0) 编辑