大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 其他相关 -> 提高Java代码可重用性的三个措施

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

时间: 2021-07-31 作者:daque

正文引见了三种窜改现有代码普及其可重用性的本领,它们辨别是:改写类的范例本领,把参数典型改成接口,采用最大略的参数接口典型。  办法一:改写类的范例本领  经过类接受实行代码重用不是透彻的代码重用本领,所以它并不是最理念的代码重用体制。换句话说,即使不接受所有类的一切本领和数据分子,咱们没辙重用该类内里的单个本领。接受老是带来少许过剩的本领和数据分子,它们老是使得重用类内里某个本领的代码搀杂化。其余,派生类对父类的依附联系也使得代码进一步搀杂化:对父类的变换大概感化子类;窜改父类大概子类中的大肆一个类时,咱们很难牢记哪一个本领被卧类掩盖、哪一个本领没有被卧类掩盖;结果,子类中的掩盖本领能否要挪用父类中的对应本领偶尔并不不言而喻。  任何本领,只有它实行的是某个单一致念的工作,就其自己而言,它就该当是首要选择的可重用代码。为了重用这种代码,咱们必需回归到面向进程的编制程序形式,把类的范例本领移出变成全部性的进程。为了普及这种进程的可重用性,进程代码该当象静态东西本领一律编写:它只能运用本人的输出参数,只能挪用其余全部性的进程,不许运用任何非限制的变量。这种对外部依附联系的控制简化了进程的运用,使得进程不妨简单地用来任何场合。固然,因为这种构造办法老是使得代码具备更明显的构造,纵然是不商量重用性的代码也同样不妨居中获益。  在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类中本人不须要的功效。但它并不表示着在这种新型进程化编制程序中类的效率有所减少。凑巧差异,在构造和封装东西数据分子的进程中,类起到了不行或缺的效率,并且正如正文接下来所引见的,类经过多重接话柄现多态性的本领自己也带来了特出的代码重用扶助。但是,因为用范例本领封装代码功效并不是首要选择的代码重用本领,以是经过类接受到达代码重用和多态性扶助也不是最理念的。  办法二:把参数典型改成接口  正如allen holub在《build user interfaces for object-oriented systems》中所指出的,在面向东西编制程序中,代码重用真实的重心在乎经过接口参数典型运用多态性,而不是经过类接受:  “……咱们经过对接口而不是对类编制程序到达代码重用的手段。即使某个本领的一切参数都是对少许已知接口的援用,那么这个本领就不妨操纵如许少许东西:当咱们编写本领的代码时,那些东西的类以至还不生存。从本领上说,可重用的是本领,而不是传播给本领的东西。”  在“办法一”获得的截止上运用holub的管见,当某块代码不妨编写为独力的全部进程时,只有把它一切类情势的参数改为接口情势,咱们就不妨进一步普及它的可重用本领。过程这个变换之后,进程的参数不妨是实行了该接口的一切类的东西,而不只仅是从来的类所创造的东西。由此,进程将不妨对大概生存的洪量的东西典型举行操纵。  比方,假如有如许一个全部静态本领:  static public boolean contains(rectangle rect, int x, int y) {...}  这个本领用来查看指定的点能否包括在矩形内里。在这个例子中,rect参数的典型不妨从rectangle类变换为接口典型,如次所示:  static public boolean contains(rectangular rect, int x, int y) {...}  而rectangular接口的设置是:  public interface rectangular {rectangle getbounds();}  此刻,一切不妨刻画为矩形的类(即,实行了rectangular接口的类)所创造的东西都不妨动作供给给prectangular.contains()的rect参数。经过放宽参数典型的控制,咱们使本领具备更好的可重用性。  然而,对于上头这个例子,rectangular接口的getbounds本领归来rectangle,你大概会质疑这么做能否真实犯得着。换言之,即使咱们领会传入进程的东西会在被挪用时归来一个rectangle,干什么不径直传入rectangle代替接口典型呢?之以是不这么做,最要害的因为与汇合相关。让咱们假如有如许一个本领: [page_break]static public boolean areanyoverlapping(collection rects) {...}  该本领用来查看给定汇合中的大肆矩形东西能否臃肿。在这个本领的里面,当咱们用轮回顺序考察汇合中的各个东西时,即使咱们不许把东西cast变成rectangular之类的接口典型,又怎样不妨考察东西的矩形地区呢?独一的采用是把东西cast变成它私有的类情势(咱们领会它有一个本领不妨归来矩形),它表示着本领必需事前领会它所操纵的东西典型,进而使得本领的重用限于于那几种东西典型。而这恰是前方这个办法力求先行制止的题目!  办法三:采用最大略的参数接口典型  在实行第二个办法时,该当采用哪一种接口典型来代替给定的类情势?谜底是哪一个接口实足满意进程对参数的需要,同声又具备最少的过剩代码和数据。刻画参数东西诉求的接口越大略,其余类实行该接口的时机就越大——由此,其东西不妨动作参数运用的类也越多。从底下这个例子不妨很简单地看出这一点:  static public boolean areoverlapping(window window1, window window2) {...}  这个本领用来查看两个窗口(假设是矩形窗口)能否臃肿。即使这个本领只诉求从参数赢得两个窗口的矩形坐标,此时相映地简化这两个参数是一种更好的采用:  static public boolean areoverlapping(rectangular rect1, rectangular rect2) {...}  上头的代码假设window典型实行了rectangular接口。过程变换之后,对于任何矩形东西咱们都不妨重用该本领的功效。  有些功夫大概会展示刻画参数需要的接口具有太多本领的情景。此时,咱们该当在全部称呼空间中设置一个新的大众接供词其余面对同一题目的代码重用。  当咱们须要象运用c谈话中的因变量南针一律运用参数时,创造独一的接口刻画参数需要是最佳的采用。比方,假如有底下这个进程:  static public void sort(list list, sortcomparison comp) {...}  该本领应用参数中供给的比拟东西comp,经过比拟给定列表list中的东西排序list列表。sort对comp东西的独一诉求是要挪用一个本领举行比拟。所以,sortcomparison该当是只带有一个本领的接口:  public interface sortcomparison { boolean comesbefore(object a, object b); }  sortcomparison接口的独一手段在乎为sort供给一个它所需功效的钩子,所以sortcomparison接口不许在其余场合重用。  总之,正文三个办法符合于变革现有的、依照面向东西常规编写的代码。这三个办法与面向东西编制程序本领贯串就获得了一种可在此后编写代码时运用的新型代码编写本领,它不妨简化本领的搀杂性和依附联系,同声普及本领的可重用本领和里面凝固力。  固然,这边的三个办法不许用来那些天才就不符合重用的代码。不符合重用的代码常常出此刻运用的展现层。比方,创造步调用户界面包车型的士代码,以及结合到输出事变的遏制代码,都属于那种在步调和步调之间截然不同的代码,这种代码简直不大概重用。 

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.