标签:
软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。
标识符名字应当直观且可以拼读,可望文知意,不必进行“解码”,一般采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名,用词要准确例如“当前值”应该起名currentValue
,写成nowValue
就不准确了,但还凑合,写成dqz
(dang qian zhi 首字母)就是笑话了。
标识符的长度“min-length && max-information”
的原则,比如:maxVal
比 maxValueUntilOverflow
要好些,可以通过去元音法把变量名变短,如returnValue
->rtnVal
,message
->msg
;一般全局变量用具有说明性的名字,局部变量用短名字:单字符的名字,常见的如i,j,k等用作局部变量。
编写代码一个重要的认识是“程序大多时候是给人看的”,编程标准使代码更容易阅读和理解,甚至可以保证其中的错误更少。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
标识符的长度“min-length && max-information”
的原则,比如:maxVal
比 maxValueUntilOverflow
要好些,可以通过去元音法把变量名变短,如returnValue
->rtnVal
,message
->msg
;一般全局变量用具有说明性的名字,局部变量用短名字:单字符的名字,常见的如i,j,k等用作局部变量。
Java中的一般的命名规则有:
结对同学:20135332
http://www.cnblogs.com/wuxiyao/
注意一点,往代码库提交的代码一定编译、运行、测试都没有问题的代码,我们上面测试代码没有问题了,就可以提交了: 如图:我们可以先用git status
查看一下代码状态,显示有未跟踪的代码,并建议用git add <file>...
添加,我们使用git add HelloWorld.*
把要提交的文件的信息添加到索引库中。当我们使用git commit
时,git将依据索引库中的内容来进行文件的提交。这只是在本地操作,关闭实验环境,会删除代码的,如果想把代码保存到远程托管服务器中,需要使用git push
,实验完成前,一定不要忘了使用git push
,否则就是相当于你在Word中编辑了半天文件最后却没有保存。 我们可以修改HelloWorld.java
,如下图所示:
编译、运行、测试没有问题后进行提交,这儿使用的是git commit -a
: ,
我们可以通过git log
查看代码提交记录:
我们先看看重构的概念:
重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。如何保证不改变软件外部行为?重构后的代码要能通过单元测试。如何使其更加易于阅读、易于维护和易于变更 ?设计模式给出了重构的目标。
重构重要吗?你看看Eclipse菜单中有个refactor
菜单就知道了,重构几乎是现代IDE的标配了:
我们在编码标准
中说“给标识符命名”是程序员一项重要技能,以前没有这个意识,现在知道了怎么办?没问题,上图中重构的第一项功能就是Rename
,可以给类、包、方法、变量改名字。 例如这有个ABC
类:
这个类,类名,方法名和方法的参数名都有问题,没有注释的话是无法理解代码的。我们可以使用Eclipse中的重构功能来改名。修改方法是,用鼠标单击要改的名字,选择Eclipse中菜单中的Refactor
->Rename...
:
重构完的效果如下:
功能不变,代码水平立马上了一个档次,体会到命名的威力了吧?
Eclipse中菜单中的Refactor
->Encapsulate Field...
,如下图:
注意分析一下重构前后的代码变化: 同样可以封装id
和age
两个成员变量,结果如下:
上面第34,35行还是有问题的,每次打印学生信息都这么写代码违反了DRY原则,造成代码重复,正常的重构可以使用Eclipse中的Extract Method...
,如下图:
由于Java中所有的类都有个专门的toString方法,我们使用Eclipse中Source
->Generate toString()...
给Student
类产生一个toString
方法,如下图:
修改main的代码,结果如下:
大家想一想,这样重构后有什么好处?重构有什么问题吗?
我们要修改软件,万变不离其宗,无非就是四种动机:
Duplicated Code
就是[同一个class内的两个方法含有相同表达式(expression)]。这时候你需要做的就是采用Extract Method
提炼出重复的代码,然后让这两个地点都调用被提炼出来的那一段代码。Extract Method
,然后再对被提炼出的代码使用Pull Up Method
,将它推入superclass内。Extract Method
将相似部分和差异部分割开,构成单独一个方法。然后你可能发现或许可以运用Form Template Method
获得一个Template Method
设计模式。Substitute Algorithm
将其它方法的算法替换掉。Duplicaded Code
,你应该考虑对其中一个使用Extract Class
,将重复代码提炼到一个独立class中,然后在另一个class内使用这个新class。但是,重复代码所在的方法也可能的确只应该属于某个class,另一个class只能调用它,抑或这个方法可能属于第三个class,而另两个classes应该引用这第三个class。你必须决定这个方法放在哪儿最合适,并确保它被安置后就不会再在其它任何地方出现。其他Bad Smell
与相应的重构手法如下表所示:
Eclipse中Refactor
菜单中的重构手法的应用时机如下图所示:
更完整的手法可以参考《重构》作者Martin Fowler的博客。Eclipse中基本手法的使用大家可以参考任何人都可以重构来进行学习实践。
一个完整的重构流程包括:
我们结合Git给出一个比较完整的例子。
结对同学:20135332
http://www.cnblogs.com/wuxiyao/
refactor
菜单下的重构技能不要少于5个
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 40min | |
设计 | 50min | |
代码实现 | 324min | |
测试 | 300min | |
分析总结 | 400min |
1.《解析极限编程》 2.《构建之法 (电子版)》,著者邹欣Blog 3.《结对编程技术》 4.《版本控制之道》 5.《重构》 6.《重构与模式》 7.《程序设计实践》
标签:
原文地址:http://www.cnblogs.com/zhengwei0712/p/4552232.html