2.1.1 类的封装性
在操纵汽车时,不会去考虑汽车内部各个零件如何运作的细节,而只需根据汽车可能的行为使用相应的方法即可,比如只需要知道左打方向盘汽车会向左转,踩刹车车会停等。它的机械如何传动,有哪些部件在其中起了作用,并不需要关心,这就是封装的体现。实际上,面向对象的程序设计实现了对象的封装,使用户不必关心对象的行为是如何实现,只需要关心这些对象能实现什么。
封装(Encapsulation)就是把对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。可以把封装想象为一个将代码和数据包起来的保护膜,这个保护膜定义了对象的行为,并且保护代码和数据不被任何其他代码任意访问和修改。即一个对象中的数据和代码相对于程序的其他部分是不可见的,它能防止那些不希望的交互和非法的访问。封装有两个含义:一是把对象的全部属性和行为结合在一起,形成一个不可分割的独立单位,对象的属性值(除了我们特意留给外部代码访问的外)只能由这个对象的行为来读取和修改;二是尽可能隐蔽对象的内部细节,对外形成一道屏障,与外部的联系只能通过该类特别留出的与外部交互的方法实现。图2-1中的学生类也反映了封装性,一个学生信息封装到了一起。
图2-1 学生类类图
封装的信息隐蔽作用反映了事物的相对独立性,可以只关心它对外所提供的接口,即能做什么,而不注意其内部细节,即怎么提供这些服务。封装机制将对象的使用者与设计者分开,使用者不必知道对象行为实现的细节,只需要用设计者提供的外部接口让对象去做。例如,用陶瓷封装起来的一块集成电路芯片,其内部电路是不可见的,而且使用者也不关心它的内部结构,只关心芯片引脚的个数、引脚的电气参数及引脚提供的功能,利用这些引脚,使用者将各种不同的芯片连接起来,就能组装成具有一定功能的模块。封装的结果实际上隐蔽了复杂性,从而降低了软件开发的难度。
对象是Java封装的基本单元,是Java程序的基本元素。