- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高级Java程序设计V0.1.ppt
高级Java程序设计 编码的艺术 代码的价值: 告诉计算机应该怎么执行以完成软件的功能 告诉未来的代码修改者(包括代码原作者本人)代码的功能是什么 两种“代码观” : 代码是指令的序列,在指令的驱动下,计算机完成期望的功能 代码是语义的组合,每行代码体现一定的语义,所有代码语义的综合形成了系统的功能语义 概念与命名 下面将合适的命名给予上面的代码: 1. 名副其实的功能描述 上面的代码中maxScore表示最低成绩,下面的代码就容易产生误解: if(minScore actualScores[i]) { minScore = actualScores[i]; } 2.有意义的区分 命名应该能够区分在相同场景中同类型的不同对象 例如在结婚登记管理系统中打印结婚证的方法如下: void printMarriageCertificate(Person person1,Person person2) { System.out.println(“丈夫姓名:”+person1.getName); System.out.println(“妻子姓名:”+person2.getName); //… } 两个参数person1、person2这两个参数就没有区分性,哪个表示男性,哪个表示女性 把参数命名改为: void printMarriageCertificate(Person husband,Person wife) { System.out.println(“丈夫姓名:”+ husband.getName); System.out.println(“妻子姓名:”+ wife.getName); //… } 3.遵循惯例 在同一个软件项目或者团队中,同样的概念应该用同样的名称。 容易让人产生误解的代码一定是“臭”的代码。例如: private float calculateAvgScore(float rawScores[],int judgeLevels[]) { float maxGrade = 0; float minGrade = 0; float actualScores[] = new float[rawScores.length]; //…… } 4.添加有意义的语境 命名应该根据代码所在的语境确定 public class Student { private string name; private string state; //表示学生居住的国家 private string street; //表示学生居住的街道 } 修改后代码为: public class ResidenceAddress { private string state; private string street; } public class Student { private string name; private ResidenceAddress residenceAddress; } 5.命名符合自然语言的语法 单复数:如果要命名的对象是在数量上复数,就要复数形式。集合类型的变量命名经常是复数形式。 时态:在代码编写时主要涉及到一般现在时、过去时、现在进行时、将来时等时态,通常命名是用一般现在时,当如果强调已经完成的状态就需要用过去时,如果需要强调正在进行,就需要要现在进行时。 词性:在命名时主要用到的词性有:名词、动词、形容词,不同对象的命名应该使用不同词性的词或者短语,类的名称需要使用名词或者名词短语,方法的名称应该是动词或者动词短语,变量、参数、属性的命名应该使用名词或者形容词。 6.缩略词 单词的缩略方法应该遵循英语的惯例 1、拿掉所有元音 2、保留前几个字母 3、保留开头和结尾个发音字母 4、根据发音 函数 1.单一功能 重构上面代码的方法就是把上面的代码加权折算分成两个方法:calculateActualScores(),calculateAvgScore()。 2.抽象层次 3.函数长度 函数把代码从“怎么做”的语义转换成了“做什么”的语义,而“做什么”是在高一级抽象层次上所关心的。如果在写代码时,发现一部分代码感觉需要以注释来说明其功能时,就可以把这部分代码封装为函数,无论语句的长短。 例如: if( ((this.职称.equals(“教授”) or (this.职称.equals(“副教授”)) and this.学历.equals(“硕士”) ) or this.学历.equals(“博士”) ) { this.工资 += Salary.高级人才津贴; }
文档评论(0)