0%

公众号发表01

java · 对象与类

面向对象程序设计(OOP)

学过 C/C++ 的同学们都知道, Java 作为一个 面向对象程序设计(简称OOP)语言,有着其深刻的独到之处。

面向对象的程序是由 对象 组成的。每个对象包含对用户 公开 的特定 功能 部分与 隐藏实现 部分。

程序中,有些对象来自 标准库,有些是自定义的。无论他们来自哪里,有一点是相同的,只要对象能够满足要求,就不必关心其功能的具体实现过程。

在OOP中,不必关心对象的具体实现,只要能够满足用户的需求即可

传统的结构化程序设计通过设计一系列的(算法)来求解问题。一旦确定了这些过程,就要开始考虑存储数据的方式。这就是 Pascal语言的设计者 Niklaus Wirth将其著作命名为《算法 + 数据结构 = 程序》( Algorithms + Data Structures = Programs , Prentice Hall,1975)的原因。需要注意的是,在 Wirth命名的书名中,算法是第一位的,数据结构是第二位的,这就明确地表述了程序员的工作方式。首先要确定如何操作数据,然后再决定如何存储数据,以便于数据操作。而OOP却调换了这个次序,将数据放在第一位,对于一些规模较小的问题,将其分解为过程的开发方式比较理想。而面向对象更加适合于解决规模较大的问题。
——《Java核心技术》 【美】凯 S.霍特思曼

类(class)

是构造对象的模板。通过这个模板,可以创建无数个功能相似的 对象。由类构造(construct)对象的过程称为创建类的 实例(instance)。

用Java编写的所有代码都位于某个类的内部。标准的Java库提供了几千个类,可以用于用户界面设计、日期、日历和网络程序设计。尽管如此,还是需要在Java程序中创建一些自己的类,以便描述应用程序所对应的问题域中的对象。

封装 (encapsulation,又称数据隐藏),则是将数据和行为组合在一个包中,并对对象的使用者隐藏数据。对象中的数据称为 实例域(instance field),操纵数据的过程称为 方法 (method),对于每个特定的类实例都有一组特定的实例域值。这些值的集合就是这个对象的当前状态(state)。无论何时,只要向对象发送一个消息,它的状态就有可能发生改变。

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

OOP的另一个原则是:可以通过扩展一个类来建立另外一个新的类。事实上,Java中所有的类都源自于一个超类,它就是 Object。这会在后面详细介绍。

可以通过扩展一个类来建立另外一个新的类

被扩展后的新类具有原来类的全部属性和方法。因此在新类中,只需提供适用于这个新类的新方法和数据域就可以了。通过扩展一个类来建立另外一个类的过程称为 继承 (inheritance)。

看到这里的姐妹一看就要暴富暴美,为什么不让这一天提前一点呢ヾ(≧▽≦*)o