可重用组件的级别和形态

(1) Source code reuse

复用别人的代码,将部分/全部复制/粘贴到程序中。存在限制:

        1.维修问题

               – 需要在多个地方更正代码

               – 太多代码无法使用(很多版本)

        2. 过程出错风险高

        3. 可能需要了解所用软件的工作原理

        4.需要访问源代码

几个源代码网站:

grepcode.com

github.com/search

searchcode.com

(2)Module-level reuse: class/interface

类的重用:

1.类是代码重用的原子单元

        – 不需要源代码,类文件或 jar/zip

        – 只需要包含在类路径中

        – 可以使用 javap 工具获取类的公共方法头

2. 文档非常重要(Java API)

3.封装有助于重用

4.更少的代码来管理

5.版本控制,向后兼容性仍然存在问题

6.需要将相关类打包在一起——静态链接

继承(inheritance):

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

class 父类 {
}
 
class 子类 extends 父类 {
}

继承的特性

  • 子类拥有父类非 private 的属性、方法。

  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

  • 子类可以用自己的方式实现父类的方法。

  • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。

  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

委托(delegation):

委托是当一个对象依赖另一个对象功能的某个子集(一个实体将某些东西传递给另一个实体)

        – 例如 Sorter 将功能委托给某个 Comparator

§ 明智的委托可实现代码重用

        – 排序器可以重复使用任意排序顺序

        – 比较器可以与需要的任意客户端代码重用,比较整数

§ 显式委托:将发送对象传递给接收对象

§ 隐式委托:通过语言的成员查找规则

§ 委托可以被描述为一种低级的共享机制,共享实体之间的代码和数据。

建议阅读:

Java委托机制 - enjoin - 博客园 (cnblogs.com)

接口(interface):

接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

接口特性:

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

抽象类和接口的区别:

  • 1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  • 2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  • 4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

(3) Library-level reuse: API/Package

库:一组提供可重用的类和方法 (API) 功能

一个好的 API 的特征:

§ 简单易学

§ 易于使用,即使没有文档

§ 难以滥用

§ 易于阅读和维护使用它的代码

§ 足够强大以满足需求

§ 易于进化

§ 适合受众

(4) System-level reuse: Framework

framework是子系统设计,包含一系列 抽象类和具体类以及每个类之间的接口。开发者根据 framework的规约,填充自己的代码进去,形成完整系统。

框架不同于应用程序:

1.抽象级别是不同的,因为框架提供了一个解决方案 一系列相关的问题,而不是单一的问题。       

2.为了容纳问题家族,框架不完整, 结合热点和钩子以允许定制

也就是说框架的抽象级别更高,允许使用框架提供的方法定制以满足需求。

框架可以根据用于扩展的技术进行分类:

白盒框架,通过代码层面的继承进行框架扩展

黑盒框架,通过实现特定接口/delegation进行 框架扩展

参考资料:

Java 接口 | 菜鸟教程 (runoob.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值