闲谈c语言与抽象、封装
以下文字是我的思考,可能有许多不当之处,希望各位指出指正。
c语言(特指windows下)的出现,我想大部分是因为汇编语言的抽象能力的不足。c语言对用计算机来解决问题提供了更高的抽象,我们很容易通过很简单的一两句代码来实现汇编下面需要大段代码才能实现的功能,同样也不需要考虑内存寄存器等物理设备。其实纵观程序语言、库发展的历程,很容易得出这么一个结论:正式因为抽象(或者对不同领域的抽象)才产生了许多不同的语言和库。
c之于汇编(winapi),c运行时正是通过包装winapi来实现的。
c++之于c,c++中的通过引入类,模板技术在改变程序开发方式的同时,也提供了更高的上层抽象。在c++的世界里,程序员不需要额外的努力就可以得到一个高内聚的实体,不必担心不小心对类私有变量的更改。其它的一些重要的概念,重载,虚函数莫不是为之服务。
mfc正是通过对api面向对象的抽象而产生的。
stl是对算法和数据结构的模板化而形成的库。
wtl,atl我认为都可以看做使用模板对api的封装和抽象。
写完之后我发现我好想没说明白什么问题?
[解决办法]
所谓的C++的新技术在C语言上也是能够实现的。只是会麻烦一点儿而已。
[解决办法]
呵呵,如果说模糊的话,做得比命令式语言好的当然就是函数式编程语言了,基本上抽象掉了Von 诺依曼的计算机体系。
[解决办法]
看完楼主的思考,下面是我的一点想法:
从低级语言向高级语言发展,其中体现了冯诺依曼的存储程序理论,程序存储在存储器中,控制器需要时从控制器调用程序,
而高级语言无不是以强大的库作支撑,这个库就相当于存储器,而程序员(相当于控制器)编程时若有需要只需从这些库中调用包装好的成品,减少了大量的具体工作,所以程序员现在盛行“拿来主义”。
但无论高级语言怎么抽象,最后都要变成实实在在的计算机认识的二进制,高级抽象化的意义只是迎合人的思维模式方法。最后还是突破不了冯诺依曼体系。
个人一时浅见。
[解决办法]
看得出LZ是经过了认真思考,说得很有道理。其实宏观来看,抽象、封装是计算机科学中最重要的思想之一,任何现实中的问题,都要首先抽象成计算机可识别的模型,运算数据抽象成各种数据结构;处理逻辑抽象成算法;自然语言描述的伪代码抽象成汇编或高级语言;二维矩阵结构抽象成数据库关系模型。。。
说起封装,C++自然不用说,C中的函数、模块、各种库、组件,数据库中的函数、存储过程、触发器、SQL引擎等也无不体现了封装的思想
[解决办法]
这个 c++编程思想里面好像说过啊 c是对汇编的抽象 c++是对c的抽象 。。。。
[解决办法]
个人感觉
如果选择用C做东西
那么就要把C当汇编来使用
因为如果不了解硬件和底层的东西
用C只是用了它的语法
C的精髓还是在于它的“贴近硬件”
[解决办法]
新的编程技术的及编程语言的出现都是为了解决新近遇到的问题,
这就像我们的生活一样,自行车,摩托车,汽车,
都是对功能,安全,舒适的的不断追求而出现的,而挖掘机,是为了挖土而生产的.
其实抽象的越多,这东西就会越复杂.
[解决办法]
区别?
语言实现机制掌握了,什么语言都一个理!
[解决办法]
看看《POSA》 (Pattern Oriented Software Architecture) 系列, 《设计模式》,《设计模式解析》,抽象层次不同,抽象本身一致。重要的是思想,而不是工具或者语言本身。
[解决办法]
软件实际上都是为了抽象而存在的
比如说操作系统
抽象的概念有进程、资源、文件等等
其实底层的硬件不知道这些概念是什么
[解决办法]
推荐去读读《代码大全2》
里面对抽象、封装、信息隐藏等有很好很实际的描述;
话说在C语言区很少看见此类软件结构、构建方面的讨论,基本上都是语法算法方面的。。。。。
[解决办法]
看完《C++语言的设计与演化》这本书后,你就不会这样想了,不要天马行空的想了。
[解决办法]
建议楼主有机会读一下 代码大全2
作者的一句话比较好
应当深入一门语言去编程
语言只是工具
而编程更重要的是思想
不要被工具束缚
而要使用工具去实现自己的思想
无论是什么语言
最后都会被翻译成2进制流
所以说,代码不是给机器看的,而是给人看的
如何编程,首先要考虑的问题就是如何给人看代码