面向组件与面向对象

 

组件与对象的对比

  组件可以被认为是面向对象和其它软件技术的化身。区分组件和其它先前的技术有四个原则:封装(encapsulation)、多态性(polymorphism)、后期连接(late binding)和安全性(safety)。这个列表与面向对象是重复的,除了它删除了继承(inheritance)这个重点。在组件思想中,继承是紧密耦合的、白盒(white-box)关系,它对于大多数形式的包装和重复使用都是不适合的。作为代替,组件通过调用其它的对象和组件重复使用功能,代替了从它们那儿继承。在组件术语中,这些调用叫做委托(delegations)。

   “把各部分装配在一起,一个放在另一个里面,像木匠修建房屋一样建立你自己的轮廓。每样东西都必须建造好,各部分组合在一起就形成了全部…”——Henri Matisse

  根据惯例,所有组件都拥有与它们的实现对应的规范。这种规范定义了组件的封装(例如它为其它组件提供的公共接口)。组件规范的重复使用是多态性的一种形式,它受到高度鼓励。理想情形是,组件规范是本地的或全局的标准,它在系统、企业或行业中被广泛地重复使用。

  组件利用合成(composition)来建立系统。在合成中,两个或多个组件集成到一起以建立一个更大的实体,而它可能是一个新组件、组件框架或整个系统。合成是组件的集成。结合的组件从要素组件中得到了联合的规范。

  如果组件符合了客户端调用和服务的规范,那么它们不需要额外编写代码就能够实现交互操作(interoperate)。这一般被称为即插即用(plug-and-play)集成。在运行时间执行的时候,这是后期连接的一种形似。例如,某个客户端组件可以通过在线目录发现组件服务器(类似CORBA Trader服务)。组件符合客户端和服务接口规范后,就能够建立彼此之间的运行时绑定,并通过组件的下部构造无缝地交互作用。

  在完美的情形中,所有组件都将完全符合它们的规范,并且从所有的缺陷中解放了出来。组件的成功的运行和交互操作依赖于很多内部和外部因素。安全性(Safety)属性可能是有用的,因为它可以最小化某个组件环境中的全部类的缺陷。随着社会日益依赖于软件技术,安全性已经成为一种重要的法定利害关系,并成为计算机科学研究中的最重要的课题之一。例如,Java的垃圾收集(garbage collection)特性保证了内存的安全性,或者说从内存分配缺陷(在C++程序中这是有问题的)中解放出来了。其它类型的安全性包括类型安全性(type safety,用于保证数据类型的兼容性)和模块安全性,它控制着软件扩展和组件合成的效果。
面向对象技术的基础是封装--接口与实现分离,面向对象的核心是多态--这是接口和实现分离的更高级升华,使得在运行时可以动态根据条件来选择隐藏在接口后面的实现,面向对象的表现形式是类和继承。面向对象的主要目标是使系统对象化,良好的对象化的结果,就是系统的各部分更加清晰化,耦合度大大降低。
 
面向组件技术建立在对象技术之上,它是对象技术的进一步发展,类这个概念仍然是组件技术中一个基础的概念,但是组件技术更核心的概念是接口。组件技术的主要目标是复用--粗粒度的复用,这不是类的复用,而是组件的复用,如一个dll、一个中间件,甚至一个框架。一个组件可以有一个类或多个类及其它元素(枚举、)组成,但是组件有个很明显的特征,就是它是一个独立的物理单元,经常以非源码的形式(如二进制,IL)存在。一个完整的组件中一般有一个主类,而其它的类和元素都是为了支持该主类的功能实现而存在的。为了支持这种物理独立性和粗粒度的复用,组件需要更高级的概念支撑,其中最基本的就是属性和事件,
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值