如何编写高质量的代码

原创 2003年05月01日 11:15:00

一、提高代码的重用性

代码的重用性可以通过两个方面的实现:函数级封装与对象级封装

1、函数级的封装

重用性不但体现在对对象的封装,对于重复性的业务无关的代码进行一层或多层的函数级封装,可以降低实现过程的复杂性。

进行函数级封装的特征:该过程具有简单的过程性,即只有一条线,无相关的分支或多个入口。

层次:即在编写函数时需要注重所写的函数的应用宽度,即有必要考虑先写通用功能函数,然后编写相关性功能函数,通用函数可能可以运用于其他方面的代码,而功能相关性函数,即私有函数则可以使当前的应用具有简单性,即保证了复用性,又保证了简单性。

2、对象级的封装

对象级封装能够做到更安全、更完整的封装,隐蔽不相关的处理分支,使上层调用只感觉到对象的原子特征。

对象级封装的特征:对象作用具有持久性、可能存在多入口或多出口、存在诸多关联特性、业务无关性等特征。

二、代码的一致性

内部一致性:在实现封装时,不管是函数级封装,还是对象级封装,都必须讲究一致的格调,比如说对单元格的调用时使用先行后列的入口参数,则不应该出现先列后行的入口参数的封装形式。

上下一致性:对于继续的私有级封装,更应该注意上下级之间的一致性,不应该让老虎生出一只猫来,那是应该杜绝的。同时又得保证父类的接口函义不被变更(特殊情况特殊考虑)。

三、代码的完整性

对象的封装必须提供完整的接口,在保证内部对象私有化的前提下,如何确保对内部对象的访问与操作,就必须提供完整的接口支持,对部份数据提供成对接口,如内部属性对象,提供GetSet接口。

附加:提供完整的错误处理机制,由于这个方面并不是所有组件或对象都必须的,但在需要时只体现为更为重要。

四、接口的人性化

人性化主要体现有事务处理与参数调用等几个方面,做到内部可以实现就不要在外部实现,提供尽可能多的默认参数,也就是说从外部来看,对象是有生命的。如对象创建时需要分配一系列的内存,就不必要在创建对象时要求使用者额外地调用对象的某一接口;对象在销毁时需要释放内存等工作更应该由对象自身考虑(避免内存泄漏等更为严重的问题)

充分利用对象的多态性,使用调用者体会使用的简单性,如对一个打包对象,我们可以用一个接口实现对多种类型的数据进行打包,即在接口命名上不再体现打包数据的结构或特征等。

接口命名的人性化,在命名时要考虑其含义的简单性,调用者不需要关心的信息就不要表现出来,让用户只知道他所调用的只是一个对象,而并非是在调用多个对象。同时在接口应该体现接口的特征信息,从而使调用者有从接口命名中得到调用的体会。

五、把握封装的度

