喵宅苑 MewoGarden × 技术宅社区II | Z站 Z Station 棒棒哒纯文字二次元技术社区

正文

# 面向对象思维的广义应用

作者:admin

面向对象思维的广义应用

面向对象思维本身是作为计算机程序里的一种程序设计方法,但是在大量的实践经验中我发现,他可以给学习和探索任何一个概念提供一个非常好的途经,以至于我认为它应该被推广开来作为一种普遍的学习方法论。

面向对象的基本思维很简单,通俗的说就是用制作蛋糕的模具制作各自各样的蛋糕,达到量产的目的。

首先确定研究对象,这里我们的研究对象有2个
我们把模具本身叫做——类Class
把生成的具体的某一个蛋糕叫做由类生成的——实例instance

由类生成的实例,一定具备2个东西
其一是属性,比如长度,宽度,高度,面积,体积,好感度,战斗力,生命值,坐标....诸如此类的一系列可以静态描述模具生产的产品的特征的值

其二是方法,和属性这种静态的值不同的是,方法是动作,在程序语言里表现出来就是一个函数,这个函数可以把以上的属性作为输入,然后执行某个逻辑后输出一些值。比如一个动作游戏里,所有的角色实例都有【攻击】这个方法,一旦玩家按下攻击键,程序就会调用【攻击】方法,调用攻击双方的生命值和攻击力等属性进行计算,然后重新调整这些属性。

注意,属性和方法是在实例这个产品身上的
但是是在类这个模具里里面回规定好的,因此才可以用模具量产

同时我们还知道,我们有时候需要多个模具。为了偷懒,避免重新定义一遍类,我们允许类和类之间可以继承。如果B类继承了A类,B类就自动具备A类规定的的所有属性和方法。在继承的基础上,我们可以添加新的属性和方法以此来拓展B类。
———
好了,以上就是基本概念,那么有什么用呢....
这个时候我们要重点强调一下【面向对象】,看到任何一个对象,先问自己,这是什么?
是类吗?
是实例吗?
有哪些属性和方法呢?

比如你在ps软件里使用的任何一个工具,比如画笔工具,你都可以在属性面板里调节它的属性,比如颜色、线条粗细......等等,它的方法就表现为你使用它这个动作,它在做什么事情......触类旁通可以很快学会所有的工具

再比如数学里的加减乘除,很显然是一个实例的方法
那这个实例是什么?类又是什么?
向量也有加减乘除吧?
它们都具有类似的运算方法,那么它们之间有什么关系呢
再深入思考一点,它们如果都是继承自某个父类的话,这个具有共同特征的抽象父类又是什么呢?

用这种思路来理解抽象的代数系统(集合的元素+运算 -> 新元素)
以及群、环、域的继承关系有会相当大的帮助

———
注意我们现在有2种学习方法,都很具有参考价值

一种是我们已经实现知道了“类”的实现,然后直接学习和使用由这个类生产的实例的属性和方法

还有一种是我们已经知道并了解学习了实例,但是我们不知道他的“类”是什么,我们需要根据这个实例的特征推测这个类出这个类

或者根据多个之类推测出他们的共同父类

也就是正向思维和逆向思维,并且我们知道正向和逆向有时候并不是一对一对应的,有时候是可以一对多的,比如 2的平方是4,4开根号是正正负2
我们有这种心里准备可以避免一些麻烦

这个逆向的过程也是抽象的过程
从我们已知的代数运算 抽象出统一理论——代数系统的这个逻辑(也就是推测它的类),可以帮助我们无师自通研究很多问题

——

关于性质:
研究化学物质的时候,我们会经常提到性质的概念,性质是某个物质表现出来的特殊特征

“化学是一门研究物质的组成、结构、性质、以及变化规律的科学”

但是我们上面可以看到,在面向对象的类是没有性质这种东西的,它只有
属性和方法。

属性实际上有点类似于物理性质,是一个静态的,可读的值
而像可燃性、腐蚀性这种、可以发光这样的用抽象的特征词描述的性质

这种实际上靠的是属性和方法的共同作用约束,这个很自由,程序里可以随便用方法函数去约束它能做什么事情

回复

0%
站点地图友情链接:
喵宅苑
喵空间社区程序
喵宅苑 静态版
宅喵RPG地图编辑器
络合兔
喵宅苑预览版
Lanzainc
技术宅
小五四博客
莉可POI
Mithril.js
枫の主题社
Project1
午后少年
机智库
七濑胡桃
xiuno
幻想の日常
魂研社
Nothentai
0xffff
欲望之花
泽泽社长
淀粉月刊
HAYOU
红客联盟
异次元
轻之国度
神奇宝贝新生代
游戏狗
口袋双子星
我的世界论坛
梦次元
动漫东东
动漫国际
精艺论坛
78动漫
吐槽弹幕网
漫客栈
nexmoe