论坛首页 Java企业应用论坛

Java面向对象设计最佳实践 - 方法设计(一)

浏览 6757 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (6)
作者 正文
   发表时间:2010-05-18   最后修改:2010-05-18
借个地方总结下:
//方法设计的目标,好的设计与差的设计的表现,
//良好方法设计的做法,
//关键字:清晰性,重用性,封装。
//方法设计的讨论: 暂时分两个角度,一种是抽象含义上的,一种是物理结构上的,分这两种的出发点物理上的很容易理解,能够被一定的量化,而抽象含义上的比较范范,它需用根据环境做出具体的处理,
//一个方法中的代码抽象级别应该一致,这与一个类暴露给外部的接口方法的抽象程度相一致是一样的。
//比如现再有个方法要完成生成一个实例,生成实例需要分三个步骤完成,第一步实例化,第二步配置,第三步初始化,如果把这三个步骤的实现代码都写入到一个方法中,直观的是得到一个长长的方法,如果想要知道生成一个对象实例的步骤则必须把这个完整的代码看完,才能明白它表达的意思,
//而如果将这三步封装到方法中,则清晰的明白生成一个实例的步骤,一旦封装到方法中,则重用性也成为可能,因为变量表达式仅在方法内可见,而方法则在类内可见,如果通用性更强,则可以进一步放宽访问权限。
//针对这个角度的讨论好消息是我们知道目标了,坏消息是我们缺乏一些可以量化的标准。
   //一个方法的物理构件:方法头,方法体;
   //方法头包括:修饰符,返回值,方法名,参数列表(参数类型,数量,顺序),异常列表,
   //修饰符仅讨论访问修饰符,其它的不讨论,访问权限尽可能的底以保证封装性,私有方法对于类来说是类的实现代码,而不是类的API,这将使类的使用更简单,也将使以后修改类以保证二进制兼容性更容易,
   //返回值类型与参数类型尽可能使用抽象类型,这是面向对象设计基本原则依赖倒转(依赖抽象)所要求的,Java5支持协变返回类型,所以现再的使用方式应该是在定义抽象方法中使用抽象类型,而在实现方法中使用具体类型 ,这样在使用实现代码的地方就不需要强制类型转换的步骤了。
   //方法名:方法名是对方法功能的描述,清晰的表述此方法完成的功能,方法名应该准确,清晰,简洁。
   //参数列表,参数数量不要过多,必要时引入参数对象,在方法中不要对参数进行二次赋值,一般情况下应该认为参数默认带有final修饰符,积极的进行方法参数合法性的检查,需要时使用保护性拷贝,要心里清楚我是在传过来的对象上直接修改还是需要一个对象的拷贝,然后在拷贝上修改。
   //方法名与参数列表被称为方法签名,用来在.java文件的同一个类中确定方法的唯一性,这里关于有方法重载问题的讨论。
   //除了以上这些基本的方法设计讨论,还有其它一些情况下没有讨论,比如对于构造方法及初始化方法不要调用可被子类重写的方法,以避免超类初始化失败的问题,等等。
0 请登录后投票
   发表时间:2010-05-18  
H_eaven 写道
借个地方总结下:
//方法设计的目标,好的设计与差的设计的表现,
//良好方法设计的做法,
//关键字:清晰性,重用性,封装。
//方法设计的讨论: 暂时分两个角度,一种是抽象含义上的,一种是物理结构上的,分这两种的出发点物理上的很容易理解,能够被一定的量化,而抽象含义上的比较范范,它需用根据环境做出具体的处理,
//一个方法中的代码抽象级别应该一致,这与一个类暴露给外部的接口方法的抽象程度相一致是一样的。
//比如现再有个方法要完成生成一个实例,生成实例需要分三个步骤完成,第一步实例化,第二步配置,第三步初始化,如果把这三个步骤的实现代码都写入到一个方法中,直观的是得到一个长长的方法,如果想要知道生成一个对象实例的步骤则必须把这个完整的代码看完,才能明白它表达的意思,
//而如果将这三步封装到方法中,则清晰的明白生成一个实例的步骤,一旦封装到方法中,则重用性也成为可能,因为变量表达式仅在方法内可见,而方法则在类内可见,如果通用性更强,则可以进一步放宽访问权限。
//针对这个角度的讨论好消息是我们知道目标了,坏消息是我们缺乏一些可以量化的标准。
   //一个方法的物理构件:方法头,方法体;
   //方法头包括:修饰符,返回值,方法名,参数列表(参数类型,数量,顺序),异常列表,
   //修饰符仅讨论访问修饰符,其它的不讨论,访问权限尽可能的底以保证封装性,私有方法对于类来说是类的实现代码,而不是类的API,这将使类的使用更简单,也将使以后修改类以保证二进制兼容性更容易,
   //返回值类型与参数类型尽可能使用抽象类型,这是面向对象设计基本原则依赖倒转(依赖抽象)所要求的,Java5支持协变返回类型,所以现再的使用方式应该是在定义抽象方法中使用抽象类型,而在实现方法中使用具体类型 ,这样在使用实现代码的地方就不需要强制类型转换的步骤了。
   //方法名:方法名是对方法功能的描述,清晰的表述此方法完成的功能,方法名应该准确,清晰,简洁。
   //参数列表,参数数量不要过多,必要时引入参数对象,在方法中不要对参数进行二次赋值,一般情况下应该认为参数默认带有final修饰符,积极的进行方法参数合法性的检查,需要时使用保护性拷贝,要心里清楚我是在传过来的对象上直接修改还是需要一个对象的拷贝,然后在拷贝上修改。
   //方法名与参数列表被称为方法签名,用来在.java文件的同一个类中确定方法的唯一性,这里关于有方法重载问题的讨论。
   //除了以上这些基本的方法设计讨论,还有其它一些情况下没有讨论,比如对于构造方法及初始化方法不要调用可被子类重写的方法,以避免超类初始化失败的问题,等等。


哈哈,不错哦。

你看下我的目录安排,希望很多东西都会涉及到。
0 请登录后投票
   发表时间:2010-05-19  
以前从来没有关注过命名问题 ,看了LZ 的贴子 深受启发。。
0 请登录后投票
   发表时间:2010-05-19  
呵呵,明天刚好要学对象,先收了~! 楼主归纳的真仔细
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics