《软件开发编码规范.pptx》由会员分享,可在线阅读,更多相关《软件开发编码规范.pptx(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、*本规范的目的是通过建立编码规范统一每个开发人员的编码习惯,提高程序的可靠性、可读性、可修改性、可维护性及一致性,增加团队合作开发效率,为各项目组之间或项目组内成员之间的技术交流提供一个方便统一的方式。*本规范适用于公司内所有运用JAVA技术的软件项目、产品等的设计、开发以及维护、升级等。*本规范适用于公司所有JAVA软件开发人员。*本规范建议的开发环境与工具如下:*以后版本*插件:MyEclipse6.0以及eclipse3.6以后版本*JDK:Sun JDK 1.5以上*对于代码,首要要求是它必须正确,能够按照设计预定功能去运行;第二是要求代码必须清晰易懂,使软件开发团队中的程序员能够很容
2、易地理解代码。*代码的组织和风格的基本原则是:便于自己的开发,易于与他人的交流。*因个人习惯和编辑器等可以设置和形成自己的风格,但必须前后一致,并符合本规范的基本要求和原则。*缩进:一个TAB 缩进*换行:一般不超过80个字符*间隔:类、方法及功能块间等应以空行相隔*对齐:关系密切的行应对齐,对齐包括类型、修 饰、名称、参数等各部分对齐*括号:括号中的语句应该单独作为一行*public class UserInfoprivate String username=“Harbin”;public static void main()System.out.println(username);*基本原
3、则:注释应该增加代码的清晰度。代码注释 的目的是要使代码更易于被其他开发 人员等理解。注释信息不仅要包括代码的功能,还应给出原因。除变量定义等较短语句的注释可用行尾注释外,其他注释当避免使用行尾注释。*在每个文件、包的头部都应该包含该文件的功能、作用、作者、版权以及创建、修改记录等。并在其中使用版本仓库标记自动跟踪版本变化及修改记录等信息。注意是标准的C-Style/*.*/注释而不是/*.*/形式的JavaDoc 注释,在ECLIPS中使用CODE TEMPLATES会自动添加。*/*(#)Test1.java*Created Date:Sep 11,2008*Copyright(c)Jia
4、ngsu Ecode Co.,Ltd*This software is the confidential and proprietary information of*Jiangsu Ecode Co.,Ltd.(Confidential Information).You shall not*disclose such Confidential Information and shall use it only in *accordance*with the terms of the license agreement you entered into with*Jiangsu Ecode C
5、o.,Ltd.*/*对类、方法、变量等的注释需要符合JavaDoc 规范,对每个类、方法都应详细说明其功能、条件、参数等,并使用良好的HTML 标记格式化注释,以使生成的JavaDoc易阅读和理解。*类注释中当包含版本和作者信息,使用版本仓库的标记自动跟踪版本变化和修改记*录。*/*用于示例的类*author Xiating*version$Rev$*$Id:Test1.java,v 1.2 2008/09/17 02:25:08 cvsroot Exp$*/public class Test1 private static final Logger logger=Logger.getLogg
6、er(Test1.class);/*一个测试的方法*param userid 用户编号*return 返回用户信息对象,若无该用户信息,则返回null*/private UserInfo getStrings(Integer userid)return userInfo;*由/界定,专用于注释代码细节,即使有多行注释也仍然使用/,以便与用/*/注释的失效代码分开除了私有变量外,不推荐使用行末注释。/设置CarBeanfor(int i=0;i 20;i+)/首先需要生成实例CarBean bean=new CarBean();bean.setBaseprice(11);bean.setDesc
7、ription(aa);bean.setName(1111);cdao.save(bean);*注释中的第一个句子要以(英文)句号、问号或者感叹号结束。Javadoc 生成工具会将注释中的第一个句子放在方法汇总表和索引中。*为了在JavaDoc 和IDE 中能快速链接跳转到相关联的类与方法,尽量多的使用see xxx.MyClass,see xx.MyClass#find(String)。*Class 必须以author 作者名声明作者,不需要声明手工指定version 与date,由版本管理系统保留此信息。*如果注释中有超过一个段落,用分隔。*示例代码以包裹。*标识(java keyword
8、,class/method/field/argument 名,Constants)以包裹。*标识在第一次出现时以linkxxx.Myclass注解以便JavaDoc 与IDE 中可以链接。*对于API 函数如果存在契约,必须写明它的前置条件(precondition),后置条件(postcondition),及不变式(invariant)。*对于调用复杂的API 尽量提供代码示例。*对于已知的Bug 需要声明。*在本函数中抛出的unchecked exception 尽量用throws 说明。*注释中的每一个单词都要有其不可缺少的意义,注释里不写param name-名字无意义的内容。*注释的
9、标签必须有内容,不能存在空的param name,空的return。*如果方法允许Null 作为参数,或者允许返回值为Null,必须在JavaDoc 中说明。如果没有说明,方法的调用者不允许使用Null 作为参数,并认为返回值是Null Safe的。/*param actionEvent 买车按钮的动作事件*throws Exception 一般异常*/public void buyCar(ActionEvent actionEvent)throws Exception*规范的命名能使程序更易阅读,从而更易于理解。它们也可以提供一些标识功能方面的信息,有助于更好的理解代码和应用。*使用可以准确
10、说明变量/字段/类/接口/包等的完整的英文描述符。例如,采用类似firstName,listAllUsers 或CorporateCustomer 这样的名字,严禁使用汉语拼音及不相关单词命名,虽然Java 支持Unicode 命名,但本规范规定对包、类、接口、方法、变量、字段等不得使用汉字等进行命名。*采用该领域的术语。如果用户称他们的“客户”(clients)为“顾客”(customers),那么就采用术语Customer 来命名这个类,而不用Client。*采用大小写混合,提高名字的可读性。一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写。包名全部小写。
11、*尽量少用缩写,但如果一定要使用,当使用公共缩写和习惯缩写等,如实现(implement)可缩写成impl,应用程序(application)可缩写成app 等,严禁滥用缩写。*避免使用长名字(最好不超过25 个字母)。*避免使用相似或者仅在大小写上有区别的名字。*避免使用数字,但可用2 代替to,用4 代替for 等,如:go2Jsp。*遇到缩写如XML 时,仅首字母大写,即loadXmlDocument()而不是loadXMLDocument()。*文件名当与其类严格相同,所有单词首字母大写。*包名一般以项目或模块名命名,少用缩写和长名,一律小写。*基本包:co.waycooler,所有包
12、、文件都从属于此包。*包名按规则组成:基本包.项目名.模块名.子模块名.*不得将类直接定义在基本包下,所有项目中的类、接口等都当定义在各自的项目和模块包中。*所有单词首字母大写。使用能确切反应该类、接口含义、功能等的词。一般采用名词。如,Greenhouser、GreenhouseDao等等。接口可以可以在名词前加大写I,如 IGreenhouse。*采用完整的英文大写单词,在词与词之间用下划采用完整的英文大写单词,在词与词之间用下划线连接,如:线连接,如:DEFAULT_VALUE*对不易清楚识别出该变量类型的变量应使用类型缩写作其前缀,如字符串使用strXXX,boolean 使用isXX
13、X,hasXXX 等等。除第一各个单词外其余单词首字母大写。对私有实例变量可使用下划线“_”前缀,但在其存取方法中则应该将其前缀去掉。局部变量及输入参数不要与类成员变量同名(get/set 方法与构造函数除外)。*应采用完整的英文描述符命名组件(接口部件),遵循匈牙利命名法则页面部件名建议命名为:btnOK、lblName 或okBtn、nameLbl。*一个集合,例如数组和矢量,应采用复数采用复数命名来表示队列中存放的对象类型。命名应采用完整的英文描述符,名字中所有非开头的单词的第一个字母应大写,适当使用集合缩写前缀。List userlist;*当面对不可知的调用者时,方法需要对输入参数进
14、行校验,如不符合抛出IllegalArgumentException,建议使用Spring 的Assert 系列函数。*隐藏工具类的构造器,确保只有static 方法和变量的类不能被构造实例。*变量,参数和返回值定义尽量基于接口而不是具体实现类。如:*代码中不能使用System.out.println(),e.printStackTrace(),必须使用logger 打印信息。*类的划分粒度,不可太大,造成过于庞大的单个类,也不可太细,从而使类的继承太深。一般而言,一个类只做一件事;另一个原则是根据每个类的职责进行划分,比如用User 来存放用户信息,而用UserDAO 来对用户信息进行数据访
15、问操作(比如存取数据库),用UserBroker 来封装用户信息的业务操作等等。*多使用设计模式,随时重构。*多个类中使用相同方法时将其方法提到一个接口中或使用抽象类,尽量提高重用度。*将不希望再被继承的类声明成final,例如某些实用类,但不要滥用final,否则会对系统的可扩展性造成影响。*将不希望被实例化的类的缺省构造方法声明成private。*一般而言:接口定义行为,而抽象类定义属性和公有行为,注意两者间的取舍,在设计中,可由接口定义公用的行为,由一个抽象类来实现其部分或全部方法,以给子类提供统一的行为定义,可参考Java 集合等实现。*多使用接口,尽量做到面向接口的设计,以提高系统的
16、可扩展性。*尽量使用组合来代替继承,一则可以使类的层次不至于过深,而且会使类与类,包与包之间的耦合度更小,更具可扩展性。*当需要使用多个构造函数创建类时,建议使用静态工厂方法替代这些构造方法。*一个方法只完成一项功能,在定义系统的公用接口方法外的方法应尽可能的缩*小其可见性。*避免用一个类是实例去访问其静态变量和方法。*避免在一个较长的方法里提供多个出口。*避免过多的参数列表,尽量控制在5 个以内,若需要传递多个参数时,当使*用一个容纳这些参数的对象进行传递,以提高程序的可读性和可扩展性。*参数类型和返回值尽量接口化,以屏蔽具体的实现细节,提高系统的可扩展性。*通常的思想是只对错误采用异常处理
17、:逻辑和编程错误,设置错误,被破坏的*数据,资源耗尽,等等。*通常的法则是系统在正常状态下以及无重载和硬件失效状态下,不应产生任何*异常。*最小化从一个给定的抽象类中导出的异常的个数。*对于经常发生的可预计事件不要采用异常。*不要使用异常实现控制结构。*确保状态码有一个正确值。*在本地进行安全性检查,而不是让用户去做。*若有finally 子句,则不要在try 块中直接返回,亦不要在finally 中直接返*回。*性能与安全:如String 与StringBugffer,使用ArrayList 代替Vector,使用HashMap 代替HashTable。*垃圾回收:释放内存*统一编码格式:避免乱码