在刚开始学编程的时候,玩了Winform一段时间,脑子里有一个问题,为什么界面文件会有一个类似隐藏起来的文件?
为什么里面有会很多new
出来的对象,而又有对应的尺寸大小?button1
和button2
有什么区别?那他们的Class(ButtonClass)
又表示什么?
而很长时间,我都是处于这一个似懂非懂,云里雾里,知道用法,但你问我这是什么,应该是怎样的思维方式去思考,我真的不知道.
从游戏开始
游戏有很多呢,比如我们熟悉的CS,LOL,DNF还有单机玩家的各种3A大作.
这里先拿一个栗子,一个简单的射击游戏,我这边使用了虚幻引擎自带的初始化FPS项目,顺便加一点其他内容
在项目启动起来,点击鼠标,就能射♂击了。
虽然很简单,但足够了。
我们先看拆解下我们看到的东西
- 最明显的,我们的子弹是个球,而每次射出的子弹,都是一模一样的,只不过,他们会受不同的物理效果所影响。
- 是游戏中的箱子,都是一样的,他们只有方向,位置不一样。
一般来说,玩这些游戏多的玩家都会知道,他们都是一个模型啦,箱子是一个箱子模型,球是球的模型
而面向对象思维的妙处就是在这里,而模型
,就是我们程序里面的Class
。
类和实例的一种解释
使用模型,放置了N个箱子,就是用Class实例化(new)了N个对象出来,他们都是Class的实例。
你可以将Class
看成是一张蓝图
,我们用这一张蓝图
建了一个建筑
,或建多个建筑,而他们都是使用同一个蓝
图来建造(实例化)
的
比如我现在有一个箱子的蓝图(模型)
,他的颜色
是他的属性,那么它的值就能变化,而我们,在实例化时(或后),都能修改他的颜色.
这样,就粗略粗暴的得到与游戏相似得模型相同,颜色不同
的效果.
这样延伸出去,就是一个人物拿着相同的枪,不同的地图,使用同个人物模型。
当然,用这个思想带入我们电脑的页面的话,可以得出这样的图像:
我们有一个按钮
的蓝图
,然后我们用这个蓝图
制作
了N个按钮,分别把他们得坐标
设置不一样,那么在页面上,就会显示出好多个按钮.
对于纯代码,没有界面得程序来讲,这就要有点想象力了,因为没有可视化,不好理解,但我们能将他想象成游戏一般,每个Class
都是一个模型
,每实例化(new)
一个Class
出来,都是拉一个模型拖到游戏中。而我一直都是用这种思维方式。
比如new
了一个Class
后,我们当在空旷得世界中,创建
了一个方块,而他们有不同的属性、方法
,并且会互相引用、调用
.
只要Class
多了,实例
多了,整体来说就是极其复杂的一个大集合,本体就像是一个庞大的数据网络。而程序本就如此。
当然,并不是说程序里面就是一个个对象,它依然是类似面向过程的去执行,运行。只是对于我们理解而言
,我们可以将他们抽象成对象
,更好的划分关系,设计,编写和理解而已。
希望能帮到你理解到面向对象的思考方式
Q.E.D.