软件的可复用性

2023-11-20

1.什么是软件复用

软件复用就是利用已有的软件组件来实现或更新新的软件系统。

2.软件复用的两个层面

  • for reuse: 创造层面,开发可复用的软件
  • with reuse: 使用层面,利用已有的可复用软件搭建新的软件应用系统

3.软件复用的优缺点

软件复用可以大幅度的节省新软件的开发时间和开发成本。譬如,如果你想造一辆超级跑车,那么给你法拉利,迈巴赫的图纸,会不会感觉任务变得更轻松了呢。软件复用让我们的任务由从0到1简化成了从1到2,这就是一个质的飞跃。毕竟我们都知道,改进远比创造要容易的多。可复用的软件的适应性一般都比较强,在很多方面都有值得借鉴的地方。
还是给你法拉利的图纸,如果这次造的是普通的家用轿车,那我们必定不能直接照搬照抄整个图纸,毕竟家用轿车的预算和法拉利的预算天差地别,这也就体现了软件复用的缺点所在,其针对性并不是很强,如果一有类似就全盘照搬照抄,往往会无法达到我们的期待。不只体现在性能差的方面,还有预算成本,健壮性,适用群体等多方面都会有所差距。
那么既然很难找到两个大致相仿的软件系统,是否就意味着可复用软件的开发并没有什么意义呢?
答案显然是错误的。像吸收外来文化也得取其精华,弃其糟粕。软件复用也是如此,我们只需保留其可复用的部分,舍弃其难以复用的部分即可。还是利用法拉利图纸来开发家用轿车,引擎部分显然是无法复用了,但是在车的形状上是可以参考的,法拉利流线型的车身有益于速度的增加,那么家用轿车同样可以设计成流线型,既提高了速度,又可以节省燃料,最重要的,设计师们也不需要在为车身形状的设计而苦苦思索,争论不休了。

4.软件复用的四个级别

  • 源代码级别的复用
    • 白盒复用:源代码可见,可修改和扩展
    • 黑盒复用:源代码不可见,不能修改
  • 模块级别的复用:类/抽象类/接口
    • 继承
    • 委托
  • 库级别的复用:API/包
  • 系统级别的复用:框架
    • 白盒框架:通过代码层面的继承进行框架扩展
    • 黑盒框架:通过实现特定接口/delegation进行框架扩展

5.评价软件的可复用性

  • How frequently? ——复用的机会有多频繁,场合有多少
    • 开发可复用软件本身比普通开发软件需要更多的人力物力,若软件复用的机会并不频繁,则没必要去可以编写可复用的软件
  • How much? ——复用的代价有多大
    • 搜索和获取可复用代码是否方便,如果需要花很多时间和资源去找到可复用的代码,还不如去自己写
    • 是否适配,扩展性强不强,若复用代码无法扩展实现所需的某个功能,那么难以复用
    • 能否实例化
    • 与软件其他部分互连的难度

6.以外部观察者角度来看软件复用

  • 类型可变
  • 功能分组
  • 实现可变
  • 表示独立
  • 共性抽取
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件的可复用性 的相关文章

