




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文档版本:V1.0文档编号:TS204秘级:仅供内部使用模板版本:V 1.3本模板最后修订日期:2013-08-29移动开发编程规范Android For QOE北京直真科技股份有限公司2013年08月29日历史记录版本编制审核批准更改记录发布人日期审核人日期批准人日期1.0陈健平2013.08.29何利文、曾波2013/9/4创建目录1阅读对象42参考文献43术语和缩写44引言75编程规范75.1命名规范75.1.1包命名规则85.1.2类命名规则85.1.3变量命名规则95.1.4常量命名规则95.1.5方法命名规则105.1.6组件命名规则105.1.7layout命名规则115.1.8资源文件命名规则115.1.9id命名规则115.2注释约定115.2.1类注释145.2.2变量常量注释145.2.3方法注释155.2.4Java 注释的三种类型155.2.5Javadoc的快速浏览165.3异常处理175.4日志处理175.5开发环境版本规范176成员函数可见性177Java编程技巧187.1更好的组织代码187.2把常量放到比较表达式的左侧187.3聪明的使用final197.4最小化公共和保护接口197.5参数和返回值198程序设计风格198.1风格格式208.2使用空格208.3限制代码行的长度208.4给常量一个名字208.5代码分段/缩进208.6多行语句的处理218.7在代码中使用空行218.8遵循 30 秒条法则218.9写短小单独的命令行218.10说明运行顺序21921种代码的坏味道2210版本控制241 阅读对象本文的阅读对象是使用Java作为编程语言的开发人员,主要针对Android开发的一些规则定义。2 参考文献项目的编码规范遵守Android和Java的编码规范。具体可查看/source/code-style.html公司的JAVA编程规范.doc建议完整阅读完这些文档,其中包含很多有用信息。3 术语和缩写存取函数 修改或者返回字段值的成员函数。也叫访问修改程序。参见获取函数和设置函数。分析模式 描述一个业务/领域解决方案的建模模式。反模式 一种解决一般问题的方法,可及时地证明是否错误或无效。字段 用来描述一个类或者类的实例的数据类型或其它对象的变量。实例字段描述对象(实例),静态字段描述类。字段也被称为字段变量和属性。BDK Beans 开发工具 (Beans development kit)。块 包含在大括号内的零个或多个语句的集合。括号 即字符 和 ,分别叫开括号和闭括号,用来定义一个块的开始和结束。类 创建对象的定义或模板。类测试 确信一个类及其实例能如所定义的那样工作的行为。CMVC 配置和版本控制。编译单元 存在于磁盘上的物理源码文件或是存放在一个数据库中的“虚拟”源码文件,类和接口在其中定义。组件 象列表、按钮或者窗口那样的接口部件。构造函数 完成对象创建时任何所需的初始化成员函数。容器 包含有其它对象的对象,它与其它对象合作来完成自身的行为。这可以通过使用内部类 (JDK 1.1+) 或者一个对象内其它类的实例集合 (JDK 1.0+) 来实现。C 语言风格的注释 一种 Java 注释语句格式 /* 和 */,取自 C/C+ 语言,它可用于生成多行注释。通常用来“注释掉”测试中不需或者不想要的代码行。设计模式 描述一个设计问题的解决方案的建模形式。析构函数 一个用来当一个对象不再需要时从内存中删去该对象的 C+ 类成员函数。因为 Java 管理自身的内存,所以这种函数不需要。但 Java 支持一个功能上类似的叫做 finalize() 的成员函数。文档注释 一个 Java 注释格式 /* 和 */,可由 javadoc 处理,来给一个类文件提供外部说明。对于接口、类、成员函数和字段的主要说明应用文档注释来写。字段 参见“属性”。finalize() 在一个对象从内存里删除之前的“垃圾收集”过程中被自动调用的成员函数。这个成员函数的目的是做所有必需的清扫工作,如关闭打开文件。垃圾收集 不再使用的对象被自动地从内存中删除的自动内存管理。Getter 一种返回字段值的存取成员函数。获取函数可用来回答常量值,实现时常常最好是将常量作为静态字段,因为这种方法更加灵活。HTML 超文本标记语言,用于生成网页的工业标准形式。行内注释 (Inline comments) 用一行紧接在同一行代码之后来说明这行源码的注释方法。虽然也可采用 C 语言风格的注释,但此种情况下,单行注释更被典型应用。接口 包含成员函数和字段的公共标识定义,使用接口的类必须支持接口。 通过组合,促成了接口的多态性。不变量 一套有关实例或类在所有“稳定”时间片内为“真”的声明。“稳定时间片”是指在一个成员函数被对象/类调用之前和调用之后的时间。Java 一种工业标准的面向对象的开发语言。它非常适合于开发 Internet 的应用程序以及必须在多种计算平台上运行的应用程序。javadoc 含在 JDK 中的一个工具,用于处理 Java 源码文件并生成一个 HTML 格式的外部文件,该文件基于源码文件中的注释语句说明源码文件的内容。JDK Java 开发工具 (Java Development Kit)。滞后初始化 (Lazy initialization) 一种在字段第一次被需要时才在相应的获取成员函数中初始化该字段的技巧。 滞后初始化用于当一个字段并非经常使用时,以及字段需要大量的内存来存放或者需要从永久存取中读出时。局部变量 在一个块的作用域内,通常时一个成员函数内,定义的变量。一个局部变量的作用范围是定义它的块。成员函数 与一个类或者类的实例相关的一段可执行代码。将一个成员函数作为一个函数面向对象的等价物。成员函数标识 .参见“标识”。方案测试 确信一个成员函数能如所定义的那样工作的行为。名字隐藏 给一个字段/变量/参数取的名字与另一个更高作用范围内同类的名字相同,或者至少相似的做法。 名字隐藏最经常的滥用方式是将一个局部变量取了一个与实例字段相同的名字。应避免名字隐藏,因为它使你的代码难于理解并且容易出错。重载 成员函数过载是指在一个类(或者子类)中成员函数被不止一次地定义,而每次定义的唯一区别只是标识的不同。覆盖 成员函数覆盖是指它在一个子类中被重新定义,其标识与原先相同。包 相关类的集合。分段 一种在代码块的范围内让代码缩进一个单位,使其与块外的代码区别开来的技巧,通常是缩进一个水平制表符的距离。分段有助于提高代码的可读性。参数 传给一个成员函数的实数。一个参数可以是一个已定义的类型,例如字符串、整型、或者对象。后置条件 在一个成员函数运行结束时为“真”的属性或者声明。前置条件 让一个函数可以正确运行的限制条件。属性 参见“字段”。设置函数 给一个字段设值的存取成员函数。单行注释 一种 Java 注释格式 /,取自 C/C+ 语言,常用做内部成员函数的业务逻辑注释。标记 用于标注文档注释特定部分的一个约定,文档注释将被 javadoc 处理,生成看上去专业化的注释。标记的例子,如 see 和 author。测试集 用于检测代码的成员函数集合。UML 统一建模语言,是一种工业标准建模符号。可见性 用来描述类、成员函数或字段的封装程度的技术。关键字 public,protected 和 private 可被用来定义可见性。空白 为提高代码可读性而加入的空行、空格和制表符。部件 参见“组件”。4 引言编写本规范的目的是为了进一步规范JAVA软件编程风格,提高软件源程序的可读性、可靠性和可重用性,确保在开发成员或开发团队之间的工作可以顺利交接,不必花很大的力气便能理解已编写的代码,以便继续维护和改进以前的工作,提高软件源程序的质量和可维护性,减少软件维护成本。本规范的内容包括:代码布局、注释、命名规则、声名、表达式与语句、类与接口等。本规范分成规则性和建议性两种:对于规则性规范,要求所有软件开发人员严格执行;对于建议性规范,开发人员可以根据实际情况选择执行。自本规范实施之日起,以后新编写的和修改的代码均应执行本规范。5 编程规范 没有规范是完美的,也没有规范是适应各种情况的:有时你会发现自己在一个或多个规范都不适用的情况里。 考虑规范的主要指示:当你违背一个规范时,将其注释出来。除了这个规范之外的所有规范都可以违背。如果违背了,你必须说明为什么你要违背这个规范,违背这个规范可能产生的影响,以及规范被应用于这个场合之前可能/必须出现的任何条件。5.1 命名规范我们将在整个规范中讨论命名约定,所以让我们先熟悉几个基本点: 1、使用可以准确说明变量/字段/类的完整的英文描述符 2、采用该领域的术语。3、采用大小写混合,提高名字的可读性。 4、尽量少用缩写,但如果一定要使用,就要谨慎地使用。5、避免使用相似或者仅在大小写上有区别的名字6、避免使用下划线作为名字的首末字母。5.1.1 包命名规则工程文件夹名aware工程包名com.zznode.qoeUI界面positecom.zznode.qoe.videocom.zznode.qoe.webcom.zznode.qoe.uploadcom.zznode.qoe.ping服务接口com.zznode.qoe.service服务实现com.zznode.qoe.service.impl接口协议层f公用工具类com.zznode.qoe.utils全局公共类、常量类所在包命名规范:mon常量类所在包命名规范:mon.constant5.1.2 类命名规则类的一些重要规范基于: 1、可见性2、命名约定 3、注释约定 4、声明约定 5、公共和保护接口当一个类是另一个类的工厂(Factory)时, 应当在类的名称加上“Factory”CustomerFactory当一个类仅仅是对一个接口提供实现时, 应该在接口的名称上加上“Impl”当一个类为一个接口提供适配器时,应当在接口的名称上加上“adapter”类、接口命名以大写字母开头,如果有多个单词,每个单词头字母大写例如:AreaInfo接口命名以大写字母I开头,如果有多个单词,每个单词头字母大写例如:IAreaInfo接口实现类命名:将实现的接口名称的首字母I去掉,以Impl作为结尾,如果有多个单词,每个单词头字母大写。例如:AreaInfoImplJavaBean命名:首字母大写,建议以名词命名。业务逻辑接口命名:业务逻辑接口的命名以功能或模块名称来制定例如:一个日志记录的功能,其对应的业务逻辑接口为ILogService业务逻辑实现类命名:业务逻辑接口实现类的命名以以功能模块名称来制定例如:一个日志记录的功能,对应的业务逻辑接口实现类名为LogServiceImpl5.1.3 变量命名规则变量名首字母必须小写,如果该变量名有多个单词组成,后面的单词首字母大写,单词与单词之间不要使用_做连接,变量名访问控制必须为私有, 可以对其增加setter与getter方法。象数组或者矢量这样是集合的字段,命名时应使用复数来表示它们代表多值,不允许出现无意义的单词。5.1.4 常量命名规则所有字母大写,如果有多个单词组成,单词与单词之间以” _“隔开。而 且该变量必须是公共、静态、final类型,不允许出现无意义的单词例如:public static final String RESULT_TYPE=”1”;5.1.5 方法命名规则首字母必须小写,如果该变量名有多个单词组成,后面的单词首字母 大写,单词与单词之间不要使用_做连接。单词建议使用动词,不要使用名词命名。类中常用方法的命名:1. 类的获取方法(一般具有返回值)一般要求在被访问的字段名前加上get,如getFirstName(),getLastName()。一般来说,get前缀方法返回的是单个值,find前缀的方法返回的是列表值。2. 类的设置方法(一般返回类型为void):被访问字段名的前面加上前缀set,如setFirstName(),setLastName().3. 类的布尔型的判断方法一般要求方法名使用单词is或has做前缀,如isPersistent(),isString()。或者使用具有逻辑意义的单词,例如equal 或equals。 4. 类的普通方法一般采用完整的英文描述说明成员方法功能,第一个单词尽可能采用动词,首字母小写,如openFile(),addCount()。5.构造方法应该用递增的方式写。(参数多的写在后面)。6.toString()方法:一般情况下,每个类都应该定义toString(),5.1.6 组件命名规则应采用完整的英文描述符命名组件(接口部件),名字的后缀是组件类型名。这让你容易区分一个组件的目的和它的类型,容易在一个表里找到各个组件(许多可视化的编程环境在一个 Applet 程序或者一个应用程序中提供了一个所有组件的列表。如果所有名字都是类似于 button1, button2, & 这样的话,很容易混淆)。示例:okButtoncustomerListfileMenunewFileMenuItem也可用匈牙利表示法来表示示例:btnOklblCustomermenuFilemiNewFile5.1.7 layout命名规则res/layout文件夹命名规范:统一用小写和下划线_组合命名,建议xml文件加个前缀以便区分,如:对话框的xml配置文件:dlg_name.xml;5.1.8 资源文件命名规则res/drawable文件命名规范:统一用小写加下划线“_”组合命名,同上,每个资源文件最好加个前缀以便区分,如:btn_default.png,btn_pressed.png,btn_focus.xml;5.1.9 id命名规则规约:layout 中所使用的id必须以全部单词小写,单词间以下划线分割,并且使用名词或名词词组,并且要求能够通过id直接理解当前组件要实现的功能。如:某TextView +id/textbookname 错误!应为+id/book_name_show 如:某EditText +id/textbookname 错误!应为+id/book_name_edit5.2 注释约定注释规范是整个开发规范中最为重要的组成部分,必须严格执行。建议使用开发工具eclipse自动配置生成文件头注释在Eclipse中,选择菜单Window-Preferences选择Java-Code Style-Code Templates,点击edit按钮,或者点击Import按钮,选择附带的注释模板文件,按确定。当需要新增加类或接口时,使用菜单File-New-Class,输入相应的信息,并选中对话框最底下的Generate comments,按Finish即可。1、注释应该增加代码的清晰度。 2、避免使用装饰性内容,也就是说,不要使用象广告横幅那样的注释语句。3、保持注释的简洁。 4、先写注释,后写代码。5、注释信息不仅要包括代码的功能,还应给出原因。5.2.1 类注释作用:注释整个类,简单概述该类作用。书写规范:类的注释必须写在该类的声明语法之前。在注释中要描述该类的基本作用,作者,日期,版本,公司名称,版权声明。可以使用html一些标签装饰。格式: /* * * 类功能描述:(大致描述类的功能) * author:编写者名称* * version: 类文件的版本号 从1.0开始(自己确定版本号的增改 * 情况), 修改情况(修改时间、作者、改动情况)* see 包名.参考类名 (列出父类,引入类,每个类占一行),如果有* 可省略 * 相关数据如:(便于理解本类的一些常量数据及某些数据的格式 * 或认为比较重要的数据,如果没有可省略) */ 类的声明语法例如:/* Title:日志管理类 * Description: 日志增删改操作* Copyright: Copyright (c) 2013* Company:zznode* * author jianping.chen* * version $Revision: 3.0 $ $Date: 2013/09/03$ */public class LogManager5.2.2 变量常量注释作用:简单描述该变量的意义。书写规范:变量注释必须写在变量定义之前,简单描述其代表的意义。格式:/* * 变量功能描述:(大致描述变量的功能)*/例如: /* * 测速类型 */public int resultType;5.2.3 方法注释作用:对该方法功能简单描述,其参数、返回值意义的注解。书写规范:方法注释必须写在方法定义之前。该注释包括:方法其功能的简单 描述,方法的参数、返回值类型、返回值意义简单的描述。格式:/* * 方法功能说明 * param args (参数类型可以写在参数后,也可以省 * 略。每个参数占一行) * return 输出参数(多种情况写在同一行) * see 类#参考方法 (与此方法有调用关系的方法供参 * 考,不必每个方法都完整列出,要选择有意义的,每个 * 方法占一行) * exception 异常处理类(方法中能够引发的异常,每 * 个异常占一行) */5.2.4 Java 注释的三种类型Java 有三种注释语句风格:以 /* 开始, */ 结束的文档注释,以 /* 开始,以 */ 结束的C语言风格注释,以及以 / 开始,代码行末尾结束的单行注释。下表是对各类注释语句建议用法的一个概括,也给出了几个例子。注释语句类型用法示例文档注释在接口、类、成员函数和字段声明之前紧靠它们的位置用文档注释进行说明。文档注释由 javadoc 处理,为一个类生成外部注释文档,如下所示。/* *Customer (顾客).顾客是指*作为我们的服务及产品的销售*对象的任何个人或组织。*author xiaodi.zhang*/C 语言风格注释采用 C 语言风格的注释语句将无用的代码注释掉。保留这些代码是因为用户可能改变想法,或者只是想在调试中暂时不执行这些代码。/* 这部分代码已被它前面的代码替代,所以于 1999 年6 月 4 日被 B. Gustafsson 注释掉。如果两年之后仍未用这些代码,将其删除。. . . (源代码)*/单行注释在成员函数内部采用单行注释语句对业务逻辑、代码片段和临时变量声明进行说明。/ 因为让利活动 / 从 1995 年 2 月开始,/ 所以给所有超过 $1000 的/ 发货单 5% 的折扣。强烈反对采用行内注释,即在一行的末尾加上注释。5.2.5 Javadoc的快速浏览Sun 公司的 JDK 中有一个名为 javadoc 的程序。它可以处理 Java 的源代码文件,并且为 Java 程序产生 HTML 文件形式的外部注释文档。Javadoc 生成的文档为其他开发员使用你的程序提供了帮助。 Javadoc 支持一定数目的标记,标识注释文档中各段起始位置的保留字。详情请参考 JDK javadoc 文档。标记用于目的author name类、 接口说明特定某一段程序代码的作者。每一个作者各有一个标记。deprecated类、 成员函数说明该类的应用程序编程接口 (API) 已被废弃,因此应不再使用。exception name description成员函数说明由成员函数发出的异常。一个异常采用一个标记,并要给出异常的完整类名。param name description成员函数用来说明传递给一个成员函数的参数,其中包括参数的类型/类和用法。每个参数各有一个标记。return description成员函数若成员函数有返回值,对该返回值进行说明。应说明返回值的类型/类和可能的用途。since类、成员函数说明自从有 JDK 1.1 以来,该项已存在了多长时间。see ClassName类、接口、成员函数、字段在文档中生成指向特定类的超文本链接。可以并且应该采用完全合法的类名。see ClassName#member functionName类、接口、成员函数、字段在文档中生成指向特定成员函数的超文本链接。可以并且应该采用完全合法的类名。version text类、接口说明特定一段代码的版本信息。你注释代码的方式很大地影响着你的工作效率以及所有维护改进代码的后继开发者的工作效率。在软件开发过程中及早注释代码,会促使你在开始撰写代码之前仔细考虑这些代码,从而带来更高的工作效率。而且,当你重新阅读数天前或者数星期前所写的代码时,你可以很容易地判断出当时你是怎么想的,因为这一切都有记录。5.3 异常处理各层之间的接口的同步方法调用的错误返回应都通过throw exception的方式实现。若系统中提供的Exception子类符合要求,应优先使用系统的Exception子类,而不应创建自己的Exception类。若需要创建自己的Exception类,应从统一的基类继承5.4 日志处理本系统统一使用Android日志类处理。5.5 开发环境版本规范1、开发编译环境sdk为android4.22、最小支持的SDK版本为1.63、目标SDK为2.16 成员函数可见性良好的程序设计应该尽可能减小类与类之间耦合,所遵循的经验法则是:尽量限制成员函数的可见性。如果成员函数没必要公有 (public),就定义为保护 (protected);没必要保护 (protected),就定义为私有 (private)。可见性说明正确用法public公有成员函数可被任何其它对象和类的成员函数调用。当该成员函数必须被该函数所在的层次结构之外的其他对象和类在访问时。package包成员函数可被同一包中的其他对象和类调用。当该成员函数提供的行为被它所在包内部而非外部需要时。protected被保护的成员函数可被它所在的类或该类的子类的任何成员函数调用。当该成员函数提供的行为被它所在类的层次结构内部而非外部需要时。private私有成员函数只可以被该类所在的其它成员函数调用,该类的子类不可以调用。当该成员函数所提供的行为明确针对定义它的类时。私有成员函数常常是重新分配要素的结果。重新分配要素又叫“重组”,指类内其它成员函数封装某一个特定行为的做法。7 Java编程技巧7.1 更好的组织代码比较以下两个例子,下面的代码容易理解,因为调用anObject的语句被放到了一起。代码还是完成同样的事,只是更容易读懂罢了(注意:当 aCounter 时传给 message3() 的参数时,不应该做如此的改动)。示例:anObject.message1();anObject.message2();aCounter = 1;anObject.message3();anObject.message1();anObject.message2();anObject.message3();aCounter = 1;7.2 把常量放到比较表达式的左侧考虑以下的例子,尽管他们都是等价的,至少一眼看去,上面的代码能够编译,下面的不能。 为什么? 因为第二个if语句并不是在作比较,它在作赋值 你不能给一个常量值赋新值。这可能是一个在你的代码中很难发现的bug(至少在没有高级的测试工具时)。 通过把常量放到表达式的左边, 你可以达到同样的效果并且当你意外的用了赋值符而不是比较操作符。示例:if(somehing=1)if(x=0)if(1=somehing)if(0=x)7.3 聪明的使用final使用final 关键字标明你的类不能被继承。 这是一个最初开发员的设计决定。7.4 最小化公共和保护接口面向对象程序设计的基本点之一是最小化一个类的公共接口。一个方法尽量不要超过15行,如果方法太长,说明当前方法业务逻辑已经非常复杂,那么就需要进行方法拆分,保证每个方法只作一件事,这样做有几个理由: 可学习性。要了解如何使用一个类,只需了解它的公共接口即可。公共接口越小,类越容易学习。减少耦合。当一个类的实例向另一个类的实例或者直接向这个类发送一条消息时,这两个类变得耦合起来。最小化公共接口意味着将耦合的可能降到最低。更大的灵活性。这直接与耦合相联系。一旦想改变一个公共接口的成员函数的实现方法,如你可能想修改成员函数的返回值,那么你很可能不得不修改所有调用了该成员函数的代码。公共接口越小,封装性就越大,代码的灵活性也越大。尽力使公共接口最小化这一点明显地很值得你的努力,但通常不明显的是也应使被保护接口最小化。基本思想是,从一个子类的角度来看,它所有超类的被保护接口是公共的。任何在被保护接口内的成员函数可被一个子类调用。所以,出于与最小化公共接口同样的理由,应最小化类的被保护接口7.5 参数和返回值一个方法的参数尽可能的不要超过4个!尽可能不要使用null,替代为异常或者使用空变量如返回List 则可以使用Collections.emptyList()如果一个方法返回的是一个错误码,请使用异常!8 程序设计风格8.1 风格格式这一部分讲述几个技巧,这些技巧有助于区分专业软件开发者和蹩脚代码编写者。这些技巧是: l 使用空格l 限制代码行的长度l 给常量一个名字l 给代码加上注释 l 的代码分段/缩进l 多行语句的处理l 使用空行l 遵循 30 秒条规则 l 说明消息发送的顺序l 写短小单独的命令行8.2 使用空格多使用空格使得程序更可读。8.3 限制代码行的长度限制代码行的长度不大于每行80个字符。8.4 给常量一个名字在代码中,不直接使用常量值,而是把常量定义出来,使用常量的名字,提供更好的可读性。即便是布尔变量也可以使用常量名。8.5 代码分段/缩进一种提高代码可读性的方法是给代码分段,换句话说,就是在代码块内让代码缩进。所有在括号 和 之内的代码,构成一个块。块内的代码都应统一地缩进去4个空格,使用空格而不是制表符。缩进的风格是开括号和闭括号都应该占一行,并在垂直方向对齐。8.6 多行语句的处理当一条语句需要占多个代码行时,给你的代码分段。注意到第二行和第三行缩进一个单元,显然表明他们还是前面行的一部分。还有,注意到第二行最后的逗号紧跟着参数。8.7 在代码中使用空行在 Java 代码中加入几个空行,将代码分为一些小的、容易理解的部分,可以使它更加可读。VIS96 建议采用一个空行来分隔代码的逻辑组,例如控制结构,采用两个空行来分隔成员函数定义。没有空白的代码很难读,很难理解。8.8 遵循 30 秒条法则其他的程序员应能在少于 30 秒钟的时间内完全理解你的成员函数,理解它做什么,为什么这样做,它是怎样做的。如果他们做不到,说明你的代码太难维护,应加以改进。30 秒钟,明明白白。 一个好的经验法则是:如果一个成员函数一个屏幕装不下,那么它就很可能太长了。8.9 写短小单独的命令行每一行代码只做一件事情。在依赖于穿孔卡片的计算机发展的早期,想让一行代码完成尽量多的功能的想法是可以理解的。若想在一行里做多件事情,就会使代码难于理解。为什么要这样呢?我们应使代码尽量容易理解,从而更容易维护和改进。正如同一个成员函数应该并且只能做一件事一样,一行代码也只应做一件事情。此外,应让代码在一个屏幕内可见 VIS96。 也不应向右滚动编辑窗口来读取一整行代码,包括含有行内注释语句的代码。8.10 说明运行顺序提高代码可读性的一个相当简单的方法是使用圆括号 (parenthesis,又叫“round brackets”) 来说明 Java 代码运行的准确顺序 NAG95;AMB98。如果为了理解你的源码而必须了解编程语言的操作顺序,那么这说明源码中一定有什么重要的东西做的不对。 这大多是在 AND 或者 OR 其它几个比较关系处产生的逻辑比较上的问题。注意:如果你象前文所建议的那样,采用短小单独的命令行,那么就不会产生这个问题。注意用括号明确运算符的操作顺序,避免使用默认优先级。 9 21种代码的坏味道应该在编程中尽量避免这21种“坏味道”。1.Duplicated Code代码重复几乎是最常见的异味了。他也是Refactoring 的主要目标之一。代码重复往往来自于copy-and-paste 的编程风格。2.Long method 它是传统结构化的“遗毒“。一个方法应当具有自我独立的意图,不要把几个意图放在一起。3.Large Class 大类就是你把太多的责任交给了一个类。这里的规则是One Class One Responsibility。4.Divergent Change一个类里面的内容变化率不同。某些状态一个小时变一次,某些则几个月一年才变一次;某些状态因为这方面的原因发生变化,而另一些则因为其他方面的原因变一次。面向对象的抽象就是把相对不变的和相对变化相隔离。把问题变化的一方面和另一方面相隔离。这使得这些相对不变的可以重用。问题变化的每个方面都可以单独重用。这种相异变化的共存使得重用非常困难。5.Shotgun Surgery 这正好和上面相反。对系统一个地方的改变涉及到其他许多地方的相关改变。这些变化率和变化内容相似的状态和行为通常应当放在同一个类中。6.Feature Envy 对象的目的就是封装状态以及与这些状态紧密相关的行为。如果一个类的方法频繁用get 方法存取其他类的状态进行计算,那么你要考虑把行为移到涉及状态数目最多的那个类。7.Data Clumps 某些数据通常像孩子一样成群玩耍:一起出现在很多类的成员变量中,一起出现在许多方法的参数中,这些数据或许应该自己独立形成对象。8.Primitive Obses
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025智能制造合作合同
- 2025短期合同工聘用合同范本
- 幼儿园常见传染病预防
- 传染病防治工作培训会
- 脊柱围手术期护理
- 2025年植物遗传综合试题
- 审计处工作总结模版
- 僵人综合征的临床护理
- 船厂班组年终总结模版
- 电力设备行业深度报告:欧洲电车趋势已起-从欧洲车企2025Q1财报看电动化趋势151mb
- 6人小品《没有学习的人不伤心》台词完整版
- 2023年医疗招聘技术类-影像医学与核医学考试历年真题集锦附答案
- 直述句与转述句互换
- 物业公司投标文件资料
- “循环经济关键技术与装备”重点专项2023年度项目申报指南
- 第四讲 坚持以人民为中心PPT习概论2023优化版教学课件
- 中移L2认证(集团)备考题库(浓缩版)
- 新概念英语第三册摘要写作答案
- 单作用叶片泵的工作原理
- 合肥市青少年电脑机器人竞赛历年成绩汇总合肥市青少年机器人竞赛哪个项目火
- 环境监测人员持证上岗考核试题集(下册)概论
评论
0/150
提交评论