首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>Java基础>正文

关于提高Java代码可以重用性的三个措施

http://www.oklinux.cn  2008-10-13  ccidnet szbdqn  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

本文介绍了三种修改现有代码提高其可重用性的方法,它们分别是:改写类的实例方法,把参数类型改成接口,选择最简单的参数接口类型。

措施一:改写类的实例方法

通过类继承实现代码重用不是精确的代码重用技术,因此它并不是最理想的代码重用机制。换句话说,如果不继承整个类的所有方法和数据成员,我们无法重用该类里面的单个方法。继承总是带来一些多余的方法和数据成员,它们总是使得重用类里面某个方法的代码复杂化。另外,派生类对父类的依赖关系也使得代码进一步复杂化:对父类的改动可能影响子类;修改父类或者子类中的任意一个类时,我们很难记得哪一个方法被子类覆盖、哪一个方法没有被子类覆盖;最后,子类中的覆盖方法是否要调用父类中的对应方法有时并不显而易见。

任何方法,只要它执行的是某个单一概念的任务,就其本身而言,它就应该是首选的可重用代码。为了重用这种代码,我们必须回归到面向过程的编程模式,把类的实例方法移出成为全局性的过程。为了提高这种过程的可重用性,过程代码应该象静态工具方法一样编写:它只能使用自己的输入参数,只能调用其他全局性的过程,不能使用任何非局部的变量。这种对外部依赖关系的限制简化了过程的应用,使得过程能够方便地用于任何地方。当然,由于这种组织方式总是使得代码具有更清晰的结构,即使是不考虑重用性的代码也同样能够从中获益。

在Java中,方法不能脱离类而单独存在。为此,我们可以把相关的过程组织成为独立的类,并把这些过程定义为公用静态方法。

例如,对于下面这个类:

  class Polygon {
  .
  .
  public int getPerimeter() {...}
  public boolean isConvex() {...}
  public boolean containsPoint(Point p) {...}
  .
  .
  }

我们可以把它改写成:

  class Polygon {
  .
  .
  public int getPerimeter() {return pPolygon.computePerimeter(this);}
  public boolean isConvex() {return pPolygon.isConvex(this);}
  public boolean containsPoint(Point p) {return pPolygon.containsPoint(this, p);}
  .
  }

其中,pPolygon是:

  class pPolygon {
  static public int computePerimeter(Polygon polygon) {...}
  static public boolean isConvex(Polygon polygon) {...}
  static public boolean
  containsPoint(Polygon polygon, Point p) {...}
  }

从类的名字pPolygon可以看出,该类所封装的过程主要与Polygon类型的对象有关。名字前面的p表示该类的唯一目的是组织公用静态过程。在Java中,类的名字以小写字母开头是一种非标准的做法,但象pPloygon这样的类事实上并不提供普通Java类的功能。也就是说,它并不代表着一类对象,它只是Java语言组织代码的一种机制。

在上面这个例子中,改动代码的最终效果是使得应用Polygon功能的客户代码不必再从Polygon继承。Polygon类的功能现在已经由pPolygon类以过程为单位提供。客户代码只使用自己需要的代码,无需关心Polygon类中自己不需要的功能。但它并不意味着在这种新式过程化编程中类的作用有所削弱。恰恰相反,在组织和封装对象数据成员的过程中,类起到了不可或缺的作用,而且正如本文接下来所介绍的,类通过多重接口实现多态性的能力本身也带来了卓越的代码重用支持。然而,由于用实例方法封装代码功能并不是首选的代码重用手段,所以通过类继承达到代码重用和多态性支持也不是最理想的。

共5页: 上一页 1 [2] [3] [4] [5] 下一页

上一篇:Linux 下 Firefox 的字体显示   下一篇:黑莓Linux同步工具发布

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·网友分享:认识java JVM与c/c 的执行效率
·资料分享:Java开发中该注意的一些东西
·教你轻松提高Java代码的性能
·Java开发最容易犯的几种错误
·Java开发中static/this/super/final用法
·网友分享:关于提高自己Java水平十大技术
·Java程序员必须要了解的七个开源协议介绍
·网友经验分享:学好java开发的关键七步
·对于Java开发人员必须遵从的十大基本法则
·Java基础:Java/J2EE中文问题终极解决之道
·初学者学习java第一步——JDK环境变量配置
·代码简单描述 初学Java语言之多态初体验
·教你如何妙用EditPlus 配置Java编译环境
·一个优秀Java程序员必须了解的GC工作原理
·JAVA和.NET两个平台对于安全功能的比较
·Java课堂:初学者都必须理解的几个问题
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·网友分享:认识java JVM与c/c 的执行
·资料分享:Java开发中该注意的一些东西
·教你轻松提高Java代码的性能
·Java开发最容易犯的几种错误
·Java开发中static/this/super/final用
·网友分享:关于提高自己Java水平十大技
·Java程序员必须要了解的七个开源协议介
·网友经验分享:学好java开发的关键七步
·对于Java开发人员必须遵从的十大基本法
·Java基础:Java/J2EE中文问题终极解决
·初学者学习java第一步——JDK环境变量
·代码简单描述 初学Java语言之多态初体
  阅读排行
·使用AJAX技术实现网页无闪自动局部刷新
·高级:lucene全文检索应用示例及代码简
·关于java中相对路径,绝对路径问题总结
·一个非常有趣的使用spring框架AOP例子
·JAVA基础:一个struts hibernate入门实
·Java语言深入--java调用C/C 的过程
·一个基于Java Socket实现文件传输示例
·使用WEBWORK实现文件上传方法实例详解
·Hibernate配置文件中的映射元素详解
·初学者Structs中基本配置入门
·快速教您Apache Tomcat SSL的配置
·在struts里实现dtree通用树型结构讲解
·详细讲解Struts构架中action的跳转大全
·用JSP JavaScript打造二级级联下拉菜单
·基于AJAX的动态树型结构的设计与实现
网摘收藏: