欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载
     

    软件重构最新课件.ppt

    • 资源ID:1848103       资源大小:3.63MB        全文页数:102页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    软件重构最新课件.ppt

    浅谈软件重构与性能优化,参考书目,?,?,?,重构,:改善既有代码的设计,作,译,者:,MARTIN FOWLER,者:侯捷,熊节,什么是重构?,?,重构(,Refactoring,):在不改变软件的,功能和外部可见性的情况下,为了改善,软件的结构,提高清晰性、可扩展性和,可重用性而对软件进行的改造,对代码,内部的结构进行优化。,2008-04-02,为什么要重构,?,?,?,?,?,改进软件的设计,提高代码质量,可维护性,Refactoring,帮助尽早的发现错误,(,Defects,),Refactoring,可以提高提高开发速度,2008-04-02,什么时候需要重构,?,?,?,?,在开始增加一个新的功能之前,在修复一个错误的时候,在做,Code Review,的时候,2008-04-02,何时不应该重构,?,?,?,?,代码太混乱,设计完全错误,明天是,DeadLine,重构的工作量显著的影响,Estimate,2008-04-02,重构流程,?,?,?,读懂代码(包括测试例子代码),进行重构,运行所有的,Unit Tests,2008-04-02,重构与设计,?,重构与设计是互补的,程序应该是先设计,而在开始编码后,设计上的不足可以用重,构来弥补,.,设计应该是适度的设计,而不,必过度的设计,.,如果能很容易的通过重构,来适应需求的变化,那么就不必过度的设,计,当需求改变时再重构代码,。,2008-04-02,重构与性能,?,?,?,时间预算法,持续关注法,良好的分解方式,2008-04-02,时间预算法,?,在设计时就对程序花费的时间进行预算,通常用于性能要求极高的实时系统,.,普通,的企业应用程序一般对性能要求不高,.,只,要不太慢就可以了,。,2008-04-02,持续关注法,?,要求程序员在任何时间都要设法保持系,统的高性能,.,这个方法有个缺陷,就是大,部分的程序,90%,的优化工作都是白费劲,这样会浪费大量的时间,。,2008-04-02,良好的分解方式,?,这个方式是在开发程序阶段不对性能投,以任何关注,直到进入性能优化阶段,再,分析程序中性能差的程序,然后对这些程,序进分解,查出性能差的程序,进行优化。,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,(依恋情结),(,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,(过度耦合的消息链),?,(,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,Tests,),?,?,?,(,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,),Introduce,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(,“,*,”,);,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.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() ,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 = _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.toUpperCase().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 & isIEBrowser & 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 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,(替换你的算法),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 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,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-04-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,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,Symbolic,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,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-04-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,(以符号常量,/,字面常量,取代魔法数),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,以,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,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,(合并条件式),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,对象),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,with,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,(以工厂方法取,代构造函数),(,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,(将查询函数和修改函数分离),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-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,),?,?,?,?,?,?,(,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,(折叠继承体系),(,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,(函数下移),2008-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,Delegation,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,谢,谢!,

    注意事项

    本文(软件重构最新课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开