面向对象分析与设计中类的设计

在应用Java语言进行面向对象的编程与设计过程中,首先进行的都是类的设计。类是组成一个系统的基本单元。

类的设计的建议

(1) 在用Java语言把编写类的过程中,一般在一个.java源文件中只编写一个类,如果确实要存放多个类,则同一文件中也只能有一个类是用public修饰符修饰的,并且此类与文件名同名。

(2) 在完成某些业务逻辑方法时,最好利用一些优秀算法使代码尽可能短小精悍。

设计类的一些注意事项

(1) 在抽象出问题域中的类时,按照“对象类似”原则进行抽象。如果问题域中的多个实体都有相似的属性和行为,那么可以将将这些属性和行为写到同一个类中,对于差别比较大的行为,最好不要写入,或者另写入一个新建的类。

(2) 封装核心代码时,最好加入单元测试代码或加入main()方法进行测试,以保证每个类的方法封装都符合业务要求。

(3) 若系统中的某项业务已经是行业标准,最好将此模块定义成一个或多个接口。不要定义成抽象类,以免给后期扩展带来不必要的麻烦。

(4) 在已经创建号的类的基础上创建新类时,最好少用继承,多用组合。因为子类继承父类时,可能继承了对子类没用的或有害的方法,会给整个代码带来很多麻烦。

(5) 初学者在设计类之前,尽可能多收集、阅读别人写的优秀的代码示例、理解别人的思想。

类名、变量名、方法名的选取

(1) 类名、变量名、方法名一般都是用英文标识符标识,不要用中文取名。类名的首字母应该大写,变量和方法的首字母用小写。对于所有标识符,其中包含的所有单词都应该紧靠在一起,对于中间单词的首字母用大写。例如,类名可取ThisIsMyClassName,属性名可取studentName等,但要避免类名过长。

(2) 类名、变量名、方法名的取名最好要有意义,不要随便取名。这样便于以后查阅代码。

(3) 若在定义中出现了常量初始化字符,则在static final修饰的基本类型标识符中大写所有的字母,如public static final String PI=3.14;这样便可以标识出这些常量属于编译期的常数。

(4) Java包(package)的命名属于一种特殊情况:全都用小写字母命名,即便中间单词的首字母也是如此。另外,对于域名的扩展名称,如com、org、net或者edu等,全部都应该小写。

类的属性设计

(1) 将类的属性设置为私有。

在设计类的过程中,最重要的时不能破坏面向对象的封装性。针对类的属性,一般都是把它设置成私有的,提供公有的设置方法和取值方法。

(2) 一定要对局部变量进行初始化

在Java中,系统只会对成员变量进行默认初始化,不会对局部变量进行默认初始化。在设计类的过程中,最好不要依赖于默认的初始值,而是应该显式地初始化变量和局部变量。

类的方法设计

(1) 在设计方法时,需要考虑构造方法,考虑系统提供的方法对自己定义的方法的影响,比如系统已经提供了数组的复制功能就没有必要自己定义,应该做到简明扼要、功能独立。如果方法比较大,可以适当抽取出功能比较相近的部分,重新再定义一个方法,让这些方法通过互调的方式完成代码的重复使用。

(2) 在定义构造方法时,一般不调用其他方法。在初始化各个变量时,可能会产生某种异常,通常将此异常直接抛出。这样设计就不会盲目地继承此类,避免创建失败还当作正确创建的情况。

(3) 定义方法时,参数不宜过多,方法的参数过多,将使得方法调用变得难以编写、阅读和维护,应该试着将方法的参数放到更适合的类中,通过对象的形式来进行传递,或通过JDK的可变参数传递的特性来解决此类问题。

(4) 一般在进行显式的清理工作,特别是在学习到JDBC时,如果进行数据库的连接过多,会耗尽系统资源,导致系统崩溃。这时应该定义一个专门的清理或关闭方法来清理内存,必要时可以写到finally异常代码块中进行清理。

继承的设计

(1) 不要使用protected变量,以免破坏封装。原因有两点,首先时由于子类集是无界的,任何人都可以从定义的类派生出子类,然后可以编写代码访问protected实例字段,因而破坏封装性。再者,在Java语言中,同一包的任何类,无论是否时子类,都能访问protected字段。

(2) 在类的关系模型中使用继承。在使用继承时,应认真考虑两个类之间是否真的存在继承关系。

(3) 除非通过继承得到的方法有用,否则不要使用继承。

(4) 重写方法时不要改变预期行为。

(5) 尽量使用多态,而不是类型信息。

(6) 尽量将非常常用的方法和属性放在超类中。

(7) 不要泛用反射。

 

 

posted @ 2017-12-19 14:16  Warrier  阅读(773)  评论(0编辑  收藏  举报