实际中经常用到这样的问题:需要的程序部件和某个已有部件很像,但也略有不同。在这种情况下,一个简单想法就是把原来的代码复制一份,在其基础上修改。但是,一旦复制了代码,引入了重复片段,很多麻烦便会不可避免地出现。维护两份类似代码很麻烦,

  • 不但两者都可能需要修改,
  • 还要确保维护修改的一致性。

1. 重用的实现:通过继承和扩充

面向对象编程技术为解决这方面的问题提供了支持,允许基于已有基类定义新类(派生类)。这种派生类将:

  • (1)继承基类的所有功能(数据域和方法)
  • (2)可以定义新的数据域与方法
  • (3)还可以重新定义基类里已定义的方法(覆盖已有方法)

2. 复用的度量

  • 对于一个函数,如何度量其的复用程度,使用:扇入(fin-in)扇出(fan-out)

    • 扇入:函数内部调用(依赖)的其他函数;
    • 扇出:当前函数,被多少其他函数所依赖;

构建复杂的应用程序 —— 重用与重构相关推荐

  1. 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!

    [CSDN 编者按]"Elixir.Phoenix.Absinthe.GraphQL.React和Apollo"--在这几个关键词中,有几个是身为开发者的你一直想玩但还没来得及玩的 ...

  2. 我如何构建Pomodoro Clock应用程序,以及在此过程中学到的课程

    by Cynthia Lee 辛西娅·李(Cynthia Lee) 我如何构建Pomodoro Clock应用程序,以及在此过程中学到的课程 (How I built my Pomodoro Cloc ...

  3. 如何在 Python 中构建跨平台桌面应用程序

    如何在 Python 中构建跨平台桌面应用程序 开发桌面 GUI 应用程序曾经是一个乏味.容易出错且缓慢的过程. 当然,Python 在整体上极大地简化了应用程序开发,但在 GUI 领域,仍然没有真正 ...

  4. trello_如何构建Trello Chrome扩展程序-API身份验证

    trello 在SitePoint,我们广泛使用Trello. 当然,它有其独特之处,可以在各个领域使用一两个改进,但是在大多数情况下,它彻底改变了工作人员,作者及其编辑的协作经验. 我最近发现自己需 ...

  5. 如何构建Trello Chrome扩展程序-API身份验证

    在SitePoint,我们广泛使用Trello. 当然,它有其独特之处,可以在各个领域使用一两个改进,但是在大多数情况下,它彻底改变了工作人员,作者及其编辑的协作经验. 我最近发现自己需要从非会员的特 ...

  6. 一个关于Java程序安全意识重构的工具

    一个关于Java程序安全意识重构的工具 丸山胜久 日本立命馆大学计算机科学系 maru@cs.ritsumei.ac.jp 大森孝之 日本立命馆大学计算机科学系 takayuki@fse.cs.rit ...

  7. 构建富Internet应用程序 :使用OpenLaszlo、Eclipse Laszlo IDE和Web Tools

    转载自:http://www.bianceng.cn/Programming/Java/201104/25443.htm 开始之前 本教程演示如何使用 OpenLaszlo 平台和 Web 服务来开发 ...

  8. 构建一个移动应用程序要花多少钱?

    构建一个移动应用程序要花多少钱? How much does it cost to build a mobile app? 不幸的是,对于一个移动应用程序的开发成本应该是多少这个问题,没有一个单一的答 ...

  9. 如何构建虚拟护士应用程序?

    如何构建虚拟护士应用程序? How to build a virtual nurse app like Sensely? 传统上,技术的进步引发了企业的变革.由最先进的计算机软件提供的交互式工具意味着 ...

最新文章

  1. 极客新闻——14、陈春花:关于管理,你可能一只有3个误解
  2. 宏基因组扩增子1图表解读-理解文章思路,零基础测序分析图表解读大全(箱线,散点,热,曼哈顿,火山,韦恩,三元,网络),老板再也不愁我的文献阅读了!
  3. 五轴数控转台_各式五轴加工中心的优缺点比较
  4. POJ 3694 (tarjan缩点+LCA+并查集)
  5. 帆软正则表达式定义规则
  6. java软件开发ea介绍_开发说明 — Eacloud 1.0 documentation
  7. ad域 禁用账号_IST-AD域信息同步平台来袭
  8. 检查和变异可查询表达式树
  9. 简单突破数据库备份路径拿shell
  10. 电脑网页如何截取全图(长图)
  11. 基于Microhard P900无人机PIX飞控远距离数传解决方案
  12. 安装redhat系统步骤图解_用u盘安装redhat图文教程
  13. H3C交换机关闭STP生成树协议的方法
  14. 【阿里云盘】2022付费考研课程
  15. [JAVA面试] java面试
  16. [blockchain-042]eos 硅谷ecs docer编译 mongo存储
  17. 冯诺依曼最伟大的发现?----元胞自动机
  18. 迷宫最短路径问题(数据结构4.4.3 拓展)
  19. ul(有序列表)可以排序?
  20. 重学C++笔记之(十三)友元、异常和其他

热门文章

  1. linux快速cd多层目录,linux 下 cd - cd ~- 和多目录切换技巧(示例代码)
  2. python中prompt的意思_PROMPT命令格式是什么意思?
  3. HTML自动刷新页面
  4. matlab file(i).name,求大佬帮忙备注一下,有点看不懂,详细一点
  5. linux去掉日志中的skipping,Linux日志文件总管 logrotate
  6. 内核参数 linux dd,Linux dd 命令详解(测磁盘的吞吐量)
  7. tensorflow精进之路(二十二)——使用slim模型对图像识别与检测(下)(VGG19模型)
  8. Qt总结之十七:QByteArray类型里含中文的数据解析出现乱码
  9. Qt加载osgearth时报错:0x0000xxx处未经处理的异常:0xC00005:写入位置***发生冲突
  10. Linux性能分析工具汇总