软件构造 |
您所在的位置:网站首页 › 资产的定义及特征是什么 › 软件构造 |
大纲:
可复用构件与软件复用的关系
1.可复用构件的定义及特征
2.软件复用的核心是可复用构件
可复用构件的主要技术流派
1.COM
2.JavaBean
3.CORBA
设计可复用的类
1.子类型多态和利斯科夫替换原则
2.委托和组合
2.1 Java排序实例
2.2 委托(Delegation)
2.3 组合继承原则
2.3.1 Dependency: 临时性的delegation
2.3.2 Association: 永久性的delegation
2.3.3 Composition: 更强的delegation
2.3.4 Aggregation
设计可复用的库与框架
API和库
框架
结束语
参考:
可复用构件与软件复用的关系
1.可复用构件的定义及特征
构件是指应用系统中可以明确辨识的有机构成成分,它具有相对独立性、互换性和功能性的特征。可复用构件则是指具有相对独立的功能和可复用价值的构件。 可复用构件应具备以下特征: 有用性,必须提供有用的功能; 可用性,必须易于理解和使用; 可靠性 ,构件自身及其变形必须能正确工作; 适应性,应易于通过参数化等方式在不同语境中进行配置; 可移植性,能在不同的硬件平台和软件环境中工作。随着对软件复用理解的深入,构件的概念已经不再局限于源代码构件,而是延伸到系统和软件的需求规约、系统和软件的构架、文档测试计划、测试案例和数据,以及其他对开发活动有用的信息,这些信息都可以称为可复用软件构件。 2.软件复用的核心是可复用构件可复用构件技术是支持软件复用的核心技术,是近几年来迅速发展并受到高度重视的一个学科分支。随着软件产业工业化的发展,也许未来会出现这样一种产业模式:构件生产商专门生产构件,然后再由零售商等构件管理者将它们拿到市场上销售。系统集成商则根据自己应用系统的需求进行构件的采购、集成和组装。 可复用构件的主要技术流派目前,软件构件技术流派主要有三种: 1.COMCOM构件实现规范由微软提出,它使开发人员可以利用其中的通信机制,组装不同开发商的构件。COM的核心是一组应用程序调用接口,该接口提供了创建构件组建构件的功能。为支持网络环境,微软对COM进行了扩充,这就是DCOM。COM规范具有以下特点: 构件间的互操作基于指针进行,依赖于操作系统的API; 对 Windows的依赖性强,对其他操作系统支持相对不足; 构件运行环境的提供者仅限于微软,但支持COM规范的开发工具较多,如VC+ +、VB和Builder等。 2.JavaBeanJavaBean构件实现规范是由SUN公司在Java语言的基础上提出的。由于Java是一种纯对象式语言,因此JavaBean构件规范比较完备、简洁。JavaHBean规范具有以下特点: 构件模型比较完备; 仅支持Java语言; 构件运行环境有SUN支持,其他厂商也可提供运行环境。支持该模型的开发工具较多,如Visual Cafe、Visual age for Java等。 3.CORBACORBA实现规范由OMG提出。OMG首先发布了OMA(对象管理体系结构) ,提出了构件互操作的软总线——ORB (Object Request Broker) ,并将构件分为三类:公共对象服务COS、面向领域的公共设施CF和应用对象AF。CORBA规范具有以下特点: 构件间的复用以 ORB为中介,对处理机、操作系统、语言的异构性支持性强; 充分借鉴JavaBean的构件原型; 提供构件运行环境的厂商较多,对开发支持的工具相对较少,通常需要传统开发工具的支持等。 设计可复用的类 1.子类型多态和利斯科夫替换原则子类型多态:客户端可用统一的方式处理不同类型的对象,例如: Animal a = new Animal(); Animal c1 = new Cat(); Cat c2 = new Cat();在可以使用a的场景,都可以用c1和c2代替而不会有任何问题(但反过来不行,即不能用父类来实例化一个子类引用) java静态类型检查中的规则: 子类型可以增加方法,但不可删父类原有的方法 子类型需要实现抽象类型中的所有未实现方法 子类型中重写的方法必须有相同或子类型的返回值 子类型中重写的方法必须使用同样类型的参数(或该类型的父类型,但java中不支持,会自动默认为重载) 子类型中重写的方法不能抛出额外的异常 规约上的准则: 更强的不变量 更弱的前置条件 更强的后置条件 里氏替换原则的主要作用就是规范继承时子类的一些书写规则。其主要目的就是保持父类方法不被覆盖。 含义: 子类必须完全实现父类的方法 子类可以有自己的个性 覆盖或实现父类的方法时输入参数可以被放大 覆盖或实现父类的方法时输出结果可以被缩小 利斯科夫替换原则本质是强行为子类型化,其要求为: 前置条件不能强化 后置条件不能弱化 不变量要保持 子类型方法参数:逆变 子类型方法的返回值:协变 异常类型:协变 协变:子类型方法的返回值是其父类型方法的返回值的子类型,即子类型及其方法的返回值在各自的继承树上的相对位置是协同的 逆变:子类型参数的类型是其父类型方法的返回值的父类型,即子类型及其方法的参数在各自的继承树上的相对位置是相反的 逆变与协变综述:如果A、B表示类型,f(⋅)表示类型转换,≤表示继承关系(比如,A≤B表示A是由B派生出来的子类): f(⋅)是逆变(contravariant)的,当A≤B时有f(B)≤f(A)成立; f(⋅)是协变(covariant)的,当A≤B时有f(A)≤f(B)成立; f(⋅)是不变(invariant)的,当A≤B时上述两个式子均不成立,即f(A)与f(B)相互之间没有继承关系。 协变(Co-variance): 父类型->子类型:越来越具体(specific)。 在LSP中,返回值和异常的类型:不变或变得更具体 。 例子:![]() ![]() ![]() |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |