12.认识对象
第 12 课《面向对象到底是什么意思》
【开场】
电台广播:C#是一种彻底地面向对象的编程语言,它具有面向对象语言应有的一切特性。(音效淡出)
村长:很多人第一次听到 “面向对象” 这四个字,都会觉得高深又抽象。其实不然。
在面向对象里,最关键的是对象二字。
对象通了,一路顺风;对象懵了,步履维艰。 后面的所有概念,都是在对象的基础上,长出来的,根本绕不开。
所以今天这节课,我们一起学习搞对象。
我们的任务不是让你立刻学会写对象 而是先建立一套“面向对象的编程世界观“。 学会用对象的思想去理解程序、编写程序。 从一开始就走在正确的路上。
从今天起,请试着用对象思想理解这个世界。
世界观对了,事半功倍!后面学什么都顺。咱们开始。
(LOGO 动画 3秒)
知识点
- 对象是什么
- 面向对象编程是什么
- 对象的两个核心维度
- 类是什么
- 如何创建对象
- 为什么说:对象负责干活
一、对象是什么
奇奇:村长!对象是什么啊?
村长:在中文里,“对象”就是“具体存在的某个东西”。 一切你思维或行为指向的目标事物,都叫“对象“。比如:
你面前的水杯,是对象。 旁边那只猫,是对象。 你自己,也是对象。 你正在看的电脑,还是对象 一句话: 现实世界中,万物皆对象。
奇奇:这跟“编程“有什么关系呢?
村长:关系太大了,因为
(金句)你怎么理解现实世界,你就怎么写代码。
如果你认为世界是由一个个对象组成的, 那么写程序的时候,自然也会想到: 能不能用代码,把这些对象描述出来? 这,就是面向对象编程最核心的思想。
二、面向对象编程是什么
奇奇:村长!那面向对象编程又是什么意思?
村长:从字面看,面向对象编程就是以“对象“为中心进行编程。
它不是语法,它是一种“解题的思维方式“。 与之对比的,还有以“过程”为中心的编程思想,叫面向过程。
我问你:假如家里进了一只老鼠,你怎么解决?
奇奇:我……我拿拖鞋拍死它!
村长:好,这种思路,就是典型的面向过程: 第一步,找到拖鞋; 第二步,走过去; 第三步,瞄准; 第四步,拍!
把一个任务拆成一步一步,按顺序执行,这就叫面向过程。
奇奇:那“面向对象”呢?
村长:很简单。 请一只猫过来,让猫去捉老鼠。 你只需要喊一声:去捉! 剩下的事,全都交给猫搞定。 这就是面向对象。
奇奇:哦!我懂了。 面向过程,是我自己一步一步把事干完。 面向对象,是找合适的对象,让对象去干活。
村长:完全正确!这就是两种完全不同的编程思维。
三、对象的两个维度
村长:既然对象这么重要,给你出道题,请向从未见过猫的人解释一只猫,你会如何描述?
奇奇:它是白色的。两只眼睛。四条腿。会喵喵叫。还会捉老鼠。
村长:非常好。 其实现实世界中的任何一个对象,都可以从两个维度说来描述:
第一,特征:就是它有什么。比如:颜色、几只眼睛、几条腿、体重等。 第二,行为:就是它能干什么。比如:会叫、会跳,会捉老鼠。
只要把这两方面描述清楚,这个对象就解释完整了。
奇奇:原来如此!如果有上帝,它一定是按特征和行为创造了万物。
村长:理解非常到位。
四、类是什么
村长:现在我们回到程序里。 如果让你用代码表示一只猫,你会怎么写?
奇奇:用代码创建对象?模拟现实世界?让我试试......
string color = "白色";
int eyes = 2;
int legs = 4;
double weight = 2.6;
村长: 思路完全没问题,用变量存猫的特征数据。 但问题来了: 如果我要养 10 只猫,你是不是要复制粘贴 10 遍? 100 只猫呢?代码会大量重复,而程序员最讨厌重复。 于是,就有了类。
村长:程序员想到一个办法。 既然现实中有很多很多猫。 那不如先设计一个模板。 这个模板不代表任何一只具体的猫,它只负责描述猫这个物种的共同特征和行为。例如
// 这是一个模板(类)
class Cat
{
// ========== 特征:编程里叫“属性” ==========
public string Color = "白色";
public int Eyes = 2;
public int Legs = 4;
// ========== 行为:编程里叫“方法” ==========
// 实例方法:必须由具体的猫对象来调用
public void Meow()
{
Console.WriteLine("喵喵喵");
}
public void CatchMouse()
{
Console.WriteLine("捉到老鼠了");
}
}
这个模板,在编程里,就叫:类(Class)。 在第3 集《为什么C#上来就是一坨代码》中,我们提到过,命名空间是存储类的容器,所以类要创建在命名空间下。
类里面的这些特征,从概念上,可以理解为属性;(从语法上,以后我们还会学习如何用字段和属性来表示这些特征;)
类里面的这些"行为",在程序里叫方法。方法的标志就是带有一对圆括号。
今天,先理解概念,不用纠结语法。
奇奇:所以……类其实不是一只猫。而是一份猫的模板?
村长:没错!类不是具体对象,而是对一类事物共同特征和行为的抽象。就像人类、鸟类、汽车类。它更像一张建筑图纸,有了图纸,才能批量盖房子。
五、创建对象
奇奇:有了模板,怎么造出一只猫呢?
村长:很简单,只需要一个 new 关键字,例如
Cat cat1 = new Cat();
这一句代码,就在内存里真正创建了一只猫。再来几只:
Cat cat2 = new Cat();
Cat cat3 = new Cat();
同一个模板,可以创建无数个对象。 所以一定记住:
类是创建对象的模板, 对象是根据模板创建出来的具体实例。
六、对象负责干活
奇奇:对象有了。怎么让它捉老鼠?
村长:也很简单,告诉这只猫去捉就行了:点号表示执行 cat1 对象的方法,可以理解为“的“
cat1.CatchMouse(); // 输出:捉到一只大老鼠!
注意看,我们是用对象名字 cat1 去调用CatchMouse()(捉老鼠)的方法。这种必须通过对象才能调用的方法,叫实例方法。
奇奇:等等。那我们天天写的:Console.WriteLine
Console.WriteLine();
为什么可以直接通过类名 Console 调用WriteLine()方法, 而不用 new?
村长:你问到了一个初学者最困惑的点。
刚刚讲的实例方法CatchMouse()(捉老鼠)必须依赖于某个对象来执行,因为是猫捉老鼠,不是猫类捉老鼠。
而 WriteLine方法 不一样, 在 C#中,Console表示控制台。一个程序运行时,只有一个控制台,不存在多个控制台对象。所以WriteLine()方法直接挂在Console类上,不用 new。
这种不需要创建对象,直接用类名调用的方法被称为静态方法
在 WriteLine()方法上按 F12 键或者单击右键,点击“转到定义“ ,你会看到WriteLine()方法的定义中有一个关键字:static。 static表明该方法是静态方法;没有 static,一般就是实例方法。
最后请记住:实例方法属于对象,静态方法属于类。
总结
今天我们不需要搞懂全部语法, 但希望能帮助你建立了一套非常重要的编程世界观。 最后,请记住三句话: 第一,现实世界由对象组成。 第二,程序世界也由对象组成。 第三,类负责创建对象,对象负责干活。 这,就是面向对象编程最核心的思想。
本期视频就到这里。我是村长。听懂不算会,敲出来才算。
如果这个视频对你有帮助,记得点赞、收藏、关注。 感谢观看,我们下期见。
下期预告:《注释的用法:注释到底怎么写》