欢迎光临里昂的博客

兴趣、执着、严谨
posts - 6, comments - 0, trackbacks - 0, articles - 0
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

封装

Posted on 2019-08-23 16:56 a-leon 阅读(...) 评论(...) 编辑 收藏

在以面向过程的思维来解决问题时,我们需要分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现。

如在这个场景中:“汤姆和玛丽把一只大象往一个冰箱里面装”。需要按照以下步骤来做:

1、汤姆或玛丽打开冰箱门。

2、汤姆和玛丽把大象装进冰箱里。

3、汤姆或玛丽关闭冰箱门。 

可以看到,大象是被汤姆和玛丽装进冰箱里的。那能不能用其他方式把大象装进冰箱里呢?或者说能不能就让冰箱自己装就行?而对于汤姆和玛丽来说,他们根本不用关心是谁负责去装,他们只管提供要装的东西即可。

此时可以回顾下类和对象的一些概念,类的成员中有属性和方法。那么我们可以将上面装大象的具体步骤交给某个对象去处理,所以现在定义一个冰箱的类,其内部成员有:品牌名(属性)、开门(方法)、关门(方法)、装东西(方法)。

现在把它的4个方法进行实现:

开门(私有):方法中的逻辑只管负责开门

关门(私有):方法中的逻辑只管负责关门

装东西(公共):1、调用自己的开门方法,2、装东西具体操作,3、调用自己的关门方法

 

从上面的解决方案中,将原本装大象的具体步骤交给了冰箱类自己去处理。那么对于汤姆或玛丽对象来说,他们只需要有一个冰箱的对象实例即可,然后把要装的东西交给冰箱对象实例的公共方法【装东西】就行,且自己完全不必关心冰箱是怎么开门、装东西、关门的,只关心冰箱的公共方法【装东西】反回给自己的结果是什么。(如果将这种【面向对象】的思想换种思维场景的话,就相当于你去饭店点了一份蛋炒饭,做一份蛋炒饭是厨师的职责,而你只管吃就行。但是在【面向过程中】你要吃一份蛋炒饭得自己准备材料,然后自己亲自下厨)

 

所以可以将【封装】理解为:将具有相同特征的数据和方法组合包装到单个单元中。

而这个单元就是“类”,所以一个类是封装后的产物。属性和方法属于类的成员,它们是构成一个对象的主要部分,如果没有了这两样东西,那么对象也没什么存在意义了。

在冰箱类中有自己的私有和公共方法,隐藏了应该隐藏的内容,并使可见的内容可见,这叫成员的访问权限。

 

由此可见,封装目的是:

1、 减少程序间的耦合。

2、 类内部的结构可以自由修改。

3、可以对成员变量进行更精确的控制。

4、隐藏信息,实现细节。

 

这就是【面向对象】思想中的特征之一:封装