面向对象的咬文嚼字
一开始你就栽坑里了
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
对象具有状态,一个对象用数据值来描述它的状态。
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
这是我能找到的对“对象”、“对象的状态”、“对象的行为”、“类”最多最广泛的解释,也是大家学习面象对象时第一课所接触的内容。可是这是一个有Bug的定义!在Java语言中有一个类java.io.Reader
,在C#语言中也有类似的类System.IO.StringReader
。那么问题来了,这个'Reader'或'StingReader'类,它所对应的是什么对象呢?它是‘事’吗?它是‘物’吗?好象都不是,它是‘抽象的规则’吗?或者是计划?事件?也都不是。显然它是齐天大圣孙悟空,不在三界之内五行之中!呵呵,开个玩笑。显然这也不是甲骨文或微软的错。谁错了,你懂的!
我来解释一下对象是什么:对象是人们要进行研究的任何事物,以及它们之间的关联行径。它不仅能表示具体的事物,还能表示抽象的规则、计划、事件和行径。
连锁反应
我用了“行径”这个词,听起来很拗口,那么试着把它理解为一种行为。然而既然把“行为”也纳入对象的范畴那么,“对象的行为”如何解释?这显然会产生混乱。因此我在定义对象时有一个约束--“关联行径”,这表示了是一种对象与对象之间建立联系的动作才称为关联行径,这种动作才能被视为对象。这才选择用“行径”以表示和“行为”有区别。“行为”表示仅影响对象自已的操作;“行径”则含有对外部影响的意思。
继续填坑
“具有相同或相似性质的对象的抽象就是类。”对此,“设计模式”表示很懵圈,如果这条成立,那就表示实例与抽象无法解耦合。这显然暗示我们,写出这一句作者或译出这一句的译者,显然他在初中数学课翘课了,那堂课上讲了“充要条件”、“必要条件”和“充分条件”。我只能说对象是类的实例。“类”又是什么呢?“类”是指定数据格式与可用过程的集合。
至此,你了解“对象”了吗?开始真正的“面向对象”吧!