随机推荐

  • 你知道研发的文档有多少种吗?

    这篇继续讲文档能力 文档能力是研发人员必备技能 有时候涉及到的文字沟通 比如邮件沟通等 都需要文档加以辅助说明 那么这时就需要好好设计文档的内容了 有些同学文档内容写的很随意 一眼看上去不知道在讲什么 这时就要用到文档的结构了 你设计的结构
  • android recovery 系统代码分析【精】

    转自 http blog csdn net andyhuabing article details 9226569 http blog csdn net andyhuabing article details 9248713 最近做Reco
  • 超级详细Tcpdump 的用法

    1 抓取回环网口的包 tcpdump i lo 2 防止包截断 tcpdump s0 3 以数字显示主机及端口 tcpdump n 第一种是关于类型的关键字 主要包括host net port 例如 host 210 27 48 2 指明
  • 小车测速模块使用介绍

    测速模块 产品特点 1 使用进口槽型光耦传感器 槽宽度5mm 2 有输出状态指示灯 输出高电平灯灭 输出低电平灯亮 3 有遮挡 输出高电平 无遮挡 输出低电平 4 比较器输出 信号干净 波形好 驱动能力强 超过15mA 5 工作电压3 3V
  • Elasticsearch之映射(mapping)。

    索引中每个文档都有一个类型 type 每个类型拥有自己的映射 mapping 或者模式定义 schema definition 一个映射定义了字段类型 每个字段的数据类型 以及字段被Elasticsearch处理的方式 映射还用于设置关联到
  • 基数排序代码实现

    详情请看排序总结 传送门 https blog csdn net m0 52711790 article details 121914543 基数排序的知识点我就不贴出来 相信都能搜到对应概念解释 下面就直接上代码 代码解释其实也很清晰了
  • Python之tkinter图形界面设计学习二

    图形用户界面 简称GUI 是指采用图形方式显示的计算机操作用户界面 与计算机的命令行界面相比 图形界面对于用户的操作显得更加直观和简便 一 tkinter模块 tkinter是Python的内置GUI模块 使用tkinter可以快速地创建G
  • H5查看pdf文件(pdfh5)

    我用的是 pdfh5 来查看的H5中的pdf文件 使用 pdfh5 插件来打开 pdf文件 下面是两种使用方法 方法一 二都可以 但是我在使用方法二时有卡顿现象 可能是因为未开启懒加载 方法二中的 on 可以打印出来错误信息 使用方法 1
  • java实现图片文字识别的两种方法

    一 使用tesseract ocr 1 https github com tesseract ocr tesseract wiki上下载安装包安装和简体中文训练文件 window64位安装包 tesseract ocr w64 setup
  • debian查看ip地址命令_设备调试、维护最实用网络命令

    ping命令 ping是个使用频率极高的实用程序 主要用于确定网络的连通性 这对确定网络是否正确连接 以及网络连接的状况十分有用 简单的说 ping就是一个测试程序 如果ping运行正确 大体上就可以排除网络访问层 网卡 Modem的输入输
  • 期货ctp基础知识(合约,开仓,平仓,做多,做空,保证金,手续费)

    期货ctp教程地址 期货ctp教程 合约 期货买卖的是合约 股票买卖的是股票 做多和做空 2 1 做多 你就是买入看涨 所以买这个动作对应的指令就是 买开仓 当你赚了或者止损的时候 就要把合约卖掉 对应的指令就是 卖平仓 2 2 做空 你先
  • LabVIEW扫描成像或同步模拟电压生成和数据采集

    大量测量技术涉及探头扫描 同时测量物理量 例如 所有扫描成像方法都是这种情况 因此 数据采集需要高采集率 以及探头控制和测量之间的精确同步 GPScan VI 程序是用于控制 National Instruments 高速数据采集板的通用
  • 类型System.Double的对象无法转换为类型System.Single

    float gt System Single 单精度浮点型 占 4 个字节 double gt System Double 双精度浮点型 占 8 个字节 http msdn microsoft com zh cn library Syste
  • Linux命令(查看目录和切换目录)

    1 查看目录命令 ls 用法 ls 选项 目录名 案例 查看 usr下的所有文件 ls a usr 选项 a显示所有文件包含隐藏文件 l显示长文件信息 2 切换目录命令 cd change directory 用法 cd 目录名 案例 从当
  • npm,cnpm,yarn,pnmp之间的区别

    一 npm 1 由于版本号的影响 所以会造成版本不统一的情况 给定一个版本号 主版本号 次版本号 补丁版本号 以下这三种情况需要增加相应的版本号 主版本号 当API发生改变 并与之前的版本不兼容的时候 次版本号 当增加了功能 但是向后兼容的
  • Flask框架实战

    参考 第 2 章 Hello Flask Flask 入门教程 helloflask com 实战项目为一个基于flask框架实现的观影清单 个人实操后git地址 GitHub 2504973175 watchlist 基于flask框架的
  • Spark 配置

    文章目录 1 Spark 配置 1 1 Spark 属性 1 1 1 动态加载Spark属性 1 1 2 查看Spark属性 1 2 环境变量 2 重新指定配置文件目录 3 继承Hadoop集群配置 4 定制的Hadoop Hive配置 1
  • 动态白盒测试——基本路径测试法

    基本路径测试法 定义 基本路劲测试法是在程序控制流图的基础上 通过分析控制结构的环路复杂性 导出基本可执行路径集合 从而设计测试用例的方法 设计出的测试用例要保证被测程序的每个可执行语句至少被执行一次 点击学习控制流图 步骤 以详细设计或源
  • node.js连接数数据库及对数据库进行操作

    为了安装速度快一些 可以使用淘宝定制的 cnpm gzip 压缩支持 命令行工具代替默认的 npm 之后就可以使用 cnpm 命令来安装模块了 一 安装mysql驱动 cnpm install mysql 二 在工程下新建一个叫connec
  • 软件的可复用性

    1 什么是软件复用 软件复用就是利用已有的软件组件来实现或更新新的软件系统 2 软件复用的两个层面 for reuse 创造层面 开发可复用的软件 with reuse 使用层面 利用已有的可复用软件搭建新的软件应用系统 3 软件复用的优缺