00:00
同学们,我们来看一下SC的面向对象编程的基础部分。呃,那么首先我们来简单的把这个面向对象的一个呃,一个基本的概念过一下啊,这个养猫的问题呢,就是提出我们内核对象的一个关系,呃,比如说呃,根据呃为什么会有面向对象呢?比如说我这有个需求啊,说有一个张老太太养了两只猫,一个叫小白,呃,今年三岁白色,还有一个叫小花,今年没没有那么大的猫啊,十岁啊,今年十岁花色,请编写一个程序,当用户输入小猫名字时,就显示该猫的名字、年龄和颜色。哎,如果用户输入的小猫名字错误,则显示没有这只猫,同学们看这个题其实挺简单的,但是呢,大家想一想啊,如果没有这个类与对象的关系,其实你很难去处理这个东西,现在我们看这个问题是什么呢?它的问题是第一个,第一个问题就已经抛出来了,就说第一个呢,就是我们一个,呃,这个猫呢,就是这个这个猫,这个这个猫有三个属性。
01:06
它有三个属性,而且呢,它类型还不一样,类型不一样。对吧,类型不一样,你想想这个时候你用变量来保存就不行了,如果使用对吧,如果使用普通的变量就不行,就不好管理,就不好管理。为什么不好管理呢?你想一想,呃,如果我们真的用三个变量来分别去管理这么一个猫的信息,那将来就散了,将来这个张老太太养的不是两只猫,他养的是2000只猫,你你200乘以三就是600个变量没法没法管啊,6000个变量没法管,那所以说这个时候呢,呃,其实真正这个面向对象的原因没有那么复杂,我相信同学们以前在学这个面向对象的时候,可能老师要讲一,有些老师他比较绕,他会讲很多什么啊,这个面向对象的这个思想啊,什么,其实没那么。
02:04
你学久了,你发现没什么乱七八糟那种东西,其实面向对象他最先出现的就是一个原因,什么原因呢?就是要更好的管理数据,你看面向对象出现它就是要解决什么问题呢?它出现了一个新的数据,这个时候就普通的变量不行了,怎么办呢?就要使用一种一种新的一种新的数据类型。其实那就是一种新的数据类型,这个数据类型要干什么呢?要满足这么两个特点,它要满足这么几个这个特点,第一个呢,它可以管理,管理多个多个不同类型的数据,对不对,这个就体现出什么呀属性。是不是就这东西啊,就是我们把一把一堆东西给你,给你扔到一个里面去,把它管理起来,不就是那个属性吗?好,他还要解决一个什么问题呢?在这个基础上他做了一个扩展,就是我们的这个面向对象的设计者,他做了一个扩展,他还要解决一个什么问题呢?他不但他需,他不但希望我们这个新的数据类型。
03:09
我们这个新的数据类型能够去管理多个不同类型的数据之外呢,他还希望这个类型可以可以对什么呢?对属性进行操作,这个就是对应我们的所谓的方法就完了。其实我们的类最核心的就是一个属性。一个方法。其实就是为了解决这个事情,但是呢,我们可能有很多书,当时我我在选那个面向对象的时候,其实说白了。那个第一章我是看到完全不知道在说什么。讲一大堆那个理论方法呀,一堆东西。讲完了完全不知道说什么,结果呢,很简单,讲到后面一看,哦,这个类就是这个玩意,一下就明白了,你知道吗?啊,就是属性,它设计属性来管理不同类型的数据。第二个呢,就是用方法来操作属性,就是解决这个问题,就一下就一目了然了,所以说经常我们以以后同学们在学一个知识的时候啊,将这个,呃,如果以后同学们在学这个,像性能优化呀,这个你们先不要看理论的东西。
04:16
你们应该怎么学呢?最好的方式就是拿一个案例,这个案例他原先有处理这个数据很慢,当别人写了一段代码过后,这个速度就提上去了,你就学这个,学完了过后你再去看理论,这样呢,学习效果会比较。快啊,切记,我们学这个东西都是这个流程好了,那既然如此,这个最后呢,在这里就引出了什么呢?类与对象。哎,就这么来的类与对象,好,这是老师由这个养猫的问题呢,提出这么一种新的数据类型,就是我们什么的类和对象,类就是一种数据类型,对象呢是他一个实例,坦白的讲,对象也可以看成是一种类型,对吧?啊,而且老师以前在讲这个类与对象的时候,应该,呃,所有的Java老师都会讲类本身也是一种对象是不是?
05:06
也是一种对象啊好的好,那现在呢,我们往下呃,来做这个,这做这个案例,那我们看看了。那么skyla语言呢?它是面向对象的,有这么几个特点需要同学们了解,第一个Java面向对象的Java式面向对象的编程语言没问题,但是由于历史的原因,Java中还存在很多非面向对象的内容,那老师没没有说啊,以前我们讲学Java的时候,老师说的就是面向对象啊,同学们记住,Java它面向对象的纯度最多也就50%,还有500%,95%,还有5%的呢,不是面向对象的东西。如果面试官问到你,你可以这么回答,比如像基本类型,它就不是面向对象的,比如int。这个硬它就不是面向对象啊。印的就是一个很基本的数据,它你的有方法吗?没有。
06:00
In里面能包含数据吗?没有,那么它就不是类,那就不是属于面向对象的,还有呢,像空,像静态内容,比如静态方法,静态属性都不是属于面向对象的,为什么这么讲?因为你静态方法,静态属性,它是属于所有这个它是类这个级别的,说它其实严格来讲也不是面向对象,因此呢,在我们的SKY里面,他把这个静态的东西拿掉了。他做了一个什么呢?他用半生对象来替代静态内容啊,所以说这个就是呃面向,呃,Scar面向对象的第一个,为什么要改进第二点呢?SC语言来自于Java,所以天生它就是面向对象的,而且SC是纯粹的面向对象,即SC中一切皆为对象,甚至包括这个空,你看啊,同学们,你们写的这个空,这个值它对应的就是nu的了,连它都已经是个对象。说它它确实是很纯度很高的啊,纯度很高,甚至包括像这个特呢,他也做了包装,变成这个东西了。
07:05
后面我们就这个大家应该有所感受,好那么我们在学开面向对象的时候呢,可以对比着甲烷来进行这个学习,好同学们这个概念就过了啊。好,类与对象的关系,这地方我就不再多说了,比如说我们怎么去做这个类的呢?我们是把一些这个猫,比如说举个例子,对这个猫猫呢,我们把它所有特性提取出来,把它属性提出来,把行为提出来,比如说我们认为一个猫呢,它有什么呢?它有年龄,它有名字,它有颜色,诶这个呢,就把属性提出来了,它有行为,行为就是我们的方法。对吧,就是我们方法,比如说这个猫可以干什么,可run可快啊,通过通过学习呢,它可以做这个算术题,Calculator,它可以计算啊等等等等等等啊,这就是它行为,那这就是由所有猫呢提出来它的属性,属性再加行为就构成了猫类,那么猫类呢,经过实例化就形成对象,这个就是它的一个。
08:06
示意图好,这个呢也是一样的,我就不再多说,我就不再多说,那现在我们快速的啊用啊刚才我用这个极快的速度过了一遍,因为你们是有Java基础的,如果是真的一点语言基础没有的话,不能这么讲课。但是我就是想把这个JA Java里面的那个面向对象快速的过渡到SC面向对象好了,那现在有了这个前面一个过渡呢,我们就用面向对象的方式来解决刚才养猫的问题,来一个快速入门,然后再讲里面的细节,好的同学们,我们现在快速来完成一下,那这是我们的第六章。这是我们的第六章,来写come。我们的at硅谷对吧?点CHAPTER06好进到这里,那为了待会可以可以分,呃分开呢,我先建一个临时的一个文件,好开开始建我们的包了,第一个包我们讲的是一个快速入门的案例DEMO啊,OK,捡个包。
09:12
Op po的一个设计好,我们新建一个类,用SC来完成,就是我们写一个cat DEMO对吧,写一个object。来,同学们,根据老师刚才的思路呢,我们来一起完成。首先我们仍然要定义一个类。定义一个类是cat类。啊,Class仍然是个关键字开啊,待会我们讲细节开,那首先呢,刚才老师讲了你这个面向对象,你这个面向对象其实核心解决的就是统一管理猫里面的属性,刚才我们讲了猫一共有三个属性,颜色、年龄和他的姓名,那么我们就把它封装到我们这个类里面去,这个以前也是么这么干的。
10:03
好,把它写到这里来。定义或者叫声明,定义或者叫声明,声明三个属性,声明三个属性,注意它这也叫属性,也叫属性,那么我们用VR,因为有可能变化名字,使。要给一个初始值啊,这地方注意,在这里要给一个初始值,给初始值。初始值在SC里面,如果不给初始值,这个代码是错的。啊,这那错的再说一遍啊,在SC里面它的属性要给初始值,否则编译错误,Java里面呢,你不写默认会给初始值对吧,所以说我们要给他一个初始值,好好,所以说要给初始值,那么紧接着呢,我们再写一个年龄,年龄呢我给一个int,默认给他写个零对一个零一定要显示的声明一下,或者这样写可以。啊,这样写也可以,就是说用个下划线也行,但是你不能什么都不写,说老师我这个一个都不写也是错的。啊,就是这样,你要吗明确指定一个值,要么给个下划线,那下划线表示什么意思呢?我说一下下划线表示啊给什么呢?给age一个默认的值,那么如果是int,如果是int,默认就是零。
11:17
默认默认就是啊,就是0OK,但是你不能什么都不写哈,就必须哪怕你用给默认值,你要写个下划线啊,OK,那下面呢,我们再讲它还有个颜色color color呢,我们用字符串来表示,给它一个默认值,OK,那这方你也可以这样写,说老师我这样写行不行,可以,那这个地方它也是给什么呢?给这个给这个color一个默认值。Color。开了一个默认值,默认值,那么如果是string,默认值是什么呢?默认值就是空串,默认值就是这个。好,知道这个,知道这个就可以了,好同学们这个呃,这个我们现在就用一个类可以去管理三种不,呃三种属性,那现在我们来开始创建。
12:10
那么快速入门我们来创建一只猫啊,一只猫这个猫呢也非常非常的简单啊,一般来讲我们猫呢,对象都用V,如果这个对象不需要改变,统一用V再说一遍啊,那就写K等于六一个K写完了。后面可以带小括号,也可以不带啊,可以带好,现在呢,我们可以给它附出值,给猫的属性赋值。啊,复制啊,那么同学们注意看,这里有个细节啊,同学们注意听,内蒙等于给他一个名字叫做小白。啊,小白。小白,然后呢,Cat点他的age,我们给他一个年龄,比如说十岁,好,Cat他的color等于什么呢?等于白色。
13:01
白色,好,同学们可以看到,我现在就给值了,那有些同学可能在这已经产生疑惑了,说老师这个地方我有点想不明白,什么明白呢?你这个地方没有指定它的访问修饰符呀,那么你没有给他指定访问修饰符,它是什么一种访问的范围呢?一般的同学可能就会认为他是public的,我告诉大家他默认不是public的,它是private的。那就更矛盾了,说老师你说这个是私有的,那你怎么就能够直接访问呢?好,我要在这简单说一句啊,待会我们还要想讲,注意听这句话,注意听这句话。当我写到这吧。说明啊,后面我还是说明啊,说明第一点,当我们。当当。当我们我们声明了,声明了一个VR name。是准时。
14:00
那么这个class在底层会对应什么呢?它会对应。对应生成这样一个属性,Private。Private的name。那么同时注意听这句话,同时同时会生成会在底层啊。而是在底层对应。在它这个底层,底层就是它对应的那个那个字节码对应的源文件,那么同时会生成两个函数,注意听两个public的函数,注意就说针对这一个属性会生成两个public public一个的方法。哪三个方法呢?一个方法是。Name。这个是类似于这个类似于类似类似我们以前学的那个,呃,就是同学们学Java里面的那个叫做get。
15:02
啊,Get。那么同时呢,它还会生成一个方法叫什么呢,叫内蒙。Name_Dollar EQ。也是public的。也是public的。这个这个方法是干什么的呢?类似于我们以前Java里面写的那个。就是给它赋值的。OK,这个类似于我们以前学的那个C。那言外之意,同学们,我们这样子啊,多说无益,我们直接编译一下,我们看看到底在底层生成了什么,大家一目了然。来,同学们,我们运行一下。运行过后呢,我带同学们去看一下对应的这个CAD到底发生了什么工作,打开我们的反编译器,这个大家一定要多用一用哈,打开我们找到我们的哪个章节呢?CHAPTER06,在这里面有个O,打开我们再对。
16:04
如果你写的是class,那么它只会生成一个类文件,再说一遍,如果你写的是class这种类,那么它只会生成一个这个类文件,而不像我们,而不像我们写一个object,如果你有object,它会生成两个,在这里呢,它就只会生成一个class,就是。Cat啊,这个不会生成两个了,那么我把我把这个地方写到这。这里啊一个class cat在这个字解码对应的这个字解码文件自解码文字解码文件自解码文件只有一个。一个就是什么呢?就是k.class。啊,这里面对应一个类,就是这个这个开,而且它默认是public。默认是public的,好,打开我们这个地方,大家一看就清楚了,来。
17:05
给大家搂一眼,打开op,点开哦,大家一目了然看。其实就他。你写的那个猫,就怕他看三个均为私有。并不是像我们想的是public,那么他凭什么在这个地方,既然是私有的,那你凭什么可以在这里直接去访问他的这个名字和这个年龄呢?原因是在于在底层。他还给它生成了一段方法。大家看这里一个方法是它。Name。这个name呢,就是根据你的这个属性的名字生成的,如果你叫name,它叫name,如果你叫age。它就叫age。那么这个函数是干什么呢?大家一看就知道了,是返回你这个属性的,这个大家应该能看到,好,还有一个呢,就是name_Dollar EQ EQ就是一块,这个函数是干什么呢?给它赋值的,你看如果你这传进来一个变量,它会把这个变量S设置给Z4点内,好,这个我相信同学们应该一看就清楚了,那换言之,同学们,我们这个底层对应的代码其实就是它。
18:20
就是你在这里啊,同学们听我说,听我说,就是在斯刊里面你写了这么一个类,那么就等价于我们Java写的。谁管?这家大家一下就清晰了,那么我再问大家一个问题,我在这开点内,其实它本质在等价于什么呢?它其其实不是真正的注意听,它并不是真正的访问这个属性,而是调用了这个方法,我在这要多说一句啊,这个说完以后我们就OK了。这里我只说一次,这里的k.name其实并不是啊,其实不是直接访问。
19:03
访问这个属性。而是。而是什么呢?而是这个方法是K点它这样写的,它等于是k.name Dollar EQ。EQ。然后把你的这个小白给他了,在底层它是这样掉的啊,在底层是这样掉的,同学们可以看一下是不是这样子呢?来我们再来看老师说的这个对不对,打开我们的这一个代码,它的入口是在哪里呢?是开DEMO。点进去看这里。看清楚了,看清楚这溜了一个K,然后呢,我给小白的时候是k.name下划线。Dollar EQ,小白。给名字是这个我们要取一个值呢,其实用的是它的那个name函数,好,到此为止,大家就应该。应该对这个认识有一些感觉了啊,多少有点感觉啊,我应该应该说把这个讲清楚了,就是以后你千万不要跟别人讲说诶写了个袜词public,然后我们这访问属性你这么一说。
20:09
同学们,那你就。全全错啊全错,其实它是因为你要把这个了解了,你后面才能理解他的那个重写重载机制,否则的话,你是很难理解他的这个。为什么这样?是这样回事的,好,我们来玩一把,我把信息打印出来,Print打印出小猫的信息,格式化一下。小猫信息如下,小猫小猫的信息如下,注意听。好,为了好好讲呢,我这来一个换行开始了啊,首先我来一个Dollar啊,名字是S没问题。好,它的这一个年龄取出来,它的颜色是十寸开写,那就是k.name对,然后K点它的这个age。
21:02
K点它的color。好,同学们,我我问大家一个问题啊,同学们就是当我这样的话,取值这样这个是负值,这个是取值,请同学们思考,嗯,在底层T点内取值的时候,是不是就等价于调用它那一个。方法呀,是不是就等价于掉的,实际上是它的这个方法是不是好,这点一定要清晰啊,同学们一定要清晰,你不然的话说诶说老师这个怎么回来的呢?这个地方其实它等价于到是K,呃,它其实可以理解成就是这个意思点name这个意思,只是呢,呃从这感觉好像是直接访问,其实不是这样子的,好同学们理解这个理解理解清楚啊,那就再加一句话。再加一句话就是,呃,如果是这样的话,哎,把这个写到这吧,好写到这小白,这个我就讲一次,后面我就不再说这么多了啊。
22:02
啊,这个呢,其实等价等价于等价于什么呢?就是K点内这个好了同学们我们运行一下,把这个讲完了,我们来整理一把。好,那我们运行完了,给我们发现小信息完全的正确,小白十岁白色好了好,我花了一点时间把这个呃类于对象一个入门给家讲完了,那下面肯定就是细节了啊同学们,我们把这个简单的反述一下。好,现在呢,我们把刚才讲的类与对象的一个过程进行一个简单板书。那现在呢?我们新建一个小小的章节。插入一个分页符,好,这个叫做面向对象编程,面向对象编程啊,编程基础部分。基础啊,基础部分。基础部分啊,呃,这想起一个小笑话啊,想起一个笑话,什么笑话呢啊,我一想着我就想笑说呃,说有一个人自我介绍,自我介绍人家说我是高级,高级Java程序员,那就是你是什么,我是低级啊,我是低级程序员,这是低一级,说低级实际上是骂人的,对不对?你说你是初级程序员,不要说自己是低级程序员好不好,我是低级程序序员,呃,这个看起来很搞笑的,我们程序员是初级、中级和高级,没有低级程序员好,所以我们这讲的是基础部分,不是低级部分啊,同学们注意好,我们往下继续来把这个整理一下。
23:36
那刚才呢,讲了一个养猫的小问题,引出了。面向对象的一个流程,好,这是这里养猫的问题导致,诶,我们来一个标题二。好,这地方是我分析的一个问题啊。就是我们从这引出了它的呃一个概念。
24:00
好,这个是问题的描述。问题的描述。描述对不对?好的,好把这个问题描述过呢,我说了一下是怎么回事啊,怎么回事,接着呢,我们继续往下看啊,这个就不不过了,好开面向对象的这么三句话,大家有一个印象。啊,大家有印象。这地方应该是刚才写了问题写了错了啊,叫类与对象。类与类与对象应该是这个标题才对。法律有对象。那有点像这个标题啊,养猫的问题,把它拿到下面来。好把它去掉,把它去掉。好,呃,下面呢,我们这说了一个这样的东西,就是SC面向对象的特点。好,加一个。标题三。好,一共总结了三句话,对吧,Java它是呃怎么回事,干是怎么回事。
25:07
然后呢,我们这儿就做了一个快速入门。做了一个快速入门,怎么写的呢?诶这块我就过了啊,这个不截图了,当然我们用快速入门来解决了养猫猫的一个问题,直接就说SC是怎么来完成的,把它放在这个地方,标题三。好,把代码给同学们板书过来。啊,代码不难不难,很简单。来截取一段小视频啊,这个这个这个代码。放这儿来插入一个表格。好,那关于我们面向对象的一个入门级的案例,我们就给大家说到这儿,我们截取一段视频。
我来说两句