08.类设计实战二:求数组并交差集的工具类.pptVIP

08.类设计实战二:求数组并交差集的工具类.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
08.类设计实战二:求数组并交差集的工具类

JavaOOP之 类设计实战二:求数组并交差集的工具类 何杨 2008-06-25 任务 请你设计这样一个工具类,它向外界提供三个关于数组集合运算的函数,这三个函数的参数和返回值都是整形数组,一个函数是求两数组的并集,一个函数求两数组的交集,一个函数求两数组的差集。实现这个任务需要用到的其它子类和内部函数,变量可自由选择。这里不做限制。 请记住设计一个类时一定要方便使用者,尽量不让他产生困惑,设计完毕后要从使用者的角度审视代码并修改以达到最佳效果。 第一步:确定类对外的接口 设计类时我们还是要遵循自顶向下的原则,即先设计类对外的接口。 从需求分析可以得知,类对外有三个函数:用于求数组并集的函数union,求数组交集的函数intersact,求数组差集的函数minus。 上一次实战中,对外接口都是常规函数,判断的依据是它们是都依据实例的状态而变化,这也是判断一个函数是否静态函数的硬指标。在这个例子中,我们可以知道,对外接口的功能是不依据实例变化的,无论类生成多少实例,三个功能只是随着输入参数变化。 为什么有final和私有构造函数 从上面的分析我们可以得知,类的三个对外接口的具体输出都是不依赖实例的,它们的数据来源都是函数参数,符合这样条件的函数就应该被定义成静态函数。 确定三个对外接口后我们再来看看类,这个类生成实例是没有必要的,因为静态公有函数应该用 类名.方法名调用,用实例名.方法名调用虽然能达成功能,但不仅需要多此一举创建一次实例还会引起不必要的误会,因此,干脆把类的构造函数定义成私有以让外界不可见从而不能创建类的实例以免产生这样的效果。 最后,这个类直接使用即可,没有必要再继承一个,我们用final限制了这个类不能被继承,这样的类称为最终类,它意味着继承体系到此结束了,String就是这样的一个类。 用final修饰类,其中全是静态函数,具有私有构造函数是一个工具类的完全形式。 第二步:完善具体实现 既然IntegerArrayUtil不需要生成实例,也不要在多次调用间存贮数据,我们就不必为它设计成员变量,因此接下来的任务就是直接完善三个对外接口。 通过思索我们可以发现,三个函数都有共通的处理,即判断一个整数是否在另一个数组中存在。如果把它做成一个函数,能很大程度上简化三个对外接口函数的代码。 这个函数应该是什么形式的呢,首先,它只被三个函数调用,外界不必知道它的存在,这样把它置为私有就可以了,其次,它的数据来源也是参数而不是成员变量,它也不需要用成员变量在调用间存值,因此它也是一个静态函数,其输出(参数)是一个整数和一个数组,输出是表征整数是否在数组中存在的布尔值。具体如右: 三个函数的完成 在exist函数的帮助下,三个函数的代码就简化很多了,右图是intersact函数的完整代码。 这种用函数调用简化主体函数代码的设计在面向过程时代就风行了,在面向对象的语言中更是需要强调,因为代码越简化,就越容易理解和复用,这样能潜在的增强代码和软件的生命力。在以后的学习和工作中你会发现,一个成功的对外接口背后都有大量的私有函数在默默奉献。 测试代码 最后我们需要以使用者的方式来测试一下这个工具类,值得注意的是方法调用是使用 类名.方法名 的方式调用的,原因前面已经说过了。 所有代码 public final class IntegerArrayUtil{ // 私有构造函数,防止创建IntegerArrayUtil的实例 private IntegerArrayUtil(){ } /** *//** * 取得两数组并集 * @param arr1 * @param arr2 * @return */ public static int[] union(int[] arr1,int[] arr2){ DynamicArray dynamicArray=new DynamicArray(); for(int temp:arr1){ dynamicArray.add(temp); } for(int temp:arr2){ if(!exist(temp,arr1)){ dynamicArray.add(temp); } } return dynamicArray.getArr(); } /** *//** * 取得两数组交集

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档