软件复用

24人阅读 评论(0) 收藏 举报
分类:

软件复用是使用现有软件组件实现或更新软件系统的过程。


软件重用的两个视角:

面向复用编程:开发出可复用的软件

基于复用编程:利用已有的可复用软件搭建应用系统

为什么需要复用

降低成本和开发时间
产生可靠的软件
实现标准化,在不同应用中保持一致
可重用组件的级别和形态
代码级别复用

两种类型

白盒复用:源代码可见,可修改和扩展,复制已有代码当正在开发的系统,进行修改
优点:可定制化程度高
缺点: 对其修改增加了软件的复杂度,且需要对其内部充分的了解

黑盒复用:源代码不可见,不能修改,只能通过API接口来使用,无法修改代码
优点:简单清晰
缺点:适应性差
具有的缺点

维护问题
很容易出现错误
需要使用的软件是如何工作的知识
需要访问源代码

模块级重用:类/接口

类的重用:继承和委托
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承的特性

子类拥有父类非private的属性,方法。
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。子类可以用自己的方式实现父类的方法。Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类。
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。
继承可以使用 extends 和implements 这两个关键字来实现继承,而且所有的类都是继承于java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。

extends关键字
在 Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。

implements关键字

使用 implements关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

super 与 this 关键字

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。

final关键字

final关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。

委派

委派模式(Delegate)是面向对象设计模式中常用的一种模式。这种模式的原理为类B和类A是两个互相没有任何关系的类,B具有和A一模一样的方法和属性;并且调用B中的方法,属性就是调用A中同名的方法和属性。B好像就是一个受A授权委托的中介。第三方的代码不需要知道A的存在,也不需要和A发生直接的联系,通过B就可以直接使用A的功能,这样既能够使用到A的各种功能,又能够很好的将A保护起来了。


库级别重用:API /包

一个好的API的特点
易于学习
易于使用,即使没有文档
很难滥用
易于阅读和维护使用它的代码
足够强大以满足要求
易于发展
适合受众

 

系统级重用:框架

框架:一组具体类、抽象类、及其之间的连接关系
开发者根据 framework的规约,填充自己的代码进去,形成完整系统。通常通过选择性覆盖来扩展框架;或者程序员可以添加专门的用户代码来提供特定的功能---即定义继承了抽象类祖先操作的具体类 Hook方法,它被应用程序覆盖以扩展框架。Hook方法系统地将应用程序域的接口和行为与应用程序在特定上下文中所需的变体解耦。 控制反转:与库或标准用户应用程序不同,控制流不是由调用者决定的,而是由框架决定的。不可修改的框架代码:在接受用户实现的扩展时,框架代码不应该被修改。换句话说,用户可以扩展框架,但不应修改其代码

可复用性的外部指标:

类型可变 ,适应不同的类型,且满足LSP

功能分组,提供完备的细粒度操作,保证功能的完整性,不同场景下复用不同的 操作(及其组合)

实现可变,ADT有多种不同的实现,提供不同的representations和abstract funtion,但具有同样的specification(pre-condition, postcondition, invariants),从而可以适应不同的应用场景

表示独立,表示独立性是信息隐藏规则的延伸,对于大型系统的顺利开发至关重要:内部实现往往会改变,但客服端不应受到影响。

共性抽取,将共同的行为(共性)抽象出来,形成可复用实体

查看评论

Sharepoint 利用表单执行企业轻应用案例

-
  • 1970年01月01日 08:00

Java多态性详细举例说明(很经典例子)

(一)相关类
  • free4294
  • free4294
  • 2014-09-04 16:37:28
  • 29227

面向对象-多态

OC面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。 在使用多态是,会进行动态检测,以调用真实的对象方法。 多态在代码中的体现即父类指针指向子类对象。...
  • hahahacff
  • hahahacff
  • 2014-10-04 07:35:42
  • 7799

什么是多态?为什么用多态?有什么好处?多态在什么地方用?

什么是多态? 概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。   为什么要用多态呢? 原因:我们...
  • judyge
  • judyge
  • 2015-11-21 10:55:22
  • 758

面向对象的特点,封装性,继承性,多态性!

1.面向对象程序设计有三大特点,分别是封装,继承,多态,接下来就介绍一下这三个特点,积累一下。 2.封装,封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是...
  • u012561176
  • u012561176
  • 2015-01-29 19:37:02
  • 1960

面向对象的3个基本要素和5个基本设计原则(整理)

面向对象的3个基本要素:封装、继承、多态  面向对象的5个基本设计原则:  单一职责原则(Single-Resposibility Principle)      其核心思想为:一个...
  • qq_26296197
  • qq_26296197
  • 2017-02-03 22:30:32
  • 1260

软件复用为软件开发提速

软件复用为软件开发提速四木(本文转载自软件工程专家网www.21cmm.com)    随着社会信息化程度的提高,IT技术已经深入到社会生活的方方面面,而软件作为IT技术应用的核心,其重要性也日渐突出...
  • gigix
  • gigix
  • 2002-04-09 09:37:00
  • 1379

【笔记】软件复用

一、定义 软件复用(SoftWareReuse):是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。 早期的软件复用主要是代码级...
  • jason_zhangyl
  • jason_zhangyl
  • 2014-12-01 22:29:02
  • 525

面向各维度的软件复用

复用!使我们软件工作者梦寐以求的目标。所谓复用,就是在不改变原有代码的情况下,重复使用原有代码。面向对象(OO)技术的三个基本特点都是为了复用。 封装。这个本就是为了复用。是对复杂数...
  • softstars
  • softstars
  • 2008-06-10 19:13:00
  • 251

软件复用(softwarereuse)

subtopics: 软件复用的优越性软件复用的维度基于构件的软件开发 构件 构件的分类 在线构件离线构件 构件规约构件实现构件模型 分类/描述模型规约/组装模型实现级...
  • holandstone
  • holandstone
  • 2014-04-08 10:59:35
  • 1073
    个人资料
    持之以恒
    等级:
    访问量: 325
    积分: 140
    排名: 113万+
    文章分类
    文章存档