`

eclipse重构

 
阅读更多
重构和单元测试是程序员的两大法宝,他们的作用就像空气和水对于人一样,平凡,不起眼,但是意义深重。预善事,必先利器,本文就介绍怎样在Eclipse中进行重构。

  本文介绍了Eclipse支持的重构种类,它们的含义,以及怎样重构。本文同时也可以作为学习重构知识的快速手册。

什么是重构
  重构是指在保持程序的全部功能的基础上改变程序结构的过程。重构的类型有很多,如更改类名,改变方法名,或者提取代码到方法中。每一次重构,都要执行一系列的步骤,这些步骤要保证代码和原代码相一致。

为什么重构很重要   
  手工重构时,很容易在代码中引入错误,例如拼写错误或者漏掉了重构的某一步。为了防止引入错误,在每次重构前后,都要执行充分的测试。你可能会好奇重构是否是值得的。
重构的理由很多。你可能想要更新一段代码很烂的程序。或者最初的设计队伍都不在了,现在队伍中每人了解这些程序。为了更新,你必须要重新设计构建程序来满足你的需求。另一个原因是原来的设计无法使你将新的特性添加进去。为了添加进去,你要重构这些代码。第三个原因是一个自动重构的工具可以为你自动生成代码,例如Eclipse中的重构功能。使用重构,你可以在重写尽量少的代码和仍保持软件功能的同时,使代码的逻辑性更好。

测试
  在重构时,测试是十分重要的。应为重构改变了代码的结构,你要保证重构后代码的功能没有被改变。手工重构时,一个好的测试套是必须的。使用自动重构工具是,测试也是必要的,但不需要很频繁,应为自动重构工具不会产生手工重构时的那些错误,如拼写错误。
  在Eclipse中可以使用JUnit方便的为程序创建测试代码,具体方法不在本文描述。

Eclipse中的重构
  JDT,Eclipse中的Java插件,能够对Java项目,类,或成员进行多种类型的自动重构。可以采取多种方法快速的为Java项目中的某个元素进行重构。
  为某些元素进行重构的前提是你必须选中他们。你可以在多个视图中选择这些元素,像大纲视图或包浏览视图。可以按住Ctrl或Shift键,在视图中选择多个元素。另外一种选择的方法是使该元素的编辑区高亮显示,或者把鼠标定位到源程序文件。在选中希望重构的元素后,可以从重构菜单的下拉项选择重构,也可以从右键单击后弹出菜单中选择重构子菜单。同时,Eclipse还提供了重构的快捷键操作。
  某些重构可以应用在任意元素上,有些则只能用在特定类型的元素上,如类或方法。在本文的最后的表格中,列出了重构能够应用的元素类型,以及重构的快捷键。
  在Eclipse中,所有的重构都能够在正式执行之前预览一下。在重构对话框中点击“预览”按钮,可以查看所有将要被改变的地方。唯一没有预览按钮的的重构是Pull Up,在它的重构向导中,到最后,预览面板总会出现。可以将其中的个别变化反选掉,这样这些改变就不会生效。

撤销和重做
  在重构菜单中有撤销和重做项。他们和编辑菜单中的撤销重做不同。即使重构改变了很多文件,编辑菜单中的撤销重做只会更改当前文件。重构菜单中的撤销和重做则会对一次重构的所有文件进行撤销和重做操作。但是在使用时,它们有一定的限制。
  重构后,无论重构改变了文件与否,如果任一个文件被另外改变而且保存了,你就无法撤销或重做这个重构。假如一个文件在重构中被修改了,然后又被编辑了,但是还没有保存,这时就会有错误信息提示,如果你想要撤销或重做该重构,必须撤销未保存的文件。
  只要注意到以上的限制条件,你就可以随心所欲的对重构进行撤销或重做。你甚至能够编译,运行你的程序测试一下,然后再撤销该重构,只要你没有改变并保存任何文件。

Eclipse中的重构类型
       如果你看一下Eclipse的重构菜单,可以看到四部分。第一部分是撤销和重做。其他的三部分包含Eclipse提供的三种类型的重构。
第一种类型的重构改变代码的物理结构,像Rename和Move。第二种是在类层次上改变代码结构,例如Pull Up和Push Down。第三种是改变类内部的代码,像Extract Method和Encapsulate Field。这三部分的重构列表如下。

类型1 物理结构
l         Rename
l         Move
l         Change Method signature
l         Convert Anonymous Class to Nested
l         Convert Member Type to New File


类型2 类层次结构
l         Push Down
l         Push Up
l         Extract Interface
l         Generalize Type (Eclipse 3)
l         User Supertype Where Possible
类型3 类内部结构
l         Inline
l         Extract Method
l         Extract Local Variable
l         Extract Constant
l         Introduce Parameter
l         Introduce Factory
l         Encapsulate Field

Rename:
       Rename用来改变一个Java元素的名字。虽然你可以手工改变Java文件Java元素的名字,但是这样不能自动更新所有引用它们的文件或Java元素。你必须在项目中搜索文件然后手工替换这些引用。很可能你就会漏掉一个或者改错一个。Rename重构会智能的更新所有有此引用的地方。
       有时候,Java元素的名字不是很明了,或者它的功能已经改变了。为了保持代码的可读性,该元素的名字也要更新。使用Rename重构,能够十分快捷的更新元素的名字和所有引用它的地方。
       要为一个Java元素改名,在包浏览视图或大纲视图选中该元素,从重构菜单中选择Rename项,或者使用快捷键Alt+Shift+R。Rename对话框会出现。在这里添入新的名字,选择是否更新该元素的引用。点击预览按钮,会打开预览窗口,在这里,你可以看到那些内容会被改变。点击OK按钮,重构结束。

Move
       Move和Rename很相似。它用来把元素从一个位置移动到另一个位置。它主要用来将类从一个包移动到另一个包。选中要移动的元素,从重构菜单中选择Move,或者使用快捷键,Alt+Shift+V,在弹出窗口中选择要移动的目的地。你仍然可以用预览功能检查一下有什么改变,也可以按OK按钮直接让其生效。

Change Method Signature
       更改方法签名能够改变参数名,参数类型,参数顺序,返回类型,以及方法的可见性。也可以添加,删除参数。
       要执行此重构,选择要重构的方法,选中重构菜单的更改方法签名项,会出现更改方法签名对话框。

在此对话框中选择方法的修饰词,返回类型,参数。参数的添加,修改,移动,删除可以通过右边的按钮控制。当添加新的参数时,会自动赋予默认值。凡是调用此方法的地方都会用此默认值作为参数输入。
       改变方法签名可能在方法中导致问题,如果有问题,当你点击预览或OK时,会被标记出来。

Move Members Type to New File
       此重构将嵌套类转为一个单独类。将会创建一个新的Java文件包含此嵌套类。选中要重构的类,在重构菜单上选择Move Member Type to New File项,在弹出的对话框中添入要创建的实例的名字。

Push Down
       此重构将算中的方法和成员从父类中移动到它的直接子类中,所有下推的方法都可选作为一个抽象方法留在父类中。下推重构对于重新构建项目设计十分有用。
         选择若干方法或成员,从重构菜单中选择下推项,弹出下推对话框。
        
       在此对话框中,可以分别选择方法或成员,所有选中元素都会移动到当前类的子类中。当点击Add Required按钮时,所有已选择元素所必需的元素也会自动选上,此行为并不能保证所有必须的元素都能自动选中,还是需要人工确认。当有方法被选中时,编辑按钮就会可用,点击编辑按钮,弹出编辑对话框。在其中可以选择为选中方法在当前类中遗留抽象方法,还是在当前类中删除这些方法。双击一天选中的方法,也可以打开编辑对话框。在方法的Action列点击,会出现一个下拉列表,可以在其中选择遗留抽象方法还是在当前类中删除方法。按回车键确认编辑结果。


Pull Up
       上移与下推类似,也是在类之间移动方法和成员。上移将方法或成员从一个类移动到它的一个父类中。选中若干个方法或成员,在重构菜单中选择上移项,上移向导马上会出现。
       在选择目标类多选框中,列出了当前类继承的所有父类。你只能将方法或成员移动到它们其中的一个里面。
       如果在选中方法的Action列,被设置成在目标类中声明抽象方法,那么在目标类的非抽象子类中创建必须的方法选项变为可选。当它选中时,目标类的所有子类,如果它们中没有选中的方法,则会为它们创建选中的方法。
       和在下推中一样,选择多个方法,点击编辑按钮,或者双击一个方法,都会打开编辑成员对话框。其中有两个选项,上移和在目标类中声明抽象方法。上移只是简单的复制方法到到父类中,并提供选择是否在当前类中删除该方法。在目标类中声明抽象方法会在父类中创建一个选中方法的抽象方法,如果父类不是抽象类则置为抽象类,最后选中方法留在当前类中。和在下推中一样,也可以点击Action列,可以在出现的下拉列表中选择。
       如果方法的Action列选为上移,在下一步的向导中,将会要求你选择是否在当前类中删除这些方法,选中的方法会在当前类中被删除。
       在向导的任意一步都可以按完成按钮,结束重构操作,此时按照默认规则进行重构。

Extract Interface
       提炼接口可以从一个存在的类中创建一个接口。你可以选择在接口中包含着个类的那些方法。选中一个类,从重构菜单选择提炼接口项,就可以打开提炼接口对话框。
       这此对话框中添入接口的名字,选择希望包含的方法,在这个列表里面只列出了公共方法。选中改变对类[当前类名]的应用为对接口的引用选择框,将把所有对当前类的引用更新为对此接口的引用。

Generalize Type
       泛化类型重构可以将一个声明对象的类型改变为它的超类,选择变量,参数,对象成员,方法返回类型,然后选择重构菜单的泛化类型项。在打开的泛化类型对话框,选择希望的新类型,然后点击完成按钮,结束重构。

Use Supertype Where Possible
       使用超类会将对一个特定类型的引用改变为对它的超类的引用。选择一个类,选中重构菜单的使用超类项,会打开使用超类对话框。选中希望的超类类型,点击完成按钮完成重构。重构后,instanceof 表达式也会做相应的替换。

Inline
       内联是用代码或值来取代调用方法的地方,静态final对象成员,或局部变量。比如说,如果你内联一个方法调用,这个调用的地方就会被替换为该方法体。要内联一个方法,静态final对象成员,局部变量,选中这些元素,在重构菜单中选择内联项,或者使用快捷键Alt + Ctrl + I。在随后打开的内联对话框,你可以选择是否要内联所有的调用,或者是选择的调用。如果选择所有调用,你还可以选择是否删除声明本身。
Extract Method
       如果方法中含有过多特定的操作,方法太长,或者其中的某段代码被多次使用,这时,可以用提炼方法重构将这部分代码提取到单独的方法中。在Eclipse中应用此重构方便快捷。
       选中要提炼的代码段,从重构菜单中选择提炼方法项,或者使用快捷键Alt + Shift + M。
       在提炼方法对话框中,输入新方法的名字,选择修饰词,选择是否让新方法抛出运行时异常。在底部提供了新方法的预览。
 
Extract Local Variable
       使用一个变量来代替一个表达式有很多好处。如果表达式在多处被使用,这样能够提高性能,而且也提高了代码的可读性。要把一个表达式提炼为局部变量,选择要提炼的表达式,从重构菜单中选择提炼局部变量项,或者使用快捷键Alt + Shift + L。
       在提炼局部变量对话框中输入新变量的名字,选择是否要替换所有的表达式,是否使此变量为final。在对话框的底部提供变量的预览。
       
Extract Constant
       提炼常量与提炼局部变量很相似,唯一的区别是提炼常量重构可以选择提炼出的常量的修饰词,而且此常量将作为类的成员变量。
 
Introduce Parameter
       介绍参数重构在方法中创建新的参数,然后用此新参数取代局部变量或者成员变量的实例。要是用此重构,选中方法中一个成员变量或局部变量的引用,然后从重构菜单中选择介绍参数项。
 
Introduce Factory
       工厂是用来创建新对象,返回新创建对象的方法。你可以选择一个类的构造方法,从重构菜单中选择介绍工厂项,应用此重构,为此类创建工厂方法。
       
在介绍工厂对话框,输入工厂方法的名字和需要工厂方法创建的对象的名字。选择构造方法的修饰词是否为私有。
       点击OK按钮后,在指定的类中会出现此指定工厂方法。此方法创建一个当前类的实例,然后返回此实例。
 
Convert Local Variable to Field
       转换局部变量为成员变量重构,将方法内的变量声明移动到方法所在类中,使该变量对整个类可见。选择一个局部变量,从重构菜单中选择转换局部变量为成员变量项,随后打开配置的对话框。
       
       在此对话框中,添入成员变量的名字,选择修饰词,选择在哪里实例化此成员变量。随后的声明为静态,声明为final 选择项是否可以使用,取决于实例化位置的选择情况。
 
Encapsulate Field
       要正确的实践面向对象编程,应该将成员变量的修饰词置为私有,提供相应的访问器来访问这些成员变量。但是这些操作很烦琐。如果使用了封装成员变量重构,则十分方便。选择一个成员变量,从重构菜单中选择封装成员变量项。
 
       在封装局部变量对话框中,添入Getter, Setter方法的名字,选择新方法在哪个方法后出现。选择合适的修饰词。应用了此重构会创建两个新方法,将此成员变量的修饰词置为私有,将对此成员变量的引用改变为对新方法的引用。
 
重构项列表:
       下表从Eclipse帮助中提取,列出了各种重构支持的Java资源类型,对应的快捷键。
 
名字 可应用的Java元素 快捷键 Undo 在一次重构后可执行 Alt + Shift + Z Redo 在一次撤销重构后可执行 Alt + Shift + Y Rename 对方法,成员变量,局部变量,方法参数,对象,类,包,源代码目录,工程可用。 Alt + Shift + R Move 对方法,成员变量,局部变量,方法参数,对象,类,包,源代码目录,工程可用。 Alt + Shift + V Change Method Signature 对方法可用。 Alt + Shift + C Convert Anonymous Class to Nested 对匿名内部类可用。   Move Member Type to New File 对嵌套类可用。   Push Down 对同一个类中成员变量和方法可用。   Pull Up 对同一个类中成员变量和方法,嵌套类可用。   Extract Interface 对类可用。   Generalize Type 对对象的声明可用。   Use Supertype Where Possible 对类可用。   Inline 对方法,静态final类,局部变量可用。 Alt + Shift + I   Extract Method 对方法中的一段代码可用。 Alt + Shift + M   Extract Local Variable 对选中的与局部变量相关的代码可用。 Alt + Shift + L   Extract Constant 对静态final类变量,选中的与静态final类变量相关的代码可用。   Introduce Parameter 对方法中对成员变量和局部变量的引用可用。   Introduce Factory 对构造方法可用。   Convert Local Variable to Field 对局部变量可用。 Alt + Shift + F Encapsulate Field 对成员变量可用。 
       本文介绍了Eclipse提供的各种重构。这些重构易于使用,可以确保代码重构更加方便安全。而且可以自动生成代码以提高生产率。

       某些重构改变了某些类的结构,但没有改变项目中其他类的结构,如下推,上移重构。这时,就要确保项目中所有对改变元素的引用都要被更新。这也是为什么要有一个好的测试套。同时,你也要更新测试套中的对改变元素的引用。所以说,重构和单元测试的有机结合对于软件开发是多么的重要。
分享到:
评论

相关推荐

    eclipse 重构

    "512572.htm"可能是一篇关于Eclipse重构的详细教程或文章,可能涵盖了如何使用Eclipse的重构功能,例如如何执行“提取方法”来减少代码重复,如何“重命名”变量或类以保持一致性,以及如何“移动”代码片段到更合适...

    Eclipse中自动重构实现探索

    我们将通过一个具体的程序实例来展示Eclipse重构的几个关键步骤。 首先,Eclipse的重命名功能可以方便地更新所有相关引用,无论是方法、字段还是变量。在本例中,我们使用《Refactoring:Improving the Design of ...

    在eclipse中实施重构.pdf

    ### 在Eclipse中实施重构 #### 重构介绍 重构是一种重要的软件工程实践,指的是在不改变软件外部行为的前提下,对代码进行改进的过程。这一过程旨在优化代码结构,提高代码的可读性和可维护性,同时减少未来的修改...

    refactor-to-ec:将Java流重构为惯用的Eclipse集合的示例

    重构到ec 该项目包含将Java流重构为惯用的Eclipse集合的示例。重构集合:使Java Streams更精简,更干净描述寻找优化Java应用程序的方法? 是否希望看到切实的内存节省以及更清晰,更易读的代码? 是否希望为函数式...

    《软件开发工具》第9章使用Eclipse进行C\C++开发.ppt

    9.3 使用Eclipse重构功能 Eclipse的重构功能可以帮助开发者对代码进行结构上的修改,而不影响其功能。例如,它可以重命名变量、函数,提取方法,移动代码片段等,同时更新所有相关的引用,使得代码维护更加便捷。 ...

    2022自考软件开发工具部分简答题_编程题(Eclipse)宣贯.pdf

    * 重构功能:使用Eclipse重构功能,可以在不影响程序行为的情况下进行系统范围内的代码更改。 * 抽取方法:将程序中多次出现的代码段抽取出来形成方法,可以减少代码的长度并增加程序的可读性和易维护性,同时使方法...

    最新版自考软件开发工具复习资料(7-13章).pdf

    【Eclipse重构】 重构是不改变代码外在行为的情况下,改善代码结构的过程。Eclipse的重构功能包括重命名变量、抽取方法和抽取常量,提高代码可读性和维护性。 【Eclipse搜索】 Eclipse搜索功能分为基本的查找/替换...

    2022年Eclipse中自动重构实现探索Java教程.docx

    在本文中,我们将深入探讨如何在Eclipse集成开发环境中利用自动重构功能来优化Java代码。Eclipse的自动重构工具为开发者提供了强大的支持,包括但不限于重命名、移动方法、内联、抽取方法和更改方法特征符等功能。...

    Eclipse代码重构全攻略:提升代码质量与开发效率的实践指南

    Eclipse是一个开放源代码的、可扩展的集成开发环境(IDE)。最初由IBM公司开发,后来由Eclipse基金会管理。Eclipse主要用于Java语言的开发,但通过安装各种插件,它可以扩展支持其他编程语言和平台,例如C/C++、...

    Eclipse智能提示及快捷键

    Eclipse重构快捷键是指在代码重构时使用的shortcut键,它可以帮助用户快速完成代码重构任务。常用的Eclipse重构快捷键包括: 1. Alt+Shift+Z:撤销重构。 2. Alt+Shift+M:抽取方法。 3. Alt+Shift+L:抽取局部变量...

    在Eclipse中的重构的知识点

    在Eclipse中进行重构是提升代码质量和可维护性的重要手段,它涉及到一系列的代码修改操作,但不改变程序的功能。Eclipse提供了丰富的重构工具,帮助开发者高效地进行代码优化。以下是一些主要的重构知识点: 1. **...

    eclipse下的js插件

    在IT行业中,Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java开发领域享有盛誉。然而,Eclipse的功能并不仅限于Java,它也支持多种其他编程语言,包括JavaScript(JS)。针对JS开发,Eclipse提供了丰富...

    2018最新Eclipse下载安装包

    - **重构**:Eclipse提供了丰富的重构工具,如重命名、提取方法、移动文件等。 - **构建工具**:Maven和Gradle插件使得Eclipse能很好地管理依赖和构建流程。 - **调试**:Eclipse的调试器支持断点、单步执行、...

    AngularJS Eclipse 1.2.0 插件下载

    8. **代码重构**:提供代码重构工具,帮助开发者安全地修改代码结构,而不影响应用的运行。 在压缩包中,`content.jar`和`artifacts.jar`通常包含了插件的运行时内容和元数据信息。`features`目录下的文件描述了...

    Eclipse基础教程(中文)

    此外,Eclipse还支持代码重构,如重命名变量、提取方法等,这些都能帮助开发者保持代码的整洁和可维护性。 在调试方面,Eclipse提供了强大的调试工具。通过设置断点、单步执行、查看变量值、调用栈分析等手段,可以...

    Eclipse教程-Eclipse实战视频教程

    同时,Eclipse的重构工具如提取方法、重命名变量等,能让你的代码更加整洁和易于维护。 6. 使用插件:Eclipse的一大优势在于其丰富的插件库,例如Mylyn用于任务管理,Subversive或Git插件用于版本控制,JUnit进行...

Global site tag (gtag.js) - Google Analytics