00:00
接下来我们要学习的这张内容是scla这门语言除了函数式编程之外,另外一大特性,那就是所谓的面向对象啊。我们之前提到过盖拉这门语言是一门多范式的编程语言,它结合了函数式编程和面向对向编程,那他的面向对象的思想其实是源自抓瓦的。它的概念,很多面向对象的概念跟Java都是一脉相承,基本上是一致的,比如说类的概念,对象的概念,那有一些语法细节可能跟Java里边略有不同,Skyla呢,补充了很多新的功能,所以接下来我们就给大家一一展开介绍一下skyla当中的面向对象,那首先呢,我们要给大家介绍的是scla当中的包我我们都说scla是一门完全面对对象的语言,大家知道面对对象的语言的话,其实主要就是要把我们想表达的所有的具体事物或者数据。
01:00
表示成一个对象,然后使用的过程当中,我们在这个代码逻辑处理的过程当中呢,其实就是一个对象的方法调用,那所有的类和对象我们到底应该怎么样去定义,怎么样去管理呢?一般情况我们都要把它分门别类的放到不同的包下边啊,所以这是包是我们进行这个面对对象学习的一个基础,我们先来了解一下,那这一部分呢,整体来讲比较简单,就是跟Java其实是差不多的,首先包的定义基本语法就是package加上一个包名。非常简单,跟Java一样,那么skyla里边包的三大作用跟Java也是一样的,首先就是区分相同名字的类啊,能够把它们区分开,类的名字可以一样,但是在不同的功能,功能模块里边的相同名字的类怎么样去区分呢?哎,放在不同的包下面就完了嘛。另外还有就是说,如果类很多的时候,我们可以把它分门别类的按照模块划分开,这样的话就可以很好更好的管理类了。还有一个就是可以控制类的访问范围啊,我们知道有有专门的一个访问权限,就是包访问权限啊,所以这其实在后面我们讲讲到这个类的访问权限的时候,我们还会提到这一部分内容。然后接下来呢,我们说一下包的命名规则,这里边命名规则基本上跟前面我们讲到的。
02:27
标志符的命名是差不多的啊,这里边主要就是。类呃,包的命名只能包含数字,字母下划线啊,还有小圆点,这里大家要注意啊,其实包的名称呢,一般我们是不包含小圆点的,所谓的这个小圆点其实是不同层级之间包的一个分隔符,这里大家要注意的是可以包含数字,但是呢不能用数字开头,另外注意不要使用关键字啊,这个都是比较常规的一些要求啊,比如说这里举了两个错误的例子。
03:01
大家看到为什么出错呢?哎,那中间不能有class,这是关键字,那另外就是不能数字开头,这都是典型的错误,然后另外还有一个就是包的命名规范,这一般是我们在项目实践的过程当中,实际项目里边包一般怎么样去定义呢?啊,一般我们的规则是。Com点后面公司名称,然后再加上项目名称,再加上业务模块名称,这里的点就是包层级的一个分割啊,那一般情况我们这个名称里边每一个层级的包啊,包名都只是小写字母,这是一般的一个规范,比如说。com点艾特硅谷,然后后面是项目的名称,然后加上模块名称啊,当然在我们本身实现的这一个代码里边啊,这个项目并没有按照完整的这个反写域名的方式去书写,那大家可以下来之后自己做一个尝试。然后呢,接下来我们重点是说一说跟Java的不同,Tla里边有两种包的管理风格,一种方式呢,就是跟Java里边就完全一样了,它的使用呢,就是每个原文件定义一个包,然后这个包名呢,就直接写在我们整个这个原文件的最上方,大家看到idea里边,我们直接在下边去盯建一个一个类或者一个对象的时候,哎,它自己就给我们把这个就补出来了啊,跟Java的实现是一致的啊,这个比较好理解,需要注意的是标明和原文件的路径呢,这个是不要求必须一致的啊,也就是说只要我这儿声明出来了,至于我这个文件你放在哪个目录下面,这个其实没关系。
04:42
只要有这句话,我就知道当前类或者对象它属于的是这个包啊,所以这就相当于包代表的是一个逻辑上的层级关系,一个包含的关系,而具体的那个文件位置,那相当于是物理上的一个从属关系了啊啊,那另外还有就是用R来进行分割表示层级关系,大家都非常熟悉了,就是com.at硅谷点scalela。我们现在关键要说的是跟Java不同的另外一种风格啊,这种风格比较有趣,他用的是什么呢?是花括号,然后进行嵌套来表示层级关系,比如说上面这个,com.at,硅谷点scla啊,如果用嵌套的风格的话,那就是package com,然后画括号,里边呢,又来一个package at硅谷,然后再来画括号。
05:32
Package scla,嗯,那就是之前比方说在这个包下边我们要定义的类,定义的对象,现在要定义就放在哪里呢?就全写在最内层的这个画括号里边去定义,那大家会发现这不是麻烦了很多吗?嗯,哪哪有之前我们这个直接写成点儿,就最上方一行写出来就完事了吧,这个看起来好像呃,行数也更多,而且花括号更多,这个容易搞乱。那它到底有什么好处呢?它好处就在于我们现在对于包和这个。
06:04
里边对象类的声明会更加的灵活,因为之前我们这个要求是每个原文件只能从属于一个包,它写在最上面吧,你不能它同时属于多个package,而现在呢,用了这个层级关系之后,那对应的里边的类和对象我们可以直接在这个花括号里边写,所以呢,一个文件里面就没有没有限制了,我可以直接在下边去新建其他的一些package,并列起来完全没有问题。然后另外就是说子包里边的类,比方说我们下边内层的这些包啊,里边如果定义了类和对象,它可以直接去访问副包,也就是外层包里边定义出来的东西,而不需要去再做那个英port的导包的操作。这就更加灵活更加方便了,对吧?啊,那接下来我们还是在代码里边给大家简单的测试一下,看一看这到底是怎么回事啊,用一下大家就明白了。首先我们还是在skyla下边新建一个package,我们现在没有用反写域名的那种方式去表示,所以就直接给一个章节名称就可以了,206,然后接下来我们还是新建一个GALA的object。
07:17
S的零一,哦,这里大家其实会发现啊,我其实没有必要直接去创建一个object,因为这里如果我们先看一下啊,如果把TEST01啊,我们叫package把它创建出来的话,里边默认其实它就从属于的是属于的包,就是当前的这个package chapter06,这个定义的风格就是Java的那种风格,哎,那所以现在我们是想测试那种嵌套风格嘛,而且我们现在的这个object test01也根本没必要直接就在外面定义对吧,那肯定是在我们已经嵌套很多层之后才会去定义这样一个东西啊,那所以现在我们根本就不是要。一个object,我们只是把这个文件定义出来就完事了,所以接下来我们其实就是用嵌套风格。
08:09
一包,那就是前面我们所说的外层可以直接。com,然后里边可以有at硅谷,这里边我们可以给一个。零六啊,当然这个我们直接给一个skyla也是可以的啊,然后做一个测试就可以了。非常简单,直接这么写出来就完事儿了,然后呢,呃,我们就可以在不同的层级的这个包里边去定义各种各样的它对应的这个类和对象了,大家比较熟悉的,现在比较熟悉的应该是单例对象,所以比方说我们可以在。com下边,我们在。外层包中定义N例对象,因为这是在外层包里面啊,我们就直接object一个,这个叫alter吧,知道这单立对象,一般我们定义的时候都是要这个大写对吧,首字母是大写出来的,那呃,这定义了一个aler,那么在skyla内部呢,我们可以定义一个内层口里面的对象。
09:18
内层包中定义N例对象in,这个就叫做,所以大家看这样去单独的去定义完全没有问题,当然了给大家看到好像现在它这个是报错了啊,我们可以看一下这个当前idea里边报错的这个状态到底是什么样,其实大家会发现就是这一部分不影响我们其他内容的这个书写啊,我们可以先把它这个放在这儿,它这个主要就是当前的这个层级关系,跟我们外边这个CHAPTER06的这个包,这个层级关系好像不对应,对吧,按照Java的那种风格的话,好像就有问题了,哎,这是艾idea对于scla还是这种风格支持不够好导致的,所以我们不需要考虑这个问题啊,那现在我们主要是测试一下看看,诶它到底有什么好处呢?就是我们说的啊,当前它其实在这个内层包里边的对象啊,是可以直接访问外层包里边的东西的,哎,所以。
10:19
在这里啊,内存包如果要直接访问这个al是可以直接访问的,那比方说我们在这个al里边定义它,定义一个属性吧,定义一个变量。我们还可以更改它的值,比方说我给一个va类型的啊,这个就叫out吧,词句隐身叫out,大家可以看到我这里可以直接去print line这个al.al访问到打印出来,那另外呢,我还可以直接在in里面去把它的值做一个更改啊,比方说我把它叫做al,再来再去做一个打印aler.al在我们可以。
11:02
可以做一个执行啊,这里边我们注意啊,现在是把这些代码都放在了object里边,这个其实是不对的啊,因为大家知道这是单立对象,我们在外边应该定义的是它的一些属性,另外我们要定义的是方法对吧?啊,这里边你直接放在这个外层的话,这相当于是,呃,后面我们会提到,就是相当于是它的这个构造的过程当中就要直接执行了,类似于这个静态的一些代码调用了,我们这里边可以把它放在内方法里边,然后去执行,诶大家看这不就是我们说的这个有一个位方法的话,那就有一个这个绿色的三角符号可以去做执行吗?外部调用的时候就是单立对象的位方法。这就是入口运行一下。然后大家会看到,当前我们输出的就是先是alter al,后是alter,它可以访问到,还可以更改。那自然我们就想到了在外边的这一个aler,能不能访问内层的这个对象呢?内层里面的inner呢,我们看一下啊,在外边我们也可以一个main方法啊,有了main方法之后看它就也是可以执行的了,然后接下来我们看,如果要直接访问这个英格,诶大家看可以访问是注意它是不是要包啊。
12:22
啊,如说不导包也就有问题了,那就是在外层我是不能直接访问到内层的内核对象啊,需要把这个包导进来,所以我可以在这里啊直接访问到啊,当然这里边我也可以做一个操作,就是说我可以直接去。比方说在inner里边定义一个它的对象就叫做in,它的属性啊,这一个string类型叫做in,那么我们这里边可以直接把in打印出来,这也是完全没有问题的。哎,大家看就是这个样子对吧?啊,这就是我们对于。
13:04
嵌套风格定义包的时候啊,呃,这个里边访问当前的这个类和对象更加灵活的这种方式,当然还有另外一个特点,就是我们可以在同一个源文件里边定义多个包,对吧?比方说我们外边这定义了com.I硅谷点scalela,然后比方说还在这个文件里边,我直接另外可以定义,哎,同意。文件中定义多个包,当然是不同层级的包啊,我们当前就是完全并列的,方说我定义package AAA,然后package BB,这样是完全可以的,比方说接下来在这个呃,Package bbb里边,我现在定义一个object,然后TEST01配置里边,比方说我定义这个A方法,我想要去访问当前这个里边的这个内容,哎,那怎么样去访问呢?那这个print line。
14:07
Inner,哎,这个大家就发现了,那没什么好好说的,也是要导包对不对,哎,他直接在这个当前单利对象的上边,在当前这个包下边把in的导入进来,然后这里边我们可以把这个in点做一个打印,所以整体来讲的话,这个包的使用啊,就是只是把大大家比较熟悉的这种上边直接定义一句包声明当前这个文件里边所有内容都放在这个包下边,把这种风格改成了花括号嵌套的风格。这种方式会更加的灵活,当然一般我们在使用的过程当中,如果不是特别必要的话,那我们还是用Java这个风格也就够了啊。这是关于包的声明。
我来说两句