7.类与对象【Java温故系列】

参考自–《Java核心技术卷1》

类与对象

1 面向对象程序设计(OOP)

Java是完全面向对象的。

面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分隐藏的实现部分。从根本上来说,只要对象能够满足要求,就不必关心其功能的具体实现过程。

传统的结构化程序设计通过设计一系列的过程(即算法)来求解问题。一旦确定了这些过程就可以开始考虑存储数据的方式。即 算法+数据结构,首先要确定如何操作数据,然后再决定如何组织数据,以便于数据操作。而OPP却调换了这个次序,将组织数据放在第一位,然后再考虑操作数据的算法。

对于一些规模较小的问题,将其分解为过程的开发方式比较理想;而面向对象更加适用于解决规模较大的问题。

面向过程与面向对象的程序设计对比:


1.1 类

类(Class)是构造对象的模板。由类构造(construct)对象的过程称为创建类的实例(instance).

封装(encapsulation,有时称为数据隐藏)是与对象有关的一个重要概念。从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实例域,操纵数据的过程称为方法。对于每个特定的类实例(对象)都有一组特定的实例域值,这些值的集合就是这个对象的当前状态,无论何时,只要向对象发送一个消息,它的状态就有可能发生改变。

实现封装的关键在于绝对不能让类中的方法直接访问其他类的实例域。程序仅通过对象的方法与对象数据进行交互。封装给对象赋予了“黑盒”特性,这是提高重用性和可靠性的关键。这意味着一个类可以全面地改变存储数据的方式,只要仍旧使用相同的方法操作数据,其他对象就不会知道或介意所发生的变化。

OOP的另一个原则会让用户自定义 Java 类变得轻而易举。即:可以通过扩展一个类来建立另外一个新的类。事实上,在 Java 中,所有的类都源自一个超类"Object"。在扩展一个已有的类时,这个扩展后的新类具有所扩展的类的全部属性和方法。在新类中,只需提供适用于这个新类的新方法和数据域即可。


1.2 对象

对象的三个主要特性:

  • 对象的行为—可以对对象施加哪些操作,或可以对对象施加哪些方法
  • 对象的状态—当施加哪些方法时,对象如何响应
  • 对象标识—如何辨别具有相同行为与状态的不同对象

同一个类的所有对象实例,由于支持相同的行为而具有家族式的相似性。对象的行为是用可调用的方法定义的。

此外,每个对象都保存着描述当前特征的信息。这就是对象的状态。对象的状态可能会随时间而发生改变,但这种改变不会是自发的,即对象状态的改变必须通过调用方法实现(否则,封装性遭到了破坏)。

但是,对象的状态并不能完全描述一个对象。每个对象都有一个唯一的身份。需要注意,作为一个类的实例,每个对象的标识永远是不同的,状态常常也存在着差异。

对象的这些关键特性在彼此之间相互影响着。例如,对象的状态影响它的行为(某某状态无法使用某某方法等等)。


1.3 类与类之间的关系

在类之间,最常见的关系有:

  • 依赖(“users-a”)
  • 聚合(“has-a”)
  • 继承(“is-a”)

依赖是一种最明显、最常见的关系。如:A类使用B类访问B类的某个状态以确定A类的行为。

如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。

:应该尽可能地将相互依赖的类减至最少。如果A类不知道B类的存在,它就不会关心B的任何改变(这意味着B的改变不会导致A产生任何变化或bug)。即让类之间的耦合度最小。

聚合(关联)是一种具体且易于理解的关系。如:一个C对象包含一些D对象。聚合关系意味着类C的对象包含类B的对象。

继承是一种用于表示特殊与一般的关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值