在刚开始学编程的时候,玩了Winform一段时间,脑子里有一个问题,为什么界面文件会有一个类似隐藏起来的文件?
为什么里面有会很多new出来的对象,而又有对应的尺寸大小?button1button2有什么区别?那他们的Class(ButtonClass)又表示什么?
image.png

QQ截图20210410091611.jpg

而很长时间,我都是处于这一个似懂非懂,云里雾里,知道用法,但你问我这是什么,应该是怎样的思维方式去思考,我真的不知道.
image.png

从游戏开始

游戏有很多呢,比如我们熟悉的CS,LOL,DNF还有单机玩家的各种3A大作.
这里先拿一个栗子,一个简单的射击游戏,我这边使用了虚幻引擎自带的初始化FPS项目,顺便加一点其他内容
在项目启动起来,点击鼠标,就能射♂击了。
虽然很简单,但足够了。
2341104637.gif

我们先看拆解下我们看到的东西

  1. 最明显的,我们的子弹是个球,而每次射出的子弹,都是一模一样的,只不过,他们会受不同的物理效果所影响。
  2. 是游戏中的箱子,都是一样的,他们只有方向,位置不一样。

一般来说,玩这些游戏多的玩家都会知道,他们都是一个模型啦,箱子是一个箱子模型,球是球的模型

而面向对象思维的妙处就是在这里,而模型,就是我们程序里面的Class

类和实例的一种解释

使用模型,放置了N个箱子,就是用Class实例化(new)了N个对象出来,他们都是Class的实例。

1369997250.gif

你可以将Class看成是一张蓝图,我们用这一张蓝图建了一个建筑,或建多个建筑,而他们都是使用同一个图来建造(实例化)

比如我现在有一个箱子的蓝图(模型),他的颜色是他的属性,那么它的值就能变化,而我们,在实例化时(或后),都能修改他的颜色.
image.png

这样,就粗略粗暴的得到与游戏相似得模型相同,颜色不同的效果.
这样延伸出去,就是一个人物拿着相同的枪,不同的地图,使用同个人物模型。

当然,用这个思想带入我们电脑的页面的话,可以得出这样的图像:
我们有一个按钮蓝图,然后我们用这个蓝图 制作了N个按钮,分别把他们得坐标设置不一样,那么在页面上,就会显示出好多个按钮.
image.png
image.png

对于纯代码,没有界面得程序来讲,这就要有点想象力了,因为没有可视化,不好理解,但我们能将他想象成游戏一般,每个Class都是一个模型,每实例化(new)一个Class出来,都是拉一个模型拖到游戏中。而我一直都是用这种思维方式。
比如new了一个Class后,我们当在空旷得世界中,创建了一个方块,而他们有不同的属性、方法,并且会互相引用、调用.

只要Class多了,实例多了,整体来说就是极其复杂的一个大集合,本体就像是一个庞大的数据网络。而程序本就如此。

当然,并不是说程序里面就是一个个对象,它依然是类似面向过程的去执行,运行。只是对于我们理解而言,我们可以将他们抽象成对象,更好的划分关系,设计,编写和理解而已。

希望能帮到你理解到面向对象的思考方式

Q.E.D.


随意游世