Note 5.2 代码复用(类、库和框架)

3 篇文章 0 订阅

一、类的复用

1. 多态、子类型和重载

a.三种多态:

(多态:用一个符号表示多个不同的类型-类似接口)

重载:方法的多个同名实现(方法签名不同)

泛型:一个类型名字代表多(数据)类型

子类型:一个变量名代表多个类的实例

b. 即时多态和重载:
c. 参数多态和泛型
d. 子类型多态
e. 行为子类型和LSP

LSP/里氏替换原理
注意:子类必须调用父类的一个(且只能调用一个)构造方法,只能用一次super,在构造方法内的第一行。
关于型变:协变、逆变、不变
方法重写中可能存在的型变(潜在问题):返回类型,参数类型
泛型不型变(但如果有通配符”?”情况就不同了)

程序运行时回进行泛型的类型擦除/替换。

2. 参数多态和泛型

3. 组合和委托

例如:interface Comparator和(boolean)compare方法
委托:对象间功能依赖(有利于复用),实体间共享代码/数据,依赖动态绑定。

聚合是组合的一种

对象间的5种关系:委托(关联,依赖, 组合,聚合),继承。
耦合程度:继承>组合>聚合>关联>依赖

二、 系统级库和框架的复用

1. API和库

注意区分库和框架!
但两者目的都是定义关键抽象、对象不变量和方法、控制流(都包含API)。

2. API的设计

特征:
模块化,能够独立地被test(被observe);
一旦发布难以修改;
功能单一,分解/合并容易,能完成功能上尽可能小。
原则:
注意信息的保护(尽量不要return一个mutable类);
尽量使用委托和组合(少用继承,因为违背了封装原则);
对所有可访问数据提供String形式的访问方法,避免客户端去解析;
返回值勿需进行异常处理, e.g., 用空集合或者0长度数组, 不要用null。

3. 框架

又分为白盒框架(通过继承使用)和黑盒框架(通过实现接口使用) p82
现成框架有的能自己运行(Eclipse)有的需要be extended(Junit, Swing)

Collections框架:
常用:
iterator接口
set接口:元素不重复,强制equals和hashcode计算??-hashset
list接口:可重复,可通过下标访问-arraylist, linkedlist
map接口:hashmap

含两种包装器

兼容性:向上兼容/向前兼容,向下兼容/向后兼容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值