又一次新的开始
忙忙碌碌一周过去了,虽然辛苦,但觉得的确收获很多,从一个新的角度审视自己,从一个新的起点眺望未来。
首先总结一下这一周培训的收获,主要是在程序设计、程序调试以及服务器的设计。
1. UML
UML 主要包括九类图:
( 1 )类图, class diagram
( 2 )对象图, object diagram
( 3 )用例图, use case diagram ,需求分析用
( 4 )状态图, state diagram
( 5 )顺序图, sequence diagram ,类似协作图,更偏向程序员视角
( 6 )活动图, activity diagram ,类似状态图,更强调操作
( 7 )协作图, communication/collaboration diagram
( 8 )构件图, component diagram
( 9 )部署图, deployment diagram ,示意构件图中各个模块的具体部署方式
之所以提供这么多图,主要有两方面原因:
( 1 )提供多个视角观察系统,能够更全面理解系统
( 2 )便于不同风险承担人沟通
印象中 UML 真的是高高在上,令人望而生畏。其实应该从印象中去除它那金色的外衣,认真的去面对,即使短期内不能面面精通,也可以在实际开发中合理利用那些对设计有帮助的图,慢慢提高自己。
2. 多态
定义:同样的消息被不同的类型对象接收,导致不同的行为。消息指对类成员的调用,行为即具体实现。
形式:
(1) 重载多态,普通函数和类成员函数。
(2) 包含多态,函数覆盖带来的,不同类中的同名函数行为不同,通过虚函数实现。
(3) 强制多态,如 fVal = 1 + 20 。
(4) 参数多态,与模板相关,对模板参数,必须赋予实际类型才可以实例化。
其中,( 1 )( 3 )( 4 )是编译时多态,( 2 )是运行时多态。
3. 复用
(1) 软件体系结构复用 高层复用
(2) 设计模式 底层复用
(3) 泛型设计 算法复用
(4) C 运行时复用 代码复用
4. 泛型设计、模板与 STL 关系
(1) 泛型设计是将算法与数据结构分离的一种设计理念,可以实现算法复用,提高开发效率。
(2) 模板是 C++ 编程中实现泛型设计的工具
(3) STL 是利用模板实现泛型设计的一个实例
5. 内存泄露的检测与解决
分析内存分配点的回收情况,可以帮助检测内存泄露。
// 头文件
#define _CRTDBG_MAP_ALLOC
#include
#include
// 检测是否存在内存泄露
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
// 设计在某个内存分配点分配时中断,其实是设置 _crtBreakAlloc 的值
_CrtSetBreakAlloc(size_t pos)
// 指定在调用处中断
_CrtDbgBreak()
6. 利用 map 文件确定崩溃位置
( 1 ) VC6.0 下 map 文件的生成设置:
C++ -> /Zd ,
Link -> generate map , /:mapinfo: lines
( 2 )根据错误位置信息 abcd 和 map 文件确定崩溃位置(精确)
( a )找到导致崩溃的文件:找到地址比 0x0400abcd 小且最接近 0x0400abcd 函数
( b ) x = 0x0400abcd –0x04001000 ,根据 x 去文件处找到比 x 小且最接近 x 的值对映的行号,这就是崩溃的确切位置。
还存在许多其他定位方法,如根据 pdb 文件或者利用 windbg 。
7. 服务器框架设计
主要是先分层,在每个层次划分若干模块,模块间利用 Adaptor 削弱依赖。
培训过程中发现自己对知识的掌握还不够深入系统,对一些很有帮助的技巧知之甚少,以后在学习过程中应该重视与同事的交流,不只以应用为目的,还应该努力理解核心的概念及其思想!
另外,还应该及时总结学习心得。这里需要改进的就是资料的管理工作,尽量较少重复的无意义的功夫。