并不是封装都是好事,我们必须把握一个封装的限度,但最终可能会实现使用者所需要的相关组件,但实际封装过程可能是一个倒(三角模式,即从最原始的多个组件进行二次封装实现多个初级组件,依次后推,最终组件可能是由多个高级组件组成。即对每一个组件的封装应考虑尽可能的简单(复杂组件可能由多个逻辑概念上简单的组件所组成,除非对于性能要求非常高有组件可能需要考虑多种因素)。一般情况下由简单实现的模式的性能要高于直接用复杂实现的单一组件的性能要好。

有限性封装的另一个作用或好处:每一次的实现都属于简单的封装,逻辑也简单,不容易出现大问题,容易扩充与维护等。

六、性质的唯一性

封装不是大集会,尽量只体现相关方面的接口,其他需要的接口可以用其他组件里完成,再由现组件去调用,尽量避免一个接口多个用度,导致为了用一个方法而去创建一个大对象(舍本逐末)。

七、防止编码变相

目前的编码规范仍停留在变更命名及部份编码规则,但大量规范仍局限于程序员自己的编码习惯。

1、要求程序员尽量减少对全局的使用

全局变量的使用主要是因为容易使用程序在逻辑方面出现混乱,使程序形成一种网状结构,难于进行状态分析。即容易使程序无法进行问题分析与控制,程序可能失去安全性等危险。

对等情况,编写一个对象(组件),内部定义大量的成员变量,其实对于对象中的成员函数来说,他们就是全局变量,成员变量多了,同样可以使结构模糊,不易维护、控制、调试等。

2、要求程序员尽量减少或不使用GOTO语句

有相当一部份程序经常在对象之间进行数据传递,这里并不是通过某种机制进行的,而是开放对象的成员权限进行直接数据获得与设置。从而给内存泄漏提供了可乘之机,这与GOTO没有两样。

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

 

以上是自己多年来的编程经验的总结,如有补充或新的想法,请给予批评与指教:satchmo2000@163.net

 

Satchmo

2003425

编写高质量代码——JavaScript篇

一、避免团队合作时的js冲突 使用大写的GLOBAL作为全局变量的变量名。在不同的匿名函数中,根据功能生命一个不同的命名空间,每个匿名函数中GLOBAL对象的属性都不要直接挂在GLOBAL对...
  • echoyoung46
  • echoyoung46
  • 2015年07月07日 22:57
  • 462

《编写高质量代码改善C++程序的150个建议》摘录

内容摘自《编写高质量代码改善C++程序的150个建议》:   第一部分 语法篇   第1章   从C继承而来的 建议0:不用让main函数返回void          main函数的返回类型是int...
  • fengbingchun
  • fengbingchun
  • 2013年06月28日 09:09
  • 6093

每周一书-编写高质量代码:改善C程序代码的125个建议

C语言因为既具有高级语言特性,又具有汇编语言特性,所以它是近二十几年来使用较为广泛、生命力较强的编程语言。无论是操作系统、嵌入式系统、普通应用软件,还是移动智能设备开发,它都能够很好地胜任,是公认的强...
  • xuanhun
  • xuanhun
  • 2016年08月29日 11:07
  • 1240

编写高质量代码--改善Java程序的151个建议--读书笔记

--警惕自增陷阱 i++表示先赋值后自增,而++i表示先自增后赋值。下面的代码返回结果为0,因为lastAdd++有返回值,而返回值是自增前的值(在自增前变量的原始值会存在一个内存空间,当自增结束后...
  • u011680118
  • u011680118
  • 2015年08月24日 21:11
  • 582

读-秦小波-编写高质量代码:改善java程序的151个建议

有些建议不太用到,但是用到的时候如果不注意就会进坑,所以书名改成java的151个坑更合适。 不要在常量和变量中出现易混淆的字母包名全小写,类名首字母全大写,常量全大写下划线分割,变量驼峰; 字母l作...
  • xiaoxufox
  • xiaoxufox
  • 2016年12月21日 10:06
  • 1072

如何写出高质量的代码

从3方面确保代码的完整性在写代码之前,要考虑单元测试。如果能够设计全面的单元测试用例并在代码中体现出来,那么写出的代码自然也就是完整正确的了。通常我们从功能测试、边界测试和负面测试三方面来设计测试用例...
  • jinzhao1993
  • jinzhao1993
  • 2017年02月18日 16:52
  • 721

C/C++之写出高质量代码

自从看了林锐博士的《高质量C++编程指南》以后,感觉自己以前写的代码都是一些垃圾,真的low,根本不知道一些基本的编程规范,然后看了一些大神写的代码,清晰易懂,而且还很漂亮,给人一种赏心悦目的感觉,写...
  • Peter_tang6
  • Peter_tang6
  • 2017年04月06日 22:54
  • 589

代码质量优先——《编写高质量代码:改善c程序代码的125个建议》

高质量的代码不但可以促进团队合作、减少bug处理、降低维护成本,对程序员自身的成长也是至关重要的...
  • dongfeng9ge
  • dongfeng9ge
  • 2016年04月13日 15:42
  • 1802

Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法(一)

1. 使用消息结构的语言,其运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器来决定。 如果范例代码调用的函数是多态的,则运行时根据虚函数表来查出应该执行哪个函数实现。 而采用...
  • mad2man
  • mad2man
  • 2014年03月25日 16:23
  • 3039

编写高质量JavaScript代码的一些建议

在Medium上看到了两篇关于写高质量JavaScript代码的文章,觉得不错,特此搬过来,记下一笔,以待后续查阅。 JavaScript 作为最受欢迎的编程语言之一,被广泛应用在各个领域:网站...
  • anythings
  • anythings
  • 2016年04月23日 18:42
  • 201
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何编写高质量的代码
举报原因:
原因补充:

(最多只允许输入30个字)