- 论坛徽章:
- 8
|
本帖最后由 shan_ghost 于 2013-01-10 17:12 编辑
captivated 发表于 2013-01-10 12:49 ![]()
C++能抽象, C一样也能抽象, 所以, 我能否认为, 你想说的真实观点是, 某种程度上, C++的抽象能力比C好[抽象事物的工具比C多...]?
完全不是。
我的侧重点是“创建一个新的语义层”。
举例来说,游戏引擎可能会创建一个精灵/屏幕管理层,把动画、声音、碰撞检测等等统统抽象为针对精灵的某种操作(而不是神马类、判断、回调函数)。之后的设计,全都是针对精灵而不是C/C++/JAVA而做的。
类似的,GUI编程会抽象出窗口/事件语义层。
这些新的语义层本身是完备的、足以完成领域内所有需求的。使用者/维护者只需了解这个新的语义层即可。
至于C/C++呢,它们(以及python ruby java等等)也创建了一个特定的语义层。这个语义层是用来表述你为你的业务所创建的语义层的……
所以,想把程序写清楚,先决条件就是:必须先定义清楚自己的语义层,然后找一个和自己设计的语义层最“搭”的语言/库,把这个语义层实现出来。
对一些大的、复杂的项目,可能需要创建多个语义层:比如GDI层、MVC层、业务逻辑层、界面层。
只有每个语义层都清清亮亮,最终的软件才能条理清楚。
相反,流行的那些所谓的OO、所谓的设计模式,实质上是混淆了编程语言创建的语义层、语言对用户自定义语义层的支持,和用户自己的业务语义层本身。
一旦语义层出现含糊,自然导致软件实现的含糊甚至失败。
这种含糊常常来自于对OO、泛型、设计模式等等的误解。这就导致很多java/c++等支持OO的语言的使用者更容易写出扯淡的代码(与宣传相反)。且一个语言提供的语义越多,它就越容易被误用(于是linus发飙了)。
但,如果你真的能深刻理解自己的业务、并抽象出脱离语言的业务语义层,你自然就不会为特定的语言特性所累。 |
|