【分布计算环境学习笔记】3 软件构件结构
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
1.基本概念:
- 框架:对问题的部分解决,是让用户集成构件的架构。
- 构件(组件): 构件是软件的基本单元, 既足够小,以便于维护,又应足够大,以使之具有功能,可以被打包和使用。
- 对象总线:是一种机制,使得构件和框架能够调用分布式环境中的另一构件或框架的服务。
构件提供软件单元,框架把构件拼装在一起建立许多应用程序,对象总线把构件和框架的能力扩展到开发网络,使数百万独立的软件单元在异构环节下无缝地交互操作。
2.框架
a.引出:过程和类库的固有缺点:被动性,它们都需要一种能提供控制流的结构实际的情况。大量的应用程序,特别是同一领域中的应用程序,分享相似的结构。这些结构并没有经过通常的面向对象技术而得到重用。
b.定义:框架把握了某个领域内全部问题集解决方案的不变部分,开发者必须向框架添加变化部分代码以把握其动作,使该应用程序成为所在领域内特定的应用程序。
c.类型:
- 水平框架: 适用于各种应用领域, 如网络安全
- 垂直框架: 适用于特定应用领域, 如保险,计费
框架应用模型:框架对相似问题集提供一种统一的解决方案(把握应用程序的结构),以框架调用方法(构件不再相互调用方法),构件可以重用,框架本身也可以为同领域的其它应用程序重用。
3.构件(组件)
a.定义:一个接近独立的、可被替换的软件单元,它实现一个已定义好的体系结构上下文中的一个明确的功能,同时遵循并提供一组接口的物理实现。组件是个功能或结构单元,是一个比类较粗粒度的表达,英文Component, 组件的出现就是为了解决某些功能和结构的划分,使其具有可重用性。组件将一些类和接口组织起来,对外暴露一个或多个接口,供外界调用。对于复杂的组件,还可能包含配置文件、界面、依赖的库文件等,组件也可以包含或者使用其它的组件,构成更大的组件。
b.特征:
- 自描述(内省) :构件必须能够识别其属性、存取方法和事件,这些信息可以使开发环境将第三方软件构件无缝地结合起来;
- 可定制:可由用户定制构件的特性值,自行配置构件。这通常意味着需提供一个图形方式环境,使构件的属性能通过控制面板来设置,从而使开发人员能够对一个一般化的构件加以裁剪,使其能够满足某些特定环境的具体需求。
- 可集成:开发人员可将构件并入开发环境,与新的应用相连。可聚合简单构件,获得复杂构件.构件可以被编程语言直接控制。构件也可以和脚本语言连接或者与从代码级访问构件的环境连接,使软件构件可以在非可视化开发项目中使用;
- 连接机制:构件必须能产生事件或者具有让程序员从语义上实现相互连接的其他机制。这意味着程序员可以很容易地向按钮添加代码,使点中按钮就可以影响其他构件的动作。
- 可插用—是现成的可打包的软件部件,可从经销商处购得。
- 可维护 — 构件是足够小的,因而易于维护和升级。
- 有功能 — 构件是足够大的,以它所期望的方式工作。
- 有特点 — 构件是设计用于执行某种特定任务的,它代表了整个应用程序中的一个部件。这个部件可以是细颗粒、中颗粒或大颗粒的。
- 没有与别的构件直接通信的路径 – 不直接通信是构件可维护和可升级的必要条件。此外,它使得构件可被用于分布式环境。
- 自我可描述 – 构件能向系统的其余部分描述它提供的服务。这种描述通常是通过说明性的、与实现无关的接口定义语言来提供的。
- 目标框架 – 构件通常是为一特殊的框架所建立的,这种构件不能在其它框架中运行。例如:Java Beans构件不能直接用于ActiveX环境。
- 目标对象总线 – 直接与某一对象总线接口的构件或许不能与另一对象总线一起使用。要用网关来提供不同对象总线之间的可互操作性。
c.构件接口:一组操作的集合,用于指定一个构件所提供的服务。接口规定了一个构件和别的构件交互的机制。接口用于命名一个操作的集合并指定它们的标记和协议,只注重一个给定服务的行为,而不是它的结构。接口不对它的任何操作提供实现。
d.构建和对象的比较:
相同点:
两者都提供了描述和构造应用的元素;对象是一个问题域中的任何可识别的实体,例如对象可表示一个员工或者一个定单。在分析和设计阶段,对象纯粹是概念性的,在实现阶段,对象在软件中实现。而在基于构件的开发中,构件也提供了类似的构造块。一个开发者把一个应用看成是一组互相交互的组件的集合。当构造一个应用时,实际的构件将被构造或综合进软件中。最终的应用将由这些一起协调工作的构件组成。对象和构件使用类似的技术来指定。一个对象是一个对象类型的一个实例,对象类型指定了对象的特性。构件类型的概念和对象类型的概念极其相似 (极其相似,而不是相同。因为并不是所有的构件都有类型的概念。Java Beans中的一个Beans有类型的概念,但比如对某个遗留系统进行包装(wrapper)后所得到的构件就没有类型的概念)。一个特定的构件是一个构件类型的一个实例,并且它向外展示其指定的特性。
不同点:
构件技术是从面向对象技术中发展起来的,但它又不同于对象技术。在构件技术中,既可用面向对象的技术来实现,也可不用面向对象的技术来实现。对象技术在构件技术中不是必须的。开发者可能使用任何非面向对象语言和环境来实现构件。而且,构件可能包括遗留的系统,这些遗留的系统可能被包装起来以跟基于构件的软件相互操作。在面向对象技术中,继承、封装和多态性是OO技术的三个基本特征,但在构件技术中一般只突出封装的特性,即构件是独立可交付的软件单元。典型地,一个构件提供比对象更为强大的功能。对象和对象类型是用于应用开发的基本组成部分。开发者指定对象类型来包括关键的域和技术概念。一个应用可能包括几百个对象类型。相反,一个应用可能只包括几个构件。一个构件可能包括多个对象。构件提供了一个在对象级以上的一个组成部分。构件可看成是一个组织对象的一个方法。
4.对象总线
a.定义:把构件和框架的能力扩展到开发网络,使数百万独立的软件单元在异构环节下无缝地交互操作。
b.对象总线语言:使相互通信的对象都能理解的一种公共语言。为所有对象提供了一种向总线描述自己的机制,这种机制通过一种说明性的、与实现无关的接口定义语言(IDL)提供。
c.举例:最著名的对象总线:CORBA 、DCOM。
5.基于构件的软件开发过程
6.构件模型
a.构件模型:为开发者定义软件构件而建立的体系结构和API集,使开发者可通过软件构件的动态组合来建立应用系统。当前主流构件模型CORBA、EJB、COM( DCOM / COM+ )
构件模型 = 构件 + 容器
- 构件 -- 具有可重用特性的基本软件部件
- 容器 -- 一组提供一系列可访问的管理服务,只要组件符合容器要求(规范),容器就可以让组件使用相应的管理服务,构件需要实现容器要求的API才能在容器中运行。用于存放和安排构件,实现构件间的交互。(容器也可以作为另一个容器的构件使用)
b.重量级框架:
典型代表EJB,开发的系统基本需要放置在一个容器系统中进行运行,并需要实现容器要求的接口。容器在实例化化业务对象后,传给业务对象上下文,而业务对象本身要通过JNDI手段来定位或者pull出其他资源或者业务对象。这些容器因为基本针对大型企业应用,所以体积庞大,占用资源,内在服务多,启动比较慢。开发需要遵从的规则比较多,开发效率也比较低,很大一部分时间都用在了Deploy、Run这样的过程上,调试和测试比较困难。重量级框架在大规模运行的时候会表现出非常优异的性能,劣势主要是开发效率较低
c.轻量级框架:
典型代表:Spring
- Struts和WebWork面向Web框架
- Hibernate面向数据库映射(ORM)
以依赖注入(Dependency Injection)为代表的解耦合模式,可以让组件不去依赖容器(运行环境)的API。轻量级容器通过反向控制(Inversion of Control)让容器具有主动权,去管理插进来的组件,只要组件是符合标准的,就可以被轻量级容器管理。组件以POJO(Plain Old Java Object)的形式存在,只要你有Java.exe就可以运行它,不需要容器就可以实现测试行为。基于轻量级框架进行系统开发的时候非常迅速,但是在大规模运行的时候,性能可能会比重量级框架差一些。
7.技术的重点
不在于如何进行远程调用,RPC或者RMI技术足以支持,而真正的技术重点在于如何简化应用的开发:由容器提供相应的各种服务,进一步地:轻量级框架技术,松耦合基于构件的应用与容器的关系,只整合需要的服务。构件之间的关系也可以在需要的时候建立。