一、类、创建类的实例、封装、实例域、方法、对象的当前状态
有些关于概念的专业表述还是需要了解透彻的呀:
类是构造对象的模板或蓝图。 由类构造对象的过程称为创建类的实例。
封装,(更形象地说)又称数据隐藏。封装将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。
对象中的数据称为实例域,操纵数据的过程称为方法。 每个类实例(即对象)的实例域值的集合称作这个对象的当前状态。
二、封装与继承
实现封装的关键在于:不能让类中的方法直接地访问其他类的实例域。程序仅通过对象的方法与对象数据进行交互。
封装给对象赋予了类似“黑盒”的特性,这是提高重用性和可靠性的关键。 在Java中,所有的类都源自于一个“超类”——Object。
通过拓展一个类来建立另一个类的过程称为继承(inheritance)。在拓展一个已有的类的时候,这个拓展后的新类具有所拓展的类的全部属性和方法(当然还有适用于这个新类的新数据域和新方法)。
三、对象的三个主要特性
对于只学习过面向过程程序设计(POP)——C语言就是一门典型的面向过程程序语言——的人而言,刚接触面向对象程序设计(OOP)时需要清楚对象的三个主要特性:
- 对象的行为——可以对对象施加哪些操作/方法?
- 对象的状态——当对对象施加方法时,对象如何响应?
- 对象标识——如何辨别具有相同行为和状态的不同对象?
对于同一个类的所有对象实例,它们都支持相同的行为,具有相似性。对象的行为是由可调用的方法定义的。
每个对象都保存着描述当前特征的信息,即对象的状态。对象状态的改变必须经方法的调用才能实现,并不会自发进行(当然了,除非封装性遭到了破坏)。
每个对象的状态常常存在差异,对象们的标识则永远是不同的。
四、设计类
传统的面向过程程序设计中,规定从顶端的main函数开始编写程序。而面向对象程序设计则无此要求。学习OOP,首先要学会设计类,然后往每个类中添加方法。
举个简单的例子:
在设计<订单处理系统>时,你会考虑到这样一些名词:
- 商品
- 订单
- 送货地址
- 付款
- 账户
这些可以设计为类。
而这样一些动词:
- 添加订单
- 发送/取消
- 支付
这些将会被设计成相应类的方法。
五、类之间的关系
类之间最常见的关系有:
- 依赖:一个类的方法操纵另一个类的对象
- 聚合:一个类的对象包含另一个类的对象
- 继承:通过拓展一个类来建立另一个类的过程