7.1.2封装
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7.1.2封装相关的知识,希望对你有一定的参考价值。
封装是指向程序中的其他部分隐藏对象的具体实现细节的原则。听起来有些像多态,也是使用对象而不知道其内部细节,两者概念有些类似,因为他们都是抽象的原则,他们都会帮助处理程序组件而不用过多关心多余细节,就像函数做的一样。
但是封装并不等同于多态。多态可以让用户对于不知道是什么类(对象类型)的对象进行方法调用,而封装是可以不用关心对象是如何构建的而直接使用。听起来还是有些相似?让我们用多态而不用封装写个例子,假设有个叫做OpenObject的类(本章后面会学会如何创建类):>>> o = OpenObject() #This is how we create objects...
>>> 0.setName(‘Sir Lancelot‘)
>>>o.getName()
‘Sir Lancelot‘
创建了一个对象(通过像调用函数一样调用类)后,将变量o绑定到该对象上。可以使用setName和getName方法(假设已经由OpenObject类提供)。一切看起来都很完美。但是假设o将他的名字存储在全局变量globalName中:
>>>globalName = ‘Sir Gumby‘
>>>o.getName()
‘Sir Gumby‘
如果创建了多个OpenObject实例的话就会出现问题,因为变量相同,所以可能会混淆:
>>>01 = OpenObject()
>>>o2 = OpenObject()
>>>o1.SetName(‘Robin Hood‘)
>>>o2.getName()
‘Robin Hood‘
可以看到,设定一个名字之后,其他的名字也就自动设定了。这可不是想要的结果。
基本上,需要将对象进行抽象,调用方法的时候不用关心其他的东西,比如它是否干扰了全局变量。所以能将名字“封装”在对象内吗?没问题。可以将其作为特性(attribute)存储。
正如方法一样,特性是将作为变量构成对象的一部分,事实上方法可以更像是绑定在函数上的属性。
如果不用全局变量而是用特性重写类,并且重命名CloseObject,他会像下面这样工作:
>>>c = CloseObject()
>>>c.setName(‘Sir Lancelot‘)
>>>c.getName()
‘Sir Lancelot‘
目前为止还不错。但是值可能还是存储在全局变量中的。那么再创建另一个对象:
>>>r = CloseObject()
>>>r.setName(‘Sir Robin‘)
r.getName()
‘Sir Robin‘
可以看到新的对象的名称已经正确设置。这可能是我们期望的。但是第一个对象怎么样了呢?
>>>c.getName()
‘Sir Lancelot‘
名字还在!这是因为对象有了他自己的状态(state)。对象的状态由他的特性(比如名称)来描述。对象的方法还可以改变他的特性。所以就像是将一大堆函数(方法)捆在一起,并且给予它们访问变量特性的(特性)权力,他们可以在函数调用之间保持保存的值。
以上是关于7.1.2封装的主要内容,如果未能解决你的问题,请参考以下文章
vue axios接口封装Promise封装简单的axios方法封装vue接口方法封装vue postgetpatchput方法封装