1.算法与数据分离的代表:C++ STL
2.面向对象的缺点
面向对象的设计方法,本质上违背了单一职责原则。导致了系统永远也闭合不了。
最后导致一个类有太多的功能。面向对象设计方法,虽然看起来美,但大大增加了程序的复杂性。
如果用户设计小型软件还可以,但如果设计大型软件的话,这种方法导致了无边的复杂性。
而设计大型软件的的核心原则就是降低复杂性。
3.尽量编写可重入函数,独立函数。一个函数只依赖于它的参数。相同参数,出相同结果。
4.使用或设计适合的数据结构,来编写优雅的算法。
5.软件开发的三大控制
质量控制 进度控制 投资控制。
6.项目失败的标志事件
扩展越来越难,稳定性差, bug越来越多,越来越难修复。效率不满足要求。
6.一些扩展方法
(1)"任何时候,用Qt编辑就是写新的组件"
(2)是否显示某图形对象:
面向对象方法:得到图形对象,改变这个对象的状态
非对象方法:得到Cmd,发出命令字符串。
(3)Windows的扩展机制之SendMessage.本质来是通过遵守协议来扩展功能。
使用SendMessage传递一个数据结构。被调用方也知道这个数据结构。
(4)扩展方法之一:编写子类和重写虚函数。
(5)大型程序的扩展方法 :提供二次开发功能。添加功能就是添加 dll。而不用改动其它dll。
7.简单使用C++
尽量不使用模板。只使用单继承,不使用多继承,虚继承。
头文件件及接口文件中尽量不使用STL
8.Qt风格C++ API设计
(1)API是给程序员用的。
(2)我们坚信API应该是最小化且完整的,拥有清晰且简单的语义,直觉化,容易记忆,并且引导人写出易读的代码。
(3)最小化的API是指一个类尽可能只拥有最少的公开成员且尽可能拥有最少的类。我的理解:减少用户调用API出错机率,一步便可使用某功能。
QSlider *slider = new QSlider(12, 18, 3, 13, Qt::Vertical, 0, "volume"); //远比下面那样难读(甚至难写): QSlider *slider = new QSlider(Qt::Vertical); slider->setRange(12, 18); slider->setPageStep(3); slider->setValue(13); slider->setObjectName("volume");(4)使用枚举值不需要类型信息。枚举值起个太过常用的名字危害很大。一个用于命名的枚举值的指导思想是,在每个枚举值里,至少重复一个枚举类型名中的元素。
(6)如果你不能找到一个精确的名字,这常常说明这个条目不应该存在。
9.大型桌面程序的基本功能设计问题
(1)任何大型程序的核心问题都是性能问题。
(2)没有数据库支持 根本不可能设计出大型桌面程序。
(3)持久化问题:持久化, 版本兼容问题,即新版本能打开旧版本的文件。增量保存问题。
(4)undoredo:方案之一,Command模式。
(5)扩展功能问题:以二次开发形式,扩展功能。
10.2DCAD难点不在于数学算法。而在于状态管理和效率。要以选择功能为核心。
11.预算软件的核心技术是3D布尔技术。