现在的位置: 首页 > 综合 > 正文

编程感言

2018年02月16日 ⁄ 综合 ⁄ 共 1451字 ⁄ 字号 评论关闭

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)使用枚举值不需要类型信息。枚举值起个太过常用的名字危害很大。一个用于命名的枚举值的指导思想是,在每个枚举值里,至少重复一个枚举类型名中的元素。
        enum Corner { TopLeftCorner, BottomRightCorner, ... };
  (5)在奇趣,我们倾向使用指针,因为这让代码更易读。
       color.getHsv(&h, &s, &v);
       color.getHsv(h, s, v);

  (6)如果你不能找到一个精确的名字,这常常说明这个条目不应该存在。

9.大型桌面程序的基本功能设计问题

  (1)任何大型程序的核心问题都是性能问题。

  (2)没有数据库支持 根本不可能设计出大型桌面程序。

  (3)持久化问题:持久化, 版本兼容问题,即新版本能打开旧版本的文件。增量保存问题。

  (4)undoredo:方案之一,Command模式。

  (5)扩展功能问题:以二次开发形式,扩展功能。

10.2DCAD难点不在于数学算法。而在于状态管理和效率。要以选择功能为核心。

11.预算软件的核心技术是3D布尔技术。 

抱歉!评论已关闭.