概述
面相对象(OOP)的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。
在OOP中,将数据放在第一位,然后再考虑操作数据的算法。
①、类
类(class)是构造对象的模板或蓝图。由类构造(construct)对象的过程称为创建类的实例(instance)。
封装(有时叫数据隐藏)。 从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。
对象中的数据称为实例域,操纵数据的过程称为方法。对于每个特定的类实例(对象)都有一组特定的实例域值。这些值的集合,就是这个对象的当前状态,
无论何时,只要向对象 发送一个消息,它的状态就有可能发生改变。
实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。
可以通过拓展一个类来建立另外一个新的类。在拓展一个已有的类时,这个拓展后的新类具有拓所拓展的类的全部属性和方法。
②、对象
要想使用OOP,一定要清楚对象的三个主要特征:
● 对象的行为 ———— 可以对对象进行哪些操作,或可以对对象施加哪些方法?
● 对象的状态 ———— 当施加哪些方法时,对象如何响应?
● 对象标识 ———— 如何辨别具有相同行为与状态的不同对象?
同一个类的所有对象实例,由于支持相同的行为而具有家族式的相似性。对象的行为是用可调用的方法定义的。
每个对象都会保存着当前特征的信息,这就是对象的状态。对象的状态可能会随着时间而发生改变,但这种改变不会是自发的。
对象状态的改变必须通过调用方法来实现。
作为一个类的实例,每个对象的标识永远是不同的,状态常常也存在着差异。
③、识别类
在面向对象程序设计时没有所谓的“顶部”,要先从设计类开始,然后再往每个类中添加方法。
④、类之间的关系
在类之间,最常见的关系有
● 依赖(“uses-a”) 如果一个类的方法,操纵另一个类的对象,我们就说一个类依赖于另一个类。(应该尽可能地将相互依赖的类减到最少)
● 聚合(“has-a") 聚合关系意味着,一个类的对象包含另一个类的对象。
● 继承(“is-a”) 用于表示特殊与一般关系。一般而言,如果类A拓展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能。