面向对象思维的广义应用
面向对象思维本身是作为计算机程序里的一种程序设计方法,但是在大量的实践经验中我发现,他可以给学习和探索任何一个概念提供一个非常好的途经,以至于我认为它应该被推广开来作为一种普遍的学习方法论。
面向对象的基本思维很简单,通俗的说就是用制作蛋糕的模具制作各自各样的蛋糕,达到量产的目的。
首先确定研究对象,这里我们的研究对象有2个
我们把模具本身叫做——类Class
把生成的具体的某一个蛋糕叫做由类生成的——实例instance
由类生成的实例,一定具备2个东西
其一是属性,比如长度,宽度,高度,面积,体积,好感度,战斗力,生命值,坐标....诸如此类的一系列可以静态描述模具生产的产品的特征的值
其二是方法,和属性这种静态的值不同的是,方法是动作,在程序语言里表现出来就是一个函数,这个函数可以把以上的属性作为输入,然后执行某个逻辑后输出一些值。比如一个动作游戏里,所有的角色实例都有【攻击】这个方法,一旦玩家按下攻击键,程序就会调用【攻击】方法,调用攻击双方的生命值和攻击力等属性进行计算,然后重新调整这些属性。
注意,属性和方法是在实例这个产品身上的
但是是在类这个模具里里面回规定好的,因此才可以用模具量产
同时我们还知道,我们有时候需要多个模具。为了偷懒,避免重新定义一遍类,我们允许类和类之间可以继承。如果B类继承了A类,B类就自动具备A类规定的的所有属性和方法。在继承的基础上,我们可以添加新的属性和方法以此来拓展B类。
———
好了,以上就是基本概念,那么有什么用呢....
这个时候我们要重点强调一下【面向对象】,看到任何一个对象,先问自己,这是什么?
是类吗?
是实例吗?
有哪些属性和方法呢?
比如你在ps软件里使用的任何一个工具,比如画笔工具,你都可以在属性面板里调节它的属性,比如颜色、线条粗细......等等,它的方法就表现为你使用它这个动作,它在做什么事情......触类旁通可以很快学会所有的工具
再比如数学里的加减乘除,很显然是一个实例的方法
那这个实例是什么?类又是什么?
向量也有加减乘除吧?
它们都具有类似的运算方法,那么它们之间有什么关系呢
再深入思考一点,它们如果都是继承自某个父类的话,这个具有共同特征的抽象父类又是什么呢?
用这种思路来理解抽象的代数系统(集合的元素+运算 -> 新元素)
以及群、环、域的继承关系有会相当大的帮助
———
注意我们现在有2种学习方法,都很具有参考价值
一种是我们已经实现知道了“类”的实现,然后直接学习和使用由这个类生产的实例的属性和方法
还有一种是我们已经知道并了解学习了实例,但是我们不知道他的“类”是什么,我们需要根据这个实例的特征推测这个类出这个类
或者根据多个之类推测出他们的共同父类
也就是正向思维和逆向思维,并且我们知道正向和逆向有时候并不是一对一对应的,有时候是可以一对多的,比如 2的平方是4,4开根号是正正负2
我们有这种心里准备可以避免一些麻烦
这个逆向的过程也是抽象的过程
从我们已知的代数运算 抽象出统一理论——代数系统的这个逻辑(也就是推测它的类),可以帮助我们无师自通研究很多问题
——
关于性质:
研究化学物质的时候,我们会经常提到性质的概念,性质是某个物质表现出来的特殊特征
“化学是一门研究物质的组成、结构、性质、以及变化规律的科学”
但是我们上面可以看到,在面向对象的类是没有性质这种东西的,它只有
属性和方法。
属性实际上有点类似于物理性质,是一个静态的,可读的值
而像可燃性、腐蚀性这种、可以发光这样的用抽象的特征词描述的性质
这种实际上靠的是属性和方法的共同作用约束,这个很自由,程序里可以随便用方法函数去约束它能做什么事情












