|
|
发表于 2008-10-2 05:33:00
|
显示全部楼层
Re:面向对象语言的语义学中的意味不明之处,剧本中常出现
oo的优势是什么?代码重用吗?不是。用函数也可以代码重用。剪切粘帖也可以代码重用。
oo的优势,是在于它有足够的手段,去强迫或者诱导开发者写出依赖关系更简单的代码。oo的优势,不在于加法,而在于减法。它提供了足够的约束手段。
封装,是重用的基本手段。封装之后,隐藏了实现的细节,通过减少使用者对细节的访问范围,达到了简化依赖关系的目的。
继承,从代码重用的角度来说,继承并不重要。剪切粘帖也可以实现跟继承同样的效果。然而,它通过减少了软件的重复代码,达到了维护更加简单的目的,减少了冗余。更重要的意义,在于接口的继承,接口的继承,简化了软件组件之间的依赖关系。
多态,oo最复杂最巧妙的部分。面向对多个实现的共同特性的抽象,面向接口设计,是多态的本质。而多态又与类工厂息息相关。如果说原来的代码是n个接口a的实现类和m个接口b的实现类的关系,抽象之前,复杂度是n*m,抽象之后,是n+m。oo的本质,在于对复杂问题,它可以快速收敛其复杂度。
没有一个gc,就无法自如的应用类工厂,所以就无法真正应用多数设计模式。因为无法隐藏对象的创建过程,从而真正解耦,所以,c++的oo,其实是多此一举。真正的oo,还是要用c#这样的语言才能实现。
c语言不能oo吗?不,它也可以oo。定义一个结构,加上一些函数指针,它完全可以模拟oo的行为。它与oo语言的区别,在于,第一,它没有足够的减法,约束开发者写出良好风格的代码。第二,它没有gc。开发gc是高难度的任务,大部分公司都没有这样的实力。第三,设计之初,它就没有考虑到字符串的问题(不要小看这个问题,想想那么多溢出是怎么来的),第四,它的编译速度太慢,依赖关系过于复杂。这些都妨碍它成为一个好的开发工具。第五,它和c++,对回调的支持都不够好。回调和正常的调用,本来是一样重要。对于类库开发来说,回调应该是极为常用的。但是,由于c和c++都没有语言层的支持,所以回调的运用远远不够。这就是工具影响了代码风格,而代码风格,影响了架构。
C语言,是编程语言早期面向硬件的产物,它的目标,仅仅在于解决具体问题。c语言,其实仅仅是汇编的升级版。而c#这样的语言,是编程发展到一定阶段,面向巨大的工作量和复杂度的产物,它的目标,在于简化问题,解决复杂问题。至于c++,很抱歉,它是个中间产物,在c#出现之后,它已经没有必要存在下去了。驱动开发和操作系统开发有c,而应用开发有c#,c++不再有什么优势。它现在的应用,只不过是一种惯性。从delphi和bcb的衰落,就可以看出这一点,市场不再需要这种类型的语言了,而且它也没有能力再做出什么创新。本身它就已经够麻烦了。倒是d语言,有接班的希望,可惜没有大公司的支持。
将来的趋势,可能是gc集成到操作系统的内核,从而简化操作系统和驱动程序的开发。未来的操作系统,可能就剩下一些算法,一切都是在抽象的基础上进行的。从现在嵌入式操作系统的演变来看,有这样的趋势。比如,jnode,.net macro framework,都是嵌入式操作系统的例子,从系统内核中就集成gc,抽象机器的特性,便于操作系统移植到不同的平台。
|
|