Hunter的大杂烩 技术学习笔记

2009-02-25

【转】61条面向对象设计的经验原

Filed under: C++ — hunter @ 3:53 pm

61条面向对象设计的经验原

thurJ.Riel
   (1)
所有数据都应该隐藏在所在的类的内部。p13   (2)
类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。p15   (3)
尽量减少类的协议中的消息。p16   (4)
实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。p16   (5)
不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。p17
如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。   (6)
不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。p17   (7)
类之间应该零耦合,或者只有导出耦合关系。也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。p18   (8)
类应该只表示一个关键抽象。p19
包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响.   (9)
把相关的数据和行为集中放置。p19
设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。这种类型的行为暗示着这条经验原则被违反了。   (10)
把不相关的信息放在另一个类中(也即:互不沟通的行为)。p19
朝着稳定的方向进行依赖.   (11)
确保你为之建模的抽象概念是类,而不只是对象扮演的角色。p23   (12)
在水平方向上尽可能统一地分布系统功能,也即:按照设计,顶层类应当统一地共享工作。p30   (13)
在你的系统中不要创建全能类/对象。对名字包含Driver、Manager、System、Susystem的类要特别多加小心。p30
规划一个接口而不是实现一个接口。   (14)
对公共接口中定义了大量访问方法的类多加小心。大量访问方法意味着相关数据和行为没有集中存放。p30   (15)
对包含太多互不沟通的行为的类多加小心。p31

(more…)

2008-12-14

.NET也支持契约编程了!

Filed under: C++,技术话题 — hunter @ 2:27 am

from:http://www.infoq.com/cn/news/2008/12/Code-Contracts

 

国内自从05/06年左右引入契约编程的概念之后,就一直缺乏很强的关注,而这个概念在国外其实已经潜移默化为基本设计概念了

关于异常、断言、防御性编程比较好的一篇文章是:

http://www.cnblogs.com/hBifTs/articles/9293.html

  (more…)

2008-11-13

关于c++程序编译的过程原理详解[转]

Filed under: C++,技术话题 — hunter @ 10:38 pm

原始网址:http://zengzn.blogspot.com/2008/02/boostregexhpp-lnk2005.html

加入boost/regex.hpp库后静态编译通不过的问题–LNK2005 产生原因及解决方法

许多Visual C++的使用者都碰到过LNK2005:symbol already defined和LNK1169:one or more multiply defined symbols found这样的链接错误,而且通常是在使用第三方库时遇到的。对于这个问题,有的朋友可能不知其然,而有的朋友可能知其然却不知其所以然,那么本文就试图为大家彻底解开关于它的种种疑惑。

大家都知道,从C/C++源程序到可执行文件要经历两个阶段:(1)编译器将源文件编译成汇编代码,然后由汇编器(assembler)翻译成机器指令 (再加上其它相关信息)后输出到一个个目标文件(object file,VC的编译器编译出的目标文件默认的后缀名是.obj)中;(2)链接器(linker)将一个个的目标文件(或许还会有若干程序库)链接在一起生成一个完整的可执行文件。

编译器编译源文件时会把源文件的全局符号(global symbol)分成强(strong)和弱(weak)两类传给汇编器,而随后汇编器则将强弱信息编码并保存在目标文件的符号表中。那么何谓强弱呢?编译器认为函数与初始化了的全局变量都是强符号,而未初始化的全局变量则成了弱符号。比如有这么个源文件:

extern int errorno;
int buf[2] = {1,2};
int *p;

int main()
{
return 0;
}

其中main、buf是强符号,p是弱符号,而errorno则非强非弱,因为它只是个外部变量的使用声明。

有了强弱符号的概念,我们就可以看看链接器是如何处理与选择被多次定义过的全局符号:

规则1: 不允许强符号被多次定义(即不同的目标文件中不能有同名的强符号);

规则2: 如果一个符号在某个目标文件中是强符号,在其它文件中都是弱符号,那么选择强符号;

规则3: 如果一个符号在所有目标文件中都是弱符号,那么选择其中任意一个;

(more…)

2008-04-05

股票数据格式大全

Filed under: C++,技术话题 — hunter @ 2:08 am

看到一个牛人的blog,收集了大部分炒股软件的数据格式大全,真是为人民服务啊!

http://alantop.5166.info/gpDataFormat.html (http://www.cppblog.com/alantop/)

另外一个blog:

http://www.cnblogs.com/same/articles/722400.html

顺便帖上同花顺的格式,对俺比较有用:)

如何编程实现解析同花顺日线数据格式

(more…)

2007-12-14

google template build under g++ 2.95

Filed under: C++,Linux — hunter @ 2:49 pm

几个小patch,用来解决在2.95下编译ctemplate的问题 

1. template_dictionary.cc

 line 306

  // modify by hunter: slk8 dosn’t have va_copy function
#if 0
  va_list backup_ap;
  va_copy(backup_ap, ap);
  int result = vsnprintf(space, sizeof(space), format, backup_ap);
  va_end(backup_ap);
#else
  int result = vsnprintf(space, sizeof(space), format, ap);
#endif
 line 332

(more…)

Older Posts »

Powered by WordPress