1.2.2 封装性
封装,顾名思义,就是将某事物包装起来,使外界不了解它的详细内情。封装性使得面向对象程序设计具有面向过程程序设计无法比拟的安全性和可靠性。
封装在生活中无处不在。例如,我们日常使用的智能手机,作为用户,我们无需知道手机内部的构造和主板上芯片的功能,手机壳完美地封装了手机,也提供给用户合理的操作接口来使用手机:通过触摸屏完成各项用户需求;摄像头捕获各种影像;充电接口完成动力输入;调音开关设置适宜的音量;话筒输入语音信息,等等。这些接口是手机对象与用户交互的媒介,用户只要知道这些接口的功能并且会使用就可以了,至于手机里面有哪些元器件,用户的操作会导致内部的元器件状态如何改变,这些元器件是如何参与工作等细节对用户是隐藏的,手机壳将这些都封装在里面。这样的封装可以保证智能手机方便使用、元器件受到保护,且对部分核心制造技术还可以保密。
在面向对象的程序设计中,封装主要是针对对象而言的,对象就是一个数据和操作的封装体,但也不是全封闭的,为了更好地应用面向对象技术,对象中的成员还设计了访问属性的限定:private(私有属性)、protected(保护属性)、public(公有属性)。对象的private或protected成员被封装和信息隐藏,而对象的public属性成员呈现为对外接口,但具体实现细节(即成员函数的实现代码)都对外隐藏。
由于封装的单位是对象,而对象总是属于某一个类。因此,在封装之前,需要仔细做好数据抽象和功能抽象的工作,明确一个类中有哪些数据成员和成员函数,哪些成员需要隐藏信息,哪些成员应该对外公开,以便在封装时决定提供哪些对外接口。
封装机制使对象将非public成员以及接口函数实现的内部细节隐藏起来,并能管理自己的内部状态。外部只能从对象表示的具体概念、对象提供的服务和对象提供的外部接口来认识对象,通过向对象发送消息来激活对象的自身动作,实现一定的功能。