云风的blog中的一些观点

来源:互联网 发布:东芝181驱动端口 编辑:程序博客网 时间:2024/05/21 20:16

(1)

谈及 GUI ,我推荐大家读读 IUP 的代码,或许你会喜欢上它。在折腾 GUI 的东东时,在 QT/GTK/WsWidgets 等等之外,又可以多一个选择。它的接口设计采用了一些原则,使得足够简洁。而我在经历了太多次的重构 GUI 模块后,才领悟了点点东西。之后,发现了 IUP ,看到了许多我最终认同的东西,感慨颇多。

http://www.tecgraf.puc-rio.br/iup/

btw, 真的,boost::python 或是 LuaBind 这样的,利用一大套代码,让机器转换繁杂的接口,从一个语言的接口转换另一个语言的方式,最终都是权益之计。把接口设计简洁方是正道。

(2)

为什么说语言重要也不重要,算法和数据结构重要也不重要。对要解决的问题的领域的理解很重要(即明白真正要做什么)。理解了,我们才可以用面向对象,用模式去套问题;可理解了,我们又不真的需要这些繁杂的抽象。

(3)

实现一个 GUI 系统(或是一个 3d 世界)。需要实现一个功能——判断鼠标点选到了什么物件。这里,每个物件提供了一个方法,可以判断当前鼠标的位置有没有捕获(点到)它。

这时最简单的时候方法是:把所有可以被点选的物件都放在一个容器中,每次遍历这个容器,查看是哪一个物件捕获了鼠标。

我们并不需要可被点选的物件都是同类,只需要要求从容器中可以以统一方法访问每个元素的是否捕获住鼠标的这个判定方法。

(4)

在没有 GC 的环境中,AddRef 和 Release 相当于让每个对象自己来实现 RC (引用计数)的自动化管理。

(5)

C++ 提供了对面向对象的支持,但 C++ 所用的方法(虚表、继承、多重继承、虚继承、等等)只是一种在 C 已有的模型上,追加的一种高效的实现方式而已。它不一定是最高效的方式(虽然很少能做到更高效),也不是最灵活的方式(可以考察 Ruby )。我想,只用 C++ 写程序的人最容易犯的错误就是认为 C++ 对面向对象的支持的实现本身就是面向对象的本质。如果真的理解了面向对象,在特定需求下可以做出特定的结构来实现它。语言就已经是次要的东西了。

Kim4Apple 

我喜欢C语言是喜欢它的精巧灵活,最重要的一个原因,是使用C写的代码,给人一种可以掌握全局的感觉,完全在掌握范围之内,即使有错,需要重构,也是在平面内重构。不像C++的类层次结构带来的时立体的重构,无疑,平面比空间更容易掌握。”

(6)

鼠标选取的例子的本质需求是:可以需要让不同的对象可以用统一的途径去检查是否捕获住鼠标。只要满足了这个,就可以把这些对象放在一起来处理。这就是 OO 在这个问题上作用。

(7)

当一个对象被很多地方引用的时候,通常我们会给出引用记数,当记数减到 0 的时候就删除,这是个看似完美的解决方案。但是,有多少地方会记得解除引用呢?借助 C++ 的语法糖,可以自动的完成这些工作。长期的引用关系,可以在构造和析构的时候操作;短期的引用,比如就在一个函数内获得对象,操作完毕后马上解除引用。这个时候,可以通过返回几个 warpper 对象来完成

(8)

对于全局所有资源的管理,我个人的主张是一定要考虑采用树结构,而不是线性表。因为扫描所有资源这种操作会比较常见。比如以上提到的扫描所有资源,删除 mark 过的对象。采用树结构的好处是,mark 的时候,可以同时 mark 父节点(对父节点计数)。这样,任何资源树上的任何一支都可以通过 root 知道是否需要遍历分支。通常,删除这种操作并不频繁,通过检查根节点一次就可以忽略整个遍历过程了。

而且删除操作往往是可以并行的。为了在删除过程不影响资源树的结构,我们还可以只是对资源树上的节点置空,再统一压缩掉空指针。这样就可以获得最大效率的删除操作,不至于因为定期删除资源而使服务停顿过久。








0 0
原创粉丝点击