类的设计原则

类的设计原则

  • 要点提示 *** 类的设计原則有助于设计出合理的类。

内聚性

类应该描述一个单一的实体,而所有的类操作应该在逻辑上相互配合,支持一个一致的 目的。例如:可以设计一个类用于学生,但不应该将学生与教职工组合在同一个类中,因为 学生和教职工是不同的实体。 如果一个实体担负太多的职责,就应该按各自的职责分成几个类。例如:String类、 StringBuffer 类和 StringBuilder 类都用于处理字符串,但是它们的职责不同。String 类处 理不可变字符串,StringBuilder 类创建可变字符串,StringBuffer 与 StringBuilder 类似, 只是StringBuffer类还包含更新字符串的同步方法。

一致性

遵循标准Java程序设计风格和命名习惯。为类、数据域和方法选取具有信息的名字。 通常的风格是将数据声明置于构造方法之前,并且将构造方法置于方法之前。 选择名字要保持一致。给类似的操作选择不同的名字并非良好的实践。例如:lengthO 方法返回String、StringBuilder和StHngBuffer的大小。如果在这些类中给这个方法用不 同的名字就不一致了。 一般来说,应该具有一致性地提供一个公共无参构造方法,用于构建默认实例。如果一 个类不支持无参的构造方法,要用文档写出原因。如果没有显式定义构造方法,即假定有一 个空方法体的公共默认无参构造方法。 如果不想让用户创建类的对象,可以在类中声明一个私有的构造方法,Math 类就是如此。

封装性

一个类应该使用 private 修饰符隐藏其数据,以免用户直接访问它。这使得类更易于维护。 只在希望数据域可读的情况下,才提供 get 方法;也只在希望数据域可更新的情况下, 才提供 set 方法。例如:Rational 类为 numerator 和 denominator 提供了 get 方法,但是没 有提供 set 方法,因为 Rational 对象是不可改变的。

清晰性

为使设计清晰 ,内聚性 、一致性和封装性都是很好的设计原则。除此之外,类应该有一 个很清晰的合约,从而易于解释和理解。 用户可以以各种不同组合 、顺序,以及在各种环境中结合使用多个类。因此,在设计一 个类时,这个类不应该限制用户如何以及何时使用该类;以一种方式设计属性,以容许用户 按值的任何顺序和任何组合来设置;设计方法应该使得实现的功能与它们出现的顺序无关。 例如:Loan 类包含属性 loanAmount 、numberOfYears 和 annualInterestRate, 这些属性的值 可以按任何顺序来设置。 方法应在不产生混淆的情况下进行直观定义。例如: String 类中的 substringCint beginlndex.int endlndex)方法就有一点混乱。这个方法返回从beginlndex到endlndex-l 而不是 endlndex 的子串。该方法应该返回从 beginlndex 到 endlndex 的子字符串,从而更 加直观。

完整性

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

实例和静态

依赖于类的具体实例的变量或方法必须是一个实例变量或方法。如果一个变量 被类的所有实例所共享,那就应该将它声明为静态的。 实例和静态是面向对象程序设计不可或缺的部分。数据域或方法要么是实例的,要么是 静态的。不要错误地忽视了静态数据域或方法。常见的设计错误是将本应该声明为静态方法 的方法声明为实例方法。例如:用于计算n的阶乘的factorial(int n)方法应该定义为静 态的,因为它不依赖于任何具体实例。 构造方法永远都是实例方法,因为它是用来创建具体实例的。一个静态变量或方法可以 从实例方法中调用,但是不能从静态方法中调用实例变量或方法。

继承与聚合

继承和聚合之间的差异,就是 is-a(是一种)和 has-a(具有)之间的关系。例如,苹果 是一种水果;因此,可以使用继承来对 Apple 类和 Fruit 类之间的关系进行建模。人具有名 字;因此,可以使用聚合来对 Person 类和 Name 类之间的关系建模。

接口和抽象类

详细参考:https://blog.csdn.net/panfelix/article/details/101012930

接口和抽象类都可以用于为对象指定共同的行为。如何决定是采用接口还是类呢?通 常,比较强的 is-a(是一种)关系清晰地描述了父子关系,应该采用类来建模。例如,因为 桔子是一种水果,它们的关系就应该采用类的继承关系来建模。弱的 is-a 关系,也称为 is- kind-of(是一类)关系,表明一个对象拥有某种属性。弱的 is-a 关系可以使用接口建模。例 如,所有的字符串都是可以比较的,因此 String 类实现了 Comparable 接口。圆或者矩形是 —个几何对象,因此 Circle 可以设计为 CeometricObject 的子类。圆有不同的半径,并且 可以基于半径进行比较,因此 Circle 可以实现 Comparable 接口。 接口比抽象类更加灵活,因为一个子类只能继承一个父类,但是却可以实现任意个数的 接口。然而,接口不能具有具体的方法。可以结合接口和抽象类的优点,创建一个接口,使 用一个抽象类来实现它。可以视其方便使用接口或者抽象类。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值