软件重构最新课件.ppt

上传人:小飞机 文档编号:1848103 上传时间:2022-12-21 格式:PPT 页数:102 大小:3.63MB
返回 下载 相关 举报
软件重构最新课件.ppt_第1页
第1页 / 共102页
软件重构最新课件.ppt_第2页
第2页 / 共102页
软件重构最新课件.ppt_第3页
第3页 / 共102页
软件重构最新课件.ppt_第4页
第4页 / 共102页
软件重构最新课件.ppt_第5页
第5页 / 共102页
点击查看更多>>
资源描述

《软件重构最新课件.ppt》由会员分享,可在线阅读,更多相关《软件重构最新课件.ppt(102页珍藏版)》请在三一办公上搜索。

1、浅谈软件重构与性能优化,参考书目,?,?,?,重构,:改善既有代码的设计,作,译,者:,MARTIN FOWLER,者:侯捷,熊节,什么是重构?,?,重构(,Refactoring,):在不改变软件的,功能和外部可见性的情况下,为了改善,软件的结构,提高清晰性、可扩展性和,可重用性而对软件进行的改造,对代码,内部的结构进行优化。,2008-04-02,为什么要重构,?,?,?,?,?,改进软件的设计,提高代码质量,可维护性,Refactoring,帮助尽早的发现错误,(,Defects,),Refactoring,可以提高提高开发速度,2008-04-02,什么时候需要重构,?,?,?,?,在

2、开始增加一个新的功能之前,在修复一个错误的时候,在做,Code Review,的时候,2008-04-02,何时不应该重构,?,?,?,?,代码太混乱,设计完全错误,明天是,DeadLine,重构的工作量显著的影响,Estimate,2008-04-02,重构流程,?,?,?,读懂代码(包括测试例子代码),进行重构,运行所有的,Unit Tests,2008-04-02,重构与设计,?,重构与设计是互补的,程序应该是先设计,而在开始编码后,设计上的不足可以用重,构来弥补,.,设计应该是适度的设计,而不,必过度的设计,.,如果能很容易的通过重构,来适应需求的变化,那么就不必过度的设,计,当需求改

3、变时再重构代码,。,2008-04-02,重构与性能,?,?,?,时间预算法,持续关注法,良好的分解方式,2008-04-02,时间预算法,?,在设计时就对程序花费的时间进行预算,通常用于性能要求极高的实时系统,.,普通,的企业应用程序一般对性能要求不高,.,只,要不太慢就可以了,。,2008-04-02,持续关注法,?,要求程序员在任何时间都要设法保持系,统的高性能,.,这个方法有个缺陷,就是大,部分的程序,90%,的优化工作都是白费劲,这样会浪费大量的时间,。,2008-04-02,良好的分解方式,?,这个方式是在开发程序阶段不对性能投,以任何关注,直到进入性能优化阶段,再,分析程序中性能

4、差的程序,然后对这些程,序进分解,查出性能差的程序,进行优化。,2008-04-02,代码编写的,22,宗罪,(,Bad,Smells,in,Code,),?,?,?,?,?,?,?,?,?,?,?,(,1,),Duplicated,Code,(重复的代码),(,2,),Long,Method,(过长函数),(,3,),Large,Class,(过大类),(,4,),Long,Parameter,List,(过长参数列),(,5,),Divergent,Change,(发散式变化),(,6,),Shortgun,Surgery,(霰弹式修改),(,7,),Feature,Envy,(依恋情结)

5、,(,8,),Data,Clumps,(数据泥团),(,9,),Primitive,Obsession,(基本型别偏执),(,10,),Switch,Statements,(,switch,惊悚现身),(,11,),Parallel,Inheritance,Hierarchies,(平行继承体系),2008-04-02,?,(,12,),Lazy,Class,(冗赘类),?,(,13,),Speculative,Generality,(夸夸其谈未来性),?,(,14,),Temporary,Field,(令人迷惑的暂时值域),?,(,15,),Message,Chains,(过度耦合的消息链)

