软件构造课程随笔——4-1【可复用性的度量、形态与外部表现】

一、什么是软件复用性

软件复用分为两个方面:面向复用编程(开发出可复用的软件)和基于复用编程(利用已有的可复用软件搭建应用系统) ,从而降低成本和开发时间,实现标准化,并让系统更加可靠、稳定。
在这里插入图片描述
开发成本高于一般软件的成本:要有足够高的适应性。另外,可复用软件相对性能差些: 针对更普适场景,缺少足够的针对性。
举几个例子:Java中内置的一些库、Maven,对于Ruby有RubyGems。

二、如何评价可复用性

高复用性的软件应简单、可移植性和兼容性好、灵活、可扩展、通用和参数化、模块化、将变化限制在局部、稳定。要考虑复用的机会有多频繁、代码有多大。

三、可复用组件的层次和形态

最主要的复用是在代码层面,但软件构造过程中的任何实体都可能被复用。我们主要关系的复用有方法、方法体、类、接口、库、框架等。
代码复用的类型
白盒复用:源代码可见,可修改和扩展(灵活、定制化程度高、难度大)
黑盒复用:源代码不可见,不能修改(简单、清晰、适用性差)

(1)源代码复用
复用代码——最低层次
简单的说就是复制粘贴。这里提供一些搜索途径:
grepcode.com
github.com/search
searchcode.com

(2)模块层次复用:类/接口
复用类的途径:继承
复用类的途径:委托
委托有三种方式,分别是:Use,Composition/aggregation,Association
Association描述的是类与类之间一般的关联关系,而Aggregation和Composition都有整体和部分的关系。其中Aggregation中的部分脱离了整体,部分仍然有意义,是共享式的。而Composition中的部分脱离了整体,部分将没有任何意义,是独占式的。
use就是调用了某个方法,通常称作“uses_a”。在这种情况下,通常不会将其作为成员变量,而是方法的参数或者局部变量。
association是将其作为成员变量,通常称作“has_a”,两者有关联但不一定要是组成关系。
composition通常称作“owns_a”,两者具有组成关系。
在这里插入图片描述
(3)库层面复用:API/包

在这里插入图片描述
(4)系统层面复用:框架
应用框架是包含了接口、抽象类和具体类的可复用程序,使用时需要在其基础上补充所需要的设计元素。开发者根据framework的规约,填充自己的代码进去,形成完整系统。
在这里插入图片描述
你的代码由框架作为主程序来调用。
可以将framework看作是更大规模的API复用,除了提供可复用的API,还将这些模块之间的关系都确定下来,形成了整体应用的领域复用。
开发者需要做的就是增加新代码、对抽象类进行具体化。
控制反转(Inverse of Control)
由第三方的容器来控制对象之间的依赖关系,而非传统实现中由代码直接操控。
控制权由代码中转到了外部容器,带来的好处就是降低了对象之间的依赖程度,提高灵活性和可维护性。
在这里插入图片描述
白盒框架和黑盒框架
白盒框架是指通过继承和动态绑定来实现,现有的功能通过扩展子类以及重写预定义的Hook methods。(Hook是在指定的点,开发人员可以指定要执行的方法或回调。 实现抽象方法/回调接口是在Java代码中实现回调的机制。 抽象方法是实现“Hook”的一种方式。)

黑盒框架通过定义符合特定接口的组件来重用现有功能,这些组件通过委托与框架集成。或者说黑盒框架时基于委派的组合方式,是不同对象之间的组合。之所以是黑盒,是因为不用去管对象中的方法是如何实现的,只需关心对象上拥有的方法。

四、可重用性的外部表现

类型可变:通常通过泛型实现。
实现可变:ADT有多种不同的实现,提供不同的representations和 abstract funtion,但具有同样的specification (pre-condition, postcondition, invariants),从而可以适应不同的应用场景。
功能分组:提供完备的细粒度操作,保证功能的完整性,不同场景下复用不同的操作(及其组合)。
表示独立:内部实现可能会经常变化,但客户端不应受到影响,或者说信息隐藏。
共性抽取:将共同的行为(共性)抽象出来,形成可复用实体。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值