类的设计原则

来源:互联网 发布:朝鲜核试验 知乎 编辑:程序博客网 时间:2024/06/06 00:51

一、内聚性

类应该描述一个单一的实体,而所有的类操作应该在逻辑上相互配合,支持一个连贯性的目标。例如:可以专门为学生使用一个类,但不应该将学生与教职式组合在同一个类中,因为学生和教职工是不同的实体。

如果一个实体担负太多的职责,就应该按各自的职责分成几个类。例如:String类、StringBuilder类和StringBuffer类都用于处理字符串,但是它们的职责不同。String类处理不可变字符串,StringBuilder类创建可变字符串,StringBuffer与StringBuilder类似,只是StringBuffer类还包含更新字符串的同步方法。

二、一致性

遵循标准Java程序设计风格和命名习惯。给类、数据域和方法选择有信息量的名字。流行的风格是将数据声明置于构造方法之前,并且将构造方法置于方法之前。

选择名字要保持一致。给类似的操作选择不同的名字并非好的习惯。例如:length()方法返回String、StringBuilder和StringBuffer的大小。如果在这些类中给这个方法用不同的名字就不一致了。

一般来说,应该一律提供一个为构造默认实例的公共无参构造方法。如果一个类不支持无参构造方法,要用文档写出原因。如果没有显式定义构造方法,就假定有一个空方法体的公共默认无参构造方法。

如果不想让用户创建类的对象,可以在类中声明一个私有的构造方法,就像Math类的情况一样。

三、封装性

一个类应该使用private修饰符隐藏其数据,以免用户直接访问它。这使得类更易于维护。

如果想让数据域可读,只需提供get方法。如果想让数据域可更新,应该提供set方法。

四、清晰性

为使设计清晰,内聚性、一致性和封装性都是很好的设计原则。除此之外,类应该有一个很清晰的合约,易于解释和理解。

用户可以以多种不同组合和顺序,在许多不同环境中结合多个类。因此,应该设计一个类,这个类应该没有对用户使用目的及使用时间的限制,设计属性以容许用户按值的任何顺序和任何组合来设置,所设计的方法实现的功能应该与它们出现的顺序无关。

方法应在不产生混淆的情况下凭直觉来定义。例如:String类中substring(int beginIndex,int endIndex)方法就有一点混乱。这个方法返回从beginIndex到endIndex-1而不是endIndex的子串。

不应该声明一个来自其他数据域的数据域。例如,下面的Person类有两个数据域:birthDate和age。由于age可以从birthDate导出,所以age不应该声明为数据域。

public class Person {   private java.util.Date birthDate;   private int age;   . . .}

五、完整性

类经常是为许多不同用户的使用而设计的。为了能在一个广泛的应用中使用,一个类应该通过属性和方法提供多种方案以适应用户的不同需求。例如:为满足不同的应用需求,String类包含了40多种很实用的方法。

原创粉丝点击