JBuilder2005实现重构之类担任体系间
当前位置:以往代写 > JAVA 教程 >JBuilder2005实现重构之类担任体系间
2019-06-14

JBuilder2005实现重构之类担任体系间

JBuilder2005实现重构之类担任体系间

副标题#e#

在JBuilder中通过重构将值域、要领在类的担任体系中上推下移,长短常容易的操纵。这了说明这种重组成果,我们先来看下面的类担任体系:

JBuilder2005实现重构之类接受体系间

图15 类的担任类图

Animal类是Cat和Horse和父类,Animal中包括了两个值域和一个要领。可以将Animal中的值域有选择地下移到某个子类中。另外,还可觉得Animal提炼超类和接口。

1、搬家要领

打开Animal.java并将光标定位到howl()要领处,通过Ctrl+Shift+R->Push Down Method调出下移要领对话框:

JBuilder2005实现重构之类接受体系间

图16 下移要领

·Method:下移的要领。

·Keep as abstract in current class:暗示在下移要领的同时将类转为抽象类。

·Selected subclasses:列出当前类的所有子类,默认环境下要领将下移到所有子类中,我们打消Cat,仅将howl()下移到Horse中。

要领howl()中引用到Animal类的一个私有变量private int volume,在下移howl()后,该变量变为protected int volume。

上推和下移是相反的操纵,认真将子类中的要领推到父类中去。生存并从头编译工程,打开Horse.java将光标置到howl()要领处:Ctrl+Shift+R->Pull Up Method调出上推的对话框:

JBuilder2005实现重构之类接受体系间

图17


#p#副标题#e#

上推要领

假如需上推的要领引用到了类中的其他要领,这些被引用的要领列在Select dependent members to moves列表中,一般环境下你需要将这些被引用的要领一起上移到父类中。

面向工具的一个重要特性等于子类共享父类的代码,所以当你发明子类的要领或值域是共享性的代码时,你就需要着手将这些代码推到父类中去了,这样代码的复用性将获得晋升。

2、搬家值域

Animal类中有两个值域:

1. protected int weight ;
2. protected int volume = weight ;

我们但愿将volume下移到子类Cat中,光标定位到volume处:Ctrl+Shift+R>Push Down Field调出下移值域的对话框:

JBuilder2005实现重构之类接受体系间

图18 下移值域

·Field:需下移的值域。

·Select subclasses:当前类的子类。在默认环境下,值域下移到所有的子类中,可以通过子类前的复选框作出选择,这里我们去除Horse类前的勾选,即仅下移到Cat中。

·Select dependent members to move:和下移值域相关的所有值域,JBuilder通过下移值域右边的赋值语句找出所有关联的值域,通过关联值域前的复选框抉择是否需要一起下移到子类。默认环境下,JBuilder将关联的属性weight随volume一起下移。

按OK后完成下移。编译工程,打开Horse.java,我们执行下移值域的反操纵:上推值域到Animal类中。

光标定位在Horse.java的volume值域处:Ctrl+Shift+R->Pull Up Field调出上推值域对话框,如下图所示:

JBuilder2005实现重构之类接受体系间

图19

上推值域

点击OK后,volume值域被上推到Horse父类Animal中。

提示:

遗憾的是,JBuilder上推值域并不会像下移值域一样列出所有相关值域,只是简朴的将值域声明代码行上推到父类中。所以假如在值域的界说代码行中引用了类中其它的值域,在上推到父为中时,将会产生语法错误,需要你手工办理。

#p#副标题#e#

3、提炼超类

几个类具有沟通的成果时,就需要提炼出一个超类出来。如跟着需求的变革,我们不单需要对四脚野兽(Animal)予以存眷,还需要对鸟类(Bird)投注眷注,那么在Bird和Animal之上抽象出一个Creature类出来是再适合不外的了。

打开Animal.java,光标移至类名称Animal处:Ctrl+Shift+R->Introduce Superclass for “Animal” 调出提炼超类的对话框,如下图所示:

JBuilder2005实现重构之类接受体系间

图20 提炼超类对话框

在Superclass name中指定超类名Creature,在Package中指定超类地址的包名,默认为当前类地址的包,按OK按钮,JBuilder建设Creature超类,并使Animal类担任这个超类:

代码清单 7 Creature超类

1. package myrefactor ;
2.
3. public class Creature
4. {
5.  public Creature()
6.  {
7.  }
8. }

Animal代码做如下调解

代码清单 8 提炼超类

1. package myrefactor ;
2.
3. public class Animal extends Creature
4. {
5.  …
6. }

由于Creature生成后并未编译,所以Animal类在编辑器中会提示语法错误, JBuilder2005实现重构之类接受体系间呈此刻节制槽上。你可以通过重构信息窗口的JBuilder2005实现重构之类接受体系间 按钮编译重构相关的类以消除这个语法错误。本文后续内容还会遇到相似的环境,办理要领沟通,将不再赘述。

4、提炼接口

#p#分页标题#e#

假设我们需要为动物界说一些配合的习性,可以将类的若干要领提炼出来,用一个接口来表达。打开Animal.java,将光标移到类名Animal处:Ctrl+Shift+R->Extract Interface from Class “Animal”调出提炼接口对话框,如下所示:

JBuilder2005实现重构之类接受体系间

图21 提炼接口对话框

·Interface name:接口名称,填入Habitable。

·Package:包名,接管默认值。

·Available methods:JBuilder将Animal类中所有的public要领列在该列表中,你可以选择需要将哪些要领抽取到接口中。

点击OK完成Habitable接口的提炼。JBuilder建设Habitable接口,并使Animal实现这个接口。

代码清单 9 Habitable接口

1. package myrefactor ;
2.
3. public interface Habitable
4. {
5.  public void howl() ;
6. }

Animal类调解如下:

代码清单 10 提炼接口

1. package myrefactor ;
2. public class Animal extends Creature implements Habitable
3. {
4.  …
5. }

假设你仅但愿将类中的某个要领提炼到一个接口中,你可以直接将光标移至要领名处:Ctrl+Shift+R->Extract to Interface Method更直接地完成这个操纵。

    关键字:

在线提交作业