软件重用(软件复用)是使用已有的软件产品(如设计、代码、文档等)来开发新的软件系统的过程。算法
软件重用的形式大致可分为垂直式重用和水平式重用。sql
水平式重用是重用不一样应用领域中的软件元素,例如数据结构、排序算法、人机界面构件等。标准函数库是一种典型的原始的水平式重用机制。数据库
垂直式重用是在一类具备较多公共性的应用领域之间重用软件构件。垂直式重用活动的主要关键点在于领域分析:根据应用领域的特征和类似性,预测软件构件的可重用性。编程
构件是软件系统可替换的、物理的组成部分,它封装了实现体(实现某个职能),并提供了一组接口的实现方法。能够认为构件是一个封装的代码模块或大粒度的运行时模块,也能够将构件理解为具备必定功能、可以独立工做或与其它构件组合起来协调工做的对象。小程序
构件应当是内聚的,并具备至关稳定的、公开的接口。设计模式
在创建基于构件的软件开发中,构件获取能够有多种不一样的途径:安全
(1)从现有构件中得到符合要求的构件,直接使用或做适应性(flexibility)修改,获得可重用的构件。服务器
(2)经过遗留工程(legacy engineering),将具备潜在重用价值的构件提取出来,获得可重用的构件。网络
(3)从市场上购买现成的商业构件,即COTS(Commercial Off-The-Shell)构件。数据结构
(4)开发新的符合要求的构件。
构件管理的内容包括构件描述、构件分类、构件库组织、人员及权限管理和用户意见反馈等。
1. 构件的组织
对已有的构件分类方法能够概括为三大类,分别是关键字分类法、刻面分类法和超文本组织方法。
(1)关键字分类法(keyword classification):根据领域分析的结果将应用领域的概念按照从抽象到具体的顺序逐次分解为树形或有向无回路图结构。每一个概念用一个描述性的关键字表示。
(2)刻面分类法(faceted classification):定义若干用于刻画构件特征的“面”(facet),每一个面包含若干概念,这些概念描述构件在面上的特征。刻面能够描述构件执行的功能、被操做的数据、构件应用的语境或任意其余特征。描述构件的刻面的集合称为刻面描述符(facet descriptor),一般,刻面描述被限定不超过7或8个刻面。
关键字分类法和刻面分类法都是以数据库系统做为实现背景的。尽管关系数据库可供选用,但面向对象数据库更适于实现构件库,由于其中的复合对象、多重继承等机制与表格相比更适合描述构件及其相互关系。
(3)超文本方法(hypertext classification):与基于数据库系统的构件库组织方法不一样,它基于全文检索技术。其主要思想是:全部构件必须辅以详尽的功能或行为说明文档;说明中出现的重要概念或构件以网状连接方式相互链接;检索者在阅读文档的过程当中可按照人类的联想思惟方式任意跳转到包含相关概念或构件的文档;全文检索系统将用户给出的关键字与说明文档中的文字进行匹配,实现构件的浏览式检索。超文本是一种非线性的网状信息组织方法,它以结点为基本单位,链做为结点之间的联想式关联。超文本组织方法为构造构件和重用构件提供了友好、直观的多媒体方式。因为网状结构比较自由、松散,所以,超文本方法比前两种方法更易于修改构件库的结构。
2. 构件分类
若是把软件系统当作是构件的集合,那么从构件的外部形态来看,构成一个系统的构件可分为5类:
(1)独立而成熟的构件。独立而成熟的构件获得了实际运行环境的屡次检验,该类构件隐藏了全部接口,用户只需用规定好的命令进行使用。例如,数据库管理系统和操做系统等。
(2)有限制的构件。有限制的构件提供了接口,指出了使用的条件和前提,这种构件在装配时,会产生资源冲突、覆盖等影响,在使用时须要加以测试。例如,各类面向对象程序设计语言中的基础类库等。
(3)适应性构件。适应性构件进行了包装或使用了接口技术,把不兼容性、资源冲突等进行了处理,能够直接使用。这种构件能够不加修改地使用在各类环境中。例如ActiveX等。
(4)装配的构件。装配的构件在安装时,已经装配在操做系统、数据库管理系统或信息系统不一样层次上,使用胶水代码(glue code)就能够进行链接使用。目前一些软件商提供的大多数软件产品都属这一类。
(5)可修改的构件。可修改的构件能够进行版本替换。若是对原构件修改错误、增长新功能,能够利用从新“包装”或写接口来实现构件的替换。这种构件在应用系统开发中使用得比较多。
3:人员权限管理
通常来说,构件库系统可包括五类用户,即注册用户、公共用户、构件提交者、通常系统管理员和超级系统管理员。他们对构件库分别有不一样的职责和权限,这些人员相互协做,共同维护着构件库系统的正常运做。同时,系统为每一种操做定义一个权限,包括提交构件、管理构件、查询构件及下载构件。每一用户可被赋予一项或多项操做权限,这些操做权限组合造成该人员的权限,从而支持对操做的分工,为权限分配提供了灵活性。
1. 检索与提取构件
2. 理解与评价构件
3. 修改构件
4. 构件组装
为解决分布异构问题,人们提出了中间件的概念。中间件是位于平台(硬件和操做系统)和应用之间的通用服务,这些服务具备标准的程序接口和协议。
中间件做为一大类系统软件,与操做系统、数据库管理系统并称“三驾马车”,它的优越性体如今如下几个方面:
缩短应用的开发周期、节约应用的开发成本、减小系统初期的建设成本、下降应用开发的失败率、保护已有的投资、
简化应用集成、减小维护费用、提升应用的开发质量、保证技术进步的连续性、加强应用的生命力。
具体地说,中间件屏蔽了底层操做系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减小程序设计的复杂性,将注意力集中在本身的业务上,没必要再为程序在不一样系统软件上的移植而重复工做,从而大大减小了技术上的负担。
中间件为上层应用屏蔽了异构平台的差别,而其上的框架又定义了相应领域内的应用的系统结构、标准的服务组件等,用户只需告诉框架所关心的事件,而后提供处理这些事件的代码。当事件发生时,框架则会调用用户的代码。用户代码不用调用框架,用户程序也没必要关心框架结构、执行流程、对系统级API的调用等,全部这些由框架负责完成。
所以,基于中间件开发的应用具备良好的可扩充性、易管理性、高可用性和可移植性。
从中间件的层次上来划分,可分为底层型中间件、通用型中间件和集成型中间件三个大的层次。
底层型中间件的主流技术有JVM(Java Virtual Machine,Java虚拟机)、CLR(Common Language Runtime,公用语言运行时)、ACE(Adaptive Communication Environment,自适应通讯环境)、JDBC和ODBC等,表明产品有Sun JVM和Microsoft的CLR;
通用型中间件的主流技术有CORBA、EJB、COM/DCOM等,表明产品主要有IONA Orbix、BEA WebLogic和IBM MQSeries等;集成型中间件的主流技术有WorkFlow和EAI等,表明产品主要有BEA WebLogic和IBM WebSphere等。
因为中间件须要屏蔽分布环境中异构的操做系统和网络协议,它必须可以提供分布环境下的通信服务,咱们将这种通信服务称之为平台。
基于目的和实现机制的不一样,咱们将平台分为
远程过程调用(Remote Procedure Call,RPC)、
面向消息的中间件(Message-Oriented Middleware,MOM)、
对象请求代理(Object Request Brokers,ORB)
它们可向上提供不一样形式的通信服务,包括同步、排队、订阅发布、广播等,在这些基本的通信平台之上,可构筑各类框架,为应用程序提供不一样领域内的服务。
就具体的产品类型来看,目前市场中主要有6种类型,分别是事务服务器、知识服务器、带有集成开发工具的应用服务器、协做服务器、瘦服务器和主机访问服务器。不过,具体的服务器产品并不必定会是某种特色功能,每每是兼而有之。
(1)EJB。EJB是Java服务器端的构件模型。EJB容器做为EJB构件的执行环境,提供服务器端的系统级功能,包括线程管理、状态管理和安全管理等。
EJB定义了访问构件服务的分布式客户接口模型,经过RMI-IIOP(Java Remote Method Invocation-Internet Inter-ORB Protocol),EJB能够同COBRA对象进行互操做。使用Java开发的EJB具备一次编写处处运行的优势,按照标准开发的EJB构件能够部署到任何一个支持EJB标准的应用服务器中。使用EJB开发企业应用,能够缩短开发周期,开发人员只须要将注意力集中在业务逻辑的实现上,底层服务彻底由EJB容器提供。使用EJB开发的业务逻辑部分具备很好的移植性,不须要更改EJB的代码,开发人员可以将EJB从一种操做环境移植到另外一种操做环境。
(2)JDBC。JDBC是Java语言链接数据库的标准,从免费的Mysql到企业级的DB2和Oracle,JDBC都提供了很好的接口。
JDBC API有两个部分,一个用来访问数据库的应用程序级的接口,另外一个用来将JDBC驱动整合到J2EE平台中的服务提供商接口。
(3)Java Servlet(Java服务器端小程序)。在Servlet技术中封装了HTTP协议,开发者不须要处理复杂的网络链接和数据包,就能够扩展Web服务器的功能。相似于其余的服务器端程序,Servlet彻底运行于Web服务器中,具备不错的效率和更好的移植性。
(4)JSP(Java Server Page,Java服务器页面)。能够认为是一种高层的Servlet,在服务器端,JSP老是首先被编译成Servlet运行的。如同在ASP(Active Server Page,动态服务器页面)中直接使用VBScript同样,使用JSP能够直接在HTML代码中嵌入Java代码,并提交给服务器运行。使用JSP便于逻辑和表现形式的分离。
(5)JMS(Java Message Service,Java消息服务)。JMS是一个消息标准,它容许J2EE应用程序创建、发送、接收和阅读消息。它使得创建链接简单的、可靠的和异步的分布式通讯成为可能。
(6)JNDI(Java Naming and Directory Interface,Java命名目录接口)。JNDI提供命名的目录功能,为应用程序提供标准的目录操做的方法,
例如,得到对象的关联属性、根据它们的属性搜寻对象等。使用JNDI,一个J2EE应用程序能够存储和从新获得任何类型的命名Java对象。由于JNDI不依赖于任何特定的执行,应用程序可使用JNDI访问各类命名目录服务,这使得J2EE应用程序能够和传统的应用程序和系统共存。
(7)JTA(Java Transaction API,Java事务API)。JTA提供事务处理的标准接口,EJB使用JTA与事务处理服务器通讯。JTA提供启动事务、加入现有的事务、执行事务处理和恢复事务的编程接口。
(8)Java Mail API(Java邮件API)。J2EE应用程序可使用Java Mail API来发送电子邮件。Java Mail API包含两部分,分别是应用程序级接口和服务接口。
(9)JAXP(Java XML解析API)。JAXP支持DOM、SAX(Simple API for XML,简单应用程序接口)、XSLT(eXtensible Stylesheet Language for Transformation)转换引擎。JAXP使得应用程序能够更简单的处理XML。
(10)JCA(J2EE Connector Architecture,J2EE链接架构)。JCA是对J2EE标准集的重要的补充,它注重的是用于将Java程序链接到非Java程序和软件包的中间件的开发。JCA包括三个关键的元素,分别是资源适配器、系统界面、通用客户界面。JCA在功能上比Web服务要丰富,可是它发布起来更难,并且限制了只能从Java环境访问它们。
(11)JAAS(Java Authentication Authorization Service,Java认证和受权服务)。JAAS提供灵活和可伸缩的机制来保证客户端或服务器端的Java程序,它让开发者可以将一些标准的安全机制经过一种通用的,可配置的方式集成到系统中。
VO(View Object):视图对象,用于展现层,它的做用是把某个指定页面(或组件)的全部数据封装起来。
DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减小分布式调用的次数,从而提升分布式调用的性能和下降网络负载,但在这里,我泛指用于展现层与服务层之间的数据传输对象。
DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。
PO(PersistentObject):持久化对象,它跟持久层(一般是关系型数据库)的数据结构造成一一对应的映射关系,若是持久层是关系型数据库,那么,数据表中的每一个字段(或若干个)就对应PO的一个(或若干个)属性。
(1)操做系统是.NET平台的基础,在操做系统方面,Microsoft有着强大的开发能力,目前的.NET平台能够运行在多个由Microsoft提供的操做系统中。
(2).NET Enterprise Servers提供了包括Application Center、BizTalk Server、CommerceServer等一系列服务器产品,经过这些产品能够缩短构建大型企业应用系统的周期。
(3).NET Building Block Services指的是一些成型的服务,例如,由Microsoft提供的NET Passport服务等。.NET的开发者能够以付费的方式直接将这些服务集成在本身的应用程序中。
(4).NET Framework位于整个.NET平台的中央,为开发.NET应用提供低层的支持。.NET Framework的核心部分是CLR。CLR是.NET程序的执行引擎,.NET的众多优势也是由CLR所赋予的。CLR同JVM的功能相似,提供了单一的运行环境。任何.NET应用程序都会被最终编译成为IL(Intermediate Language,中间语言),并在这个统一的环境中运行。也就是说,CLR能够用于任何针对它的编程语言,这也就是.NET的多语言支持功能。CLR还负责.NET应用程序的内存管理、对象生命期的管理、线程管理、安全等一系列的服务。
(5)Visual Studio.NET是.NET应用程序的集成开发环境,它位于.NET平台的顶端。Visual Studio.NET是一个强大的开发工具集合,里面集成了一系列.NET开发工具,如:C#.NET、VB.NET、XML Schema Editor等。