163博客迁移!
面向对象:
整个世界是由不同的
对象组成的,花、草、人、动物等等,所有的这些
对象是有其特定的
固有的属性,例如:人有很多的行为属性(
走、跑、跳..)、心里属性(
哭、笑...),我们将该
对象的这种
固有的、稳定的特征找出来,归纳为一系列的
方法,例如就是前面提到的人的行为方法:
描述怎么走的方法、描述怎么跑的方法、描述怎么跳的方法等等,这种思想,我们就称之为
面向对象。
在软件工程的世界中,编写代码从早先的
数据结构编程(单纯只是实现某些功能
),到高级语言支持
面向对象编程(C++支持面向对象开始引入哲学概念,特别开始强调
对象的复用,例如:有些人开发了一套对象的方法,别人就可以直接复用这些行为方法,但是还不是很方便,因为还要引用很多别人的代码,语言要相同,环境要相同,要合起来编译之类的,就和你准备造一个自己的房子(写你的软件)一样,而对象就是一个个砖块(用了别人的对象方法),你这个房子搭建的过程中,如果厂家有了更好的砖块,你要麻烦的去更新的你砖块(重新更新对象,编译,集成), 差不多就这个意思了!),再到
模块化对象编程(应该这个是更好的一种思想,也即,将所有的功能都进行
实体模块化,也就是说,你直接提供一个可以直接使用的对象给别人,别人不用做任何集成的事情,拿来就可以直接用,然后有一些接口给用户,本对象有哪些方法以供调用,也可以理解为你可以参考对象给的接口,给对象发送一些指令,让对象直接执行,和机器人是一个比较类似的概念了
),这个应该是一个趋势。
Com组件:
那么我所理解的
COM组件,就是具备
模块化对象的思想这么一个东西(虽然思想很先进,但是现实情况不是很好,因为目前只在windows上用,按理说这么高级的思想大家都应该一起参与,这是为什么?下面是本人查看资料后的一个入门的理解。)。
COM首先是一个
对象,它是一个
二进制的对象,它可以是进程内的(windows上一般表现为DLL),也可以是独立进程的(windows上一般表现为exe),为什么COM目前只在windows上有,我的理解目前主要是因为方便大家相互之间要使用COM,那么COM就有了一套规范,而且是windows定义的规范,COM编程需要满足这套规范,举个简单的例子,为了说明我给你用的COM没有和别人重复命名,我自己的COM就要有一个
GUID标识;为了说明我是放在系统的什么位置的,那么我在别人用我的时候,就要初始化一下,然后在
注册表里填写好我自己这个COM的所在的路径,等等所类似的东西,那么这个问题就来了,Linux/MacOS上是没有注册表这样的东西的,微软肯定也不会给别平台去搞一套费力不讨好的事情,所以COM后面就演化为只在windows上存在的一种东西了,但是这个
对象实例模块化的思想其它的平台都是可以借鉴的。
主要说Windows, 其实Windows一直遵循开发工程师只要拿着微软提供的API手册或者文档,让用户主要学会用,然后去做业务逻辑就可以了,这个好像是微软对工程师的要求(这里不得不吐槽一下,微软把具体实现的细节都屏蔽了,然后为了设计一套接口,必须设计一个比较复杂的框架来支持,从各个层面都能感受到这种设计思想,例如windows的各种过滤驱动,WFP过滤框架,MiniFilter之类的,让你们变笨了,只要简单的使用它就行,这个不从商业角度上考虑,我觉得是对技术的一种极大的不尊重,开源的才是王道! 所以本人很不喜欢windows开发,不过windows的一些技术能力确实很强)。
实际上,COM不必要搞这么复杂,现在COM的使用,在Windows上实际上应该有个COM的服务,专门来针对COM进行处理,也就是上面提到的,读取注册表路径,产生COM对象,获取COM指针等;所以,我们在创造一个COM的时候,就要实现一些规定的接口,来方便windows自己的COM服务能够识别,进行统一的管理,应该就是这个,导致了其它平台没有COM这个东西。
前面只是聊了下COM的一些思想,技术上主要还是参考相关资料,已经非常多了,有空写个COM例子入门。