00:00
大家好,我是海波老师,咱们继续来讲Java面向对象的相关语法,我们这里呢,拷贝把这个零三呢改成我们的025。然后点击OK,咱先把里面的东西啊,咱们全都去掉啊,咱们先不要了,在咱们CHAPTER04这个章节当中啊,主要给大家讲解了Java面向对象的基本语法和分析方式,那么在实际开发当中啊,咱们解决问题的时候都是先提炼具体的事物,然后呢,相同的特征呢和行为的事物呢,咱们再进一步的提炼出接口啊类啊,然后呢,封装特征和行为,对吧?那最后呢,我们建立对象,那么调用对象的属性或方法来实现具体的功能,解决实的问题。所以从上面的描述上啊,你可以看出Java中我们涉及的类啊,主要分为两大类,那么我们的第一大类呢,它主要用于编写逻辑。主要用于编写,编写逻辑,所以在设计的时候啊,就需要考虑什么副类啊,接口啊,抽象类等等,对不对?把一些我们行为给它定义好,把逻辑给它写好就可以了。那么还有一类啊,它主要用于建立解决问题时的数据模型,所以我们的第二个它主要用于建立数据模型,那么这里的数据模型啊,就是所谓的数据特征的抽象,也就是我们的类了。那么副类、接口、抽象类这些概念呢,咱们之前都已经给大家讲解过了,所以我们这里呢就不再重复了。接下来我们主要说一下数据模型,前面提到了所谓的数据模型呢,简单的理解就是数据特征的抽象,这里的抽象其实就是将特征提取出来,使用特殊的结构来保存,那么这里的结构啊,就是咱们前面所学的那个class类,但是大家需要注意啊,我们这里说的主要是用于存储数据的模型,所以一般是没有具体行为的,那比如啊,我现在想做一个功能,什么功能呢,我用用。
01:44
户的账号和密码来登录的这么个功能,那么我相信啊,大家很容易就会想到,我既然要登录对不对,那么我们就需要创建一个用户的类userr吧,所以呢,我这里就创建一下叫class,我们就叫U就可以了,好,而且呢,我们这里为了能使用登录的功能,用户还应该提供咱们对应的账号和密码,对不对?所以呢,我们这里呢,也可以很自然的想到,在我们的U的类里面,我们可以说明两个属性,一个呢是我们的account,一个是我们的password,对不对,所以我们写上它叫public,叫string,我们叫account账号嘛,还有一个public,咱们叫string,叫password,咱们叫密码嘛,对不对?好了,那么接下来啊,我就开始准备登录了。
02:26
所以呢,我们在U的里面,我们写上一个登录的功能,我们写上叫public,然后写上一个布尔类型的,我们叫做lock in,好了,写完了以后呢,我就直接给他写上了啊,给个处就行了,我们这里啊逻辑就不写了,咱们只是返回一个true表示成功就可以了。好了,同学们,大家觉得我这么设计有没有什么问题?我说过了,我就想实现一个用户账号密码登录的功能,我这么去写这么一个类行不行,可不可以大家想想,我相信啊,大家能明白,语法上肯定没有问题,对不对?你想想语法没问题吧,属性这是方法,这是我们的类,这是我的访问权限,这是我的返回值,没有任何问题吧?那么你们觉得从逻辑上,从整体的设计上有没有问题呢?
03:08
我告诉大家是有问题的,诶感觉整个分析的过程还是比较顺的呀,他怎么会有问题呢,对吧,我有用户,然后呢,我有登录,我的登录需要账号密码,那我这么写没问题呀,诶那问题出现在哪呢?我来告诉大家咱们的问题啊在两个方面,一个呢是属性,一个就是方法。先说咱们的这个方法,咱们这个方法呀,是用户的登录功能,我在用户的类里面声明一个登录的方法,你说这怎么会有问题呢?其实大家想一个问题,如果我在一个类当中,我声明一个方法是什么意思呢?是不是这个方法就重属于这个类的对象,也就是说是这个对象的登录功能呢?来同学们看一下,我这里呢,创建一个U的对象,好创建完成以后,接下来呢,给这个对象点我们的账号呢,给它设定为admin,然后呢,U点我们的password,给它设定为我们的admin可以了,写完了以后,账号密码都有了,咱们开始登录了,所以U的点login,诶这么写就可以了,那么你这么写完以后,是不是就意味着我们U的对象它执行了登录的方法,没错吧,这很正常啊,咱们之前就这么学的呀。
04:14
但是这很正常的事情,本身并不正常,为什么?因为登录功能不是U的呀,同学们。这个大家能不能明白,想想你的名字,你的账号,因为你有账号,因为你有密码,所以我们的账号和密码,它就纯属于这个U的类,对不对,你能飞,所以我会在我的类当中声明一个飞的方法,没错吧,你能登录吗?你不能啊,为什么?因为这个登录功能它不是你的呀,你只是使用登录功能,你并没有这个功能,这就好比生活中我们登录一些网站一样,你输入账号密码,点击按钮登录,是你在登录吗?不是,是网站的后台帮你执行登录操作,你只是提供了两个数据而已,对吗?所以那个登录不是你的功能,而是我们网站的功能,对不对?咱们网站服务器有一个登录功能,你来用它的功能,同学们这个能不能明白?
05:08
谁提供了这个功能,谁来使用这个功能,还记得吗?我们讲过这个事情啊,所以是网站提供了登录功能,对不对,现在能不能明白了,所以咱们这里啊,把这个log in的这个方法呢,放在我们U类里面,这个本身是不合适的,所以怎么办?A把它提出来,提出来以后我们放在我们的这个地方,对吧?我们假设当前是一个服务器,它来提供了一个登录功能。那么你要提供登录功能的话,那是不是我得知道谁来登录了,所以说我这边传个参数叫什么,叫做URAUR就这意思,你这么写完了以后,你谁想登录传过来就完事了,对吧?比方说我这个user他想登录好,他想登录他就调用我们服务器的功能叫log in,把它的参数传过去,你这么写才是对的,同学们,这个大家能不能明白,我们这里没有加那个静态啊,这边是用不了的,所以加个静态就可以了。同学们,登录方法我得这么来用,那我这里呢,可以简单写个逻辑,比方说if,如果你当前的点我们叫做account,然后呢,我们说嗯,点equals,如果它等于admin,并且呢,来我们的U的点password,如果点equals,我们的admin,我认为啊,你两个都是admin,你能登录成功,所以呢,我直接return啊,咱们的true好了,然后呢,我们else,我们叫return force,不让你登录,诶这不就可以了吗?所以啊,咱们的登录基本功能啊,就是这个样子的,行了,咱们运行一下,咱们试一试,来我们现在打印一下,那不用说了,我现在两个都是admin嘛,所以我现在运行一下就可以了。
06:41
运行以后大家会发现没有任何的问题,对不对,诶你都是admi,当然登录成功了,不就是这个道理吗?所以啊,咱们的方法这么用才是对的啊,诶好了,咱们把这个方法的问题啊,咱们说清楚了,那接下来呢,咱们就说一下咱们的属性问题。属性什么问题呢?感觉属性也没问题,对不对,咱们之前不都是这么写的吗?诶没错,但是你现在要考虑一个场景的问题了,如果我现在有一个属性,我直接通过对象点这个属性就去访问,什么意思?咱们前面讲过了一个权限的概念,你还记得吗?
07:12
你能访问是不是意味着你有权限啊,你没有权限,你是不是访问不了啊,对不对?但是啊,生活中你说你有什么权利能够看到我的密码呢?对不对?咱们这么写,语法上是没有任何问题的,但实际上是不应该这么做的,对吗?为什么?因为其他人是没有权利知道你的密码的,甚至于你都没有权利知道我的名字,对吗?生活中一个你不认识的人上来就叫对了你的名字,你会不会感觉很危险呢?对不对?哎,老师,那照这个说法的话,那是不是应该将属性设置为私有的,你这样的话,别人不就用不了了吗?我们这里呢,就把这个public改成我们的私有的,那这样的话,我的账号,我的这个密码呢,别人就不知道了,只有我自己知道,对不对?哎,这样的话就可以了。但你这么写完了以后,你上面是不是就报错了,哎,老师,那怎么办呀,这个时候就有问题了,你在生活中别人不知道你密码,但是想认识你怎么办,别人就会上来问问你说哎,你叫什么名字啊,你会怎么办,你是不是就把你的名字告别了,你说我是谁谁对不对,但是你说你不告诉别人,那咱们另说了对不对?所以就意味着我们不能直接让他访问这个属性,但是我们可以通过一些行为来获取我们的属性值,这是可以的,我问你名字,你是不是得告诉我一声,那所以呢,我就在优里面写上一个方法叫PA,写上它,我们叫get account什么意思啊,同学们就是获取账号呗,所以呢,我们account,我们来写上return,你不能直接访问,但是你问我,我能告诉你啊,这个没问题,同样道理,你问我密码,我信任你啊,我就把密码告诉你呗,所以呢,我们拷贝,拷贝之后把这个改成我们的叫password,你这样写的话就可以了,同学们如果这么写的话,那么我们的get呢,就应该放到这里了,叫get account,然后这个地方我们写成它叫。
08:53
At password,好了,你这么写不就行了吗?好了,你写完了以后还不对,哪不对呢,你的这个地方的负值怎么做,你是私有的呀,诶你既然能取得值,也可以别人告诉你密码对不对?所以我们这里呢,再给大家准备两个方法,第一个我们叫做public word叫set方法,叫account,然后呢,我们写上它,然后呢,把这写上,我们传一个直接来叫做string,叫account,好,然后this.account这个表述的就是我当前的属性,它等于我的参数值,你这么写就行了,同样道理啊,这个如果大家能明白的话,我们下面public,咱们叫VO,咱们叫site password,然后我们写上它,写完了以后把这个写上,这个地方叫string,叫password,然后this.password它等于password,诶,你这么写不就行了吗?你写完了以后,我们来拷贝一下,拷贝以后把这个放过来,然后呢,把这个去掉,哎给它去掉,去掉以后这样的话,我的账号就有了通道里我的这个爬。
09:53
Word也就有了password,诶可以了,把这个呢给他拿过来,好同学们,我现在呢就放到这里就可以了啊可以了,嗯。
10:03
同学们,我现在再运行一下,你会发现跟刚才的结果是完全相同的,但是这种设计就会更加合理一些,能不能明白老师说的意思,首先我们的登录不应该放在U里面,是因为我们的用户呢是使用登录功能,它本身并没有这样的一个功能,它使用的是别人的登录。还有它的属性是不应该让别人直接访问的,为什么呢?因为有些信息属于私密信息,我不应该让别人访问,你想访问,你需要通过行为来告诉别人,或者让别人问你对不对,如果别人想知道你的这些私密的信息的话,你得告诉他吧,诶,就得有专门的方法,就是这个道理,我们把登录功能呢,就简单的重新做了改善,那么其实我们主要想给大家讲的是,我们这个叫建立数据模型,我们下面的这个叫U类,其实它就是我们的数据模型,为什么呢?因为它里面没有复杂的逻辑,而且里面基本上全都是我们数据的特征,所以啊,它只是简单的封装的这些特征而已,所以我们把这个称之为叫并类,或者叫B对象,这里咱们解释一下,当然这个数据模型呢,我们就写上一个B啊,那么这个类呢,我们就叫B类,这个对象呢,我们就叫B对象,因为这样的类啊,它简单,而且呢,在实际的开发当中啊,这种方式它用的多呀。
11:16
最后就演变成了一套设计这种类的规范,我们称之为叫并规范,这个规范的基本要求是什么呢?很简单,第一个它要求这个类必须有无餐的公共的构造方法,这里咱们写上叫bin啊,类类的啊,设计规范咱们简称叫B规范,我们把前面呢给它变成我们的todo啊,让颜色加深一些,我们给大家说第一个我们的类要求它必须还有午餐。B,还有无参公共的构造方法,这是第一个。第二个我们的属性必须私有化。然后提供咱们叫公共的叫set和那个get方法,这个set方法和get方法什么意思呢?就是老师给大家写的这种我们的这个属性啊,通过一个set方法给他赋值,那么他以set开头,哎,就这意思,这就是我们所谓的set方法,还有一个呢,我们称之为叫get方法,这个get方法呢,就是获取它的值,我们也是以它开头,这个咱们简称为就叫set get方法就是这个意思啊,只要我们把一个类设计成这个样子,我们就把它称之为叫B类,我们也称之为叫并对象。
12:29
好了,并规范,咱们就给大家介绍到这里。
我来说两句