6、,?,(,16,),Middle,Man,(中间转手人),?,(,17,),Inappropriate,Intimacy,(狎昵关系),?,(,18,),Alternative,Classes,with,Different,Interfaces,同工的类),?,(,19,),Incomplete,Library,Class,(不完善的程序库类),?,(,20,),Data,Class,(纯稚的数据类),?,(,21,),Refused,Bequest,(被拒绝的遗赠),?,(,22,),Comments,(过多的注释),2008-04-02,(异曲,建立测试体系,(,Building,Test

7、s,),?,?,?,(,1,)自我测试码(,Self-testing,Code,)的价值,(,2,)可以参考,JUnit,测试框架(,Testing,Framework,),(,3,)添加更多测试,2008-04-02,重新组织你的函数,(,Composing,Methods,),?,?,?,?,?,?,?,?,?,(,1,),Extract,Method,(提炼函数),(,2,),Inline,Method,(将函数内联化),(,3,),Inline,Temp,(将临时变量内联化),(,4,),Replace,Temp,With,Query,(以查询取代临时变量),(,5,),Introdu

8、ce,Explaining,Variable,(引入解释性变量),(,6,),Split,Temporary,Variable,(剖解临时变量),(,7,),Remove,Assignments,to,Parameters,(移除对参数的赋值动,作),(,8,),Replace,Method,with,Method,Object,(以函数对象取代函数),(,9,),Substitute,Algorithm,(替换你的算法),2008-04-02,Extract,Method,(提炼函数),void printOwing() ,/print banner,System.out.println(,

9、“,*,”,);,System.out.println(,“,Banner,”,);,System.out.println(,“,*,”,);,/print details,System.out.println (name: + _name);,System.out.println (amount +,getOutstanding();,void printOwing(),printBanner();,printDetails(getOutstanding();,V,oid printBanner(),/print banner,System.out.println(“*”);,System.

10、out.println(“Banner”);,System.out.println(“*”);,void printDetails (double outstanding),System.out.println (name: + _name);,System.out.println (amount + outstanding);,2008-04-02,Inline,Method,(将函数内联化),int getRating() ,return (moreThanFiveLateDeliveries() ? 2 : 1; ,boolean moreThanFiveLateDeliveries()

11、 ,return _numberOfLateDeliveries 5;,int getRating() ,return (_numberOfLateDeliveries 5) ? 2 : 1;,2008-04-02,Inline,Temp,(将临时变量内联化),double basePrice = anOrder.basePrice();,return (basePrice 1000) ;,return (anOrder.basePrice() 1000) ;,2008-04-02,Replace,Temp,With,Query,(以查询取代临时变量),double basePrice = _

12、quantity * _itemPrice;,if (basePrice 1000),return basePrice * 0.95;,else return basePrice * 0.98;,if (basePrice() 1000),return basePrice() * 0.95;,else return basePrice() * 0.98;,double basePrice() return _quantity * _itemPrice; ,2008-04-02,Introduce,Explaining,Variable,(引入解释性变量),if ( (platform.toUp

13、perCase().indexOf(MAC) -1),& (browser.toUpperCase().indexOf(IE) -,1),& wasInitialized(),& resize 0 ), / do something ,final boolean isMacOs = atform.toUpperCase().indexOf(MAC) -1;,final boolean isIEBrowser = browser.toUpperCase().indexOf(IE) -1;,final boolean wasResized = resize 0;,if (isMacOs & isI

14、EBrowser & wasInitialized() & wasResized) / do something ,2008-04-02,Remove,Assignments,to,Parameters,(移除对参数的赋值动作),int discount (int inputVal, int quantity, int yearToDate),if (inputVal 50) inputVal -= 2;,int discount (int inputVal, int quantity, int yearToDate) ,int result = inputVal; if (inputVal

15、50) result -= 2;,如果参数是,Object,容易误赋值。采用,final,来防止误用参数,2008-04-02,Replace,Method,with,Method,Object,(以函数对象取代函数),class Order.,double price() ,double primaryBasePrice;,double secondaryBasePrice;,double tertiaryBasePrice;,/ long computation; .,或者可以采用,static method,2008-04-02,Substitute,Algorithm,(替换你的算法)

16、,String foundPerson(String people),for (int i = 0; i people.length; i+) ,if (peoplei.equals (Don),return Don;,if (peoplei.equals (John) ,return John;,if (peoplei.equals (Kent),return Kent;,return ;,String foundPerson(String people),List candidates,= Arrays.asList(new String,Don,John, Kent);,for (int

17、 i=0; ipeople.length; i+),if (candidates.contains(peoplei),return peoplei; return ;,2008-04-02,在对象之间移动特性,(,Moving,Features,Between,Objects,),?,?,?,?,?,?,?,?,(,1,),Move,Method,(搬移函数),(,2,),Move,Field,(搬移值域),(,3,),Extract,Class,(提炼类),(,4,),Inline,Class,(将类内联化),(,5,),Hide,Delegate,(隐藏委托关系),(,6,),Remove

18、,Middle,Man,(移除中间人),(,7,),Introduce,Foreign,Method,(引入外加函数),(,8,),Introduce,Local,Extension,(引入本地扩展),2008-04-02,Move,Method,(搬移函数),2008-04-02,Move,Field,(搬移值域),2008-04-02,Extract,Class,(提炼类),2008-04-02,Inline,Class,(将类内联化),2008-04-02,Hide,Delegate,(隐藏委托关系),2008-04-02,Remove,Middle,Man,(移除中间人),2008-0

19、4-02,Introduce,Foreign,Method,(引入外加函数),2008-04-02,Introduce,Local,Extension,(引入本地扩展),2008-04-02,重新组织你的数据,(,Organizing,Data,),?,?,?,?,?,?,?,?,?,(,1,),Self,Encapsulate,Field,(自封装值域),(,2,),Replace,Data,Value,with,Object,(以对象取代数据值),(,3,),Change,Value,to,Reference,(将实值对象改为引用对象),(,4,),Change,Reference,to,

20、Value,(将引用对象改为实值对象),(,5,),Replace,Array,with,Object,(以对象取代数组),(,6,),Duplicate,Observed,Data,(复制被监视数据),(,7,),Change,Unidirectional,Association,to,Bidirectional,(,将,单,向,关,联,改,为,双,向,),(,8,),Change,Bidirectional,Association,to,Unidirectional,(将双向关联改为单向),2008-04-02,?,(,9,),Replace,Magic,Number,with,Symbo

21、lic,Constant,?,(,以,符,号,常,量,/,字,面,常,量,取,代,魔,法,数,(,10,),Encapsulate,Field,(封装值域),?,(,11,),Encapsulate,Collection,(封装群集),?,(,12,),Replace,Record,with,Data,Class,(以数据类取代记录),?,(,13,),Replace,Type,Code,with,Class,(以类取代型别码),?,(,14,),Replace,Type,Code,with,Subclasses,?,(以子类取代型别码),?,(,15,),Replace,Type,Code,

22、with,State/Strategy,?,(以,State/Strategy,取代型别码),?,(,16,),Replace,Subclass,with,Fields,(以值域取代子类),2008-04-02,),Self,Encapsulate,Field,(自封装值域),2008-04-02,Replace,Data,Value,with,Object,(以对象取代数据值),2008-04-02,Change,Value,to,Reference,(将实值对象改为引用对象),2008-04-02,Change,Reference,to,Value,(将引用对象改为实值对象),2008-0

23、4-02,Replace,Array,with,Object,(以对象取代数组),2008-04-02,Duplicate,Observed,Data,(复制被监视数据),2008-04-02,Change,Unidirectional,Association,to,Bi,directional,(,将单向关联改为双向),2008-04-02,Change,Bidirectional,Association,to,Unidirec,tional,(将双向关联改为单向),2008-04-02,Replace,Magic,Number,with,Symbolic,Constant,(以符号常量,/

24、,字面常量,取代魔法数),2008-04-02,Encapsulate,Field,(封装值域),2008-04-02,Encapsulate,Collection,(封装群集),2008-04-02,Replace,Record,with,Data,Class,(以数据类取代记录),2008-04-02,Replace,Type,Code,with,Class,(以类取代型别码),2008-04-02,Replace,Type,Code,with,Subclasses,(以子类取代型别码),2008-04-02,Replace,Type,Code,with,State/Strate,gy,以

25、,State/Strategy,取代型别码),2008-04-02,Replace,Subclass,with,Fields,(以值域取代子类),2008-04-02,?,简化条件表达式,2008-04-02,简化条件表达式,?,?,?,?,?,?,?,?,?,?,(,1,),Decompose,Conditional,(分解条件式),(,2,),Consolidate,Conditional,Expression,(合并条件式),(,3,),Consolidate,Duplicate,Conditional,Fragments,(合并重复的条件片段),(,4,),Remove,Control

26、,Flag,(移除控制标记),(,5,),Replace,Nested,Conditional,with,Guard,Clauses,(以卫语句取代嵌套条件式),(,6,),Replace,Conditional,with,Polymorphism,(以多态取代条件,式),(,7,),Introduce,Null,Object,(引入,Null,对象),(,8,),Introduce,Assertion,(引入断言),2008-04-02,Decompose,Conditional,(分解条件式),2008-04-02,Consolidate,Conditional,Expression,(合

27、并条件式),2008-04-02,Consolidate,Duplicate,Conditional,Fragments,(合并重复的条件片段),2008-04-02,Remove,Control,Flag,(移除控制标记),2008-04-02,Replace,Nested,Conditional,with,Guard,Clauses,以卫语句取代嵌套条件式),2008-04-02,Replace,Conditional,with,Polymorphism,(以多态取代条件式),2008-04-02,2008-04-02,Introduce,Null,Object,(引入,Null,对象),

28、2008-04-02,Introduce,Assertion,(引入断言),2008-04-02,简化函数调用,(,Making,Method,Calls,Simpler,),?,?,?,?,?,?,?,(,1,),Rename,Method,(重新命名函数),(,2,),Add,Parameter,(添加参数),(,3,),Remove,Parameter,(移除参数),(,4,),Separate,Query,from,Modifier,(将查询函数和修,改函数分离),(,5,),Parameterize,Method,(令函数携带参数),(,6,),Replace,Parameter,w

29、ith,Explicit,Methods,(以,明确函数取代参数),(,7,),Preserve,Whole,Object,(保持对象完整),2008-04-02,?,?,?,?,?,?,?,?,(,8,),Replace,Parameter,with,Method,(以函数取代参数),(,9,),Introduce,Parameter,Object,(引入参数对象),(,10,),Remove,Setting,Method,(移除设值函数),(,11,),Hide,Method,(隐藏你的函数),(,12,),Replace,Constructor,with,Factory,Method,(

30、以工厂方法取,代构造函数),(,13,),Encapsulate,Downcast,(封装向下转型动作),(,14,),Replace,Error,Code,with,Exception,(以异常取代错误码),(,15,),Replace,Exception,with,Test,(以测试取代异常),2008-04-02,Rename,Method,(重新命名函数),2008-04-02,Add,Parameter,(添加参数),2008-04-02,Remove,Parameter,(移除参数),2008-04-02,Separate,Query,from,Modifier,(将查询函数和修改

31、函数分离),2008-04-02,Parameterize,Method,(令函数携带参数),2008-04-02,Replace,Parameter,with,Explicit,Methods,(以明确函数取代参数),2008-04-02,Preserve,Whole,Object,(保持对象完整),2008-04-02,Replace,Parameter,with,Method,(以函数取代参数),2008-04-02,Introduce,Parameter,Object,(引入参数对象),2008-04-02,Remove,Setting,Method,(移除设值函数),2008-04-

32、02,Hide,Method,(隐藏你的函数),2008-04-02,Replace,Constructor,with,Factory,Method,(以工厂方法取代构造函数),2008-04-02,Encapsulate,Downcast,(封装向下转型动作),2008-04-02,Replace,Error,Code,with,Exception,(以异常取代错误码),2008-04-02,Replace,Exception,with,Test,(以测试取代异常),2008-04-02,处理概括关系,(,Dealing,with,Generalization,),?,?,?,?,?,?,(

33、,1,),Pull,Up,Field,(值域上移),(,2,),Pull,Up,Method,(函数上移),(,3,),Pull,Up,Constructor,Body,(构造函数本体上移),(,4,),Push,Down,Method,(函数下移),(,5,),Push,Down,Field,(值域下移),(,6,),Extract,Subclass,(提炼子类),2008-04-02,?,?,?,?,?,?,(,7,),Extract,Superclass,(提炼超类),(,8,),Extract,Interface,(提炼接口),(,9,),Collapse,Hierarchy,(折叠继

34、承体系),(,10,),Form,Template,Method,(塑造模板函数),(,11,),Replace,Inheritance,with,Delegation,(以委托,取代继承),(,12,),Replace,Delegation,with,Inheritance,(以继承,取代委托),2008-04-02,Pull,Up,Field,(值域上移),2008-04-02,Pull,Up,Method,(函数上移),2008-04-02,Pull,Up,Constructor,Body,(,构造函数本体上移,),2008-04-02,Push,Down,Method,(函数下移),2

35、008-04-02,Push,Down,Field,(值域下移),2008-04-02,Extract,Subclass,(提炼子类),2008-04-02,Extract,Superclass,(提炼超类),2008-04-02,Extract,Interface,(提炼接口),2008-04-02,Collapse,Hierarchy,(折叠继承体系),2008-04-02,Form,Template,Method,(塑造模板函数),2008-04-02,Replace,Inheritance,with,Delegation,(以委托取代继承),2008-04-02,Replace,Del

36、egation,with,Inheritance,(以继承取代委托),2008-04-02,大型重构(,Big,Refactorings,),?,?,?,?,?,(,1,),Tease,Apart,Inheritance,(疏理并分解,继承体系),(,2,),Convert,Procedural,Design,to,Objects,(将过程化设计转化为对象设计),(,3,),Separate,Domain,from,Presentation,(将,领域和表述,/,显示分离),(,4,),Extract,Hierarchy,(提炼继承体系),2008-04-02,Tease,Apart,Inheritance,(疏理并分解继承体系),2008-04-02,Convert,Procedural,Design,to,Objects,(将过程化设计转化为对象设计),2008-04-02,Separate,Domain,from,Presentation,(将,领域和表述,/,显示分离),2008-04-02,Extract,Hierarchy,(提炼继承体系),2008-04-02,更多学习经验的总结,需要大家共同努力,2008-04-02,谢,谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号