Skip to main content

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,一般就是实例方法。

最后请记住:实例方法属于对象,静态方法属于类。

总结

今天我们不需要搞懂全部语法, 但希望能帮助你建立了一套非常重要的编程世界观。 最后,请记住三句话: 第一,现实世界由对象组成。 第二,程序世界也由对象组成。 第三,类负责创建对象,对象负责干活。 这,就是面向对象编程最核心的思想。

本期视频就到这里。我是村长。听懂不算会,敲出来才算。

如果这个视频对你有帮助,记得点赞、收藏、关注。 感谢观看,我们下期见。

下期预告:《注释的用法:注释到底怎么写》