UML基础与Rose建模实用教程(第三版)
上QQ阅读APP看书,第一时间看更新

1.2.2 封装

封装(Encapsulation)就是把对象的状态和行为绑到一起的机制,把对象作为一个独立的整体,并且尽可能地隐藏对象的内部细节。封装有两个含义:一是把对象的全部状态和行为结合起来,形成一个不可分割的整体,对象的私有属性只能够由对象的行为来修改和读取;二是尽可能隐藏对象的内部细节,与外界的联系只能够通过对象提供的外部接口来实现。

封装的信息屏蔽作用反映了事物的相对独立性,可以只关心它对外所提供的接口,即能够提供什么样的服务,而不用去关注其内部的细节问题(例如如何具体实现的)。比如对于计算机而言,通常关注的是其能够干什么,而不用关注计算机内部的构造和实现各种功能的具体过程。

封装的结果使对象以外的部分不能随意去更改对象的内部属性或状态,如果需要更改对象内部的属性或状态,需要通过公有的访问控制器来进行。比如,当你初次碰到一个人时,你想知道对方的名字,直接把手伸进他的口袋拿名片是不允许的,但是你可以使用被社会所接受的方式,礼貌地询问对方来获取信息。通过公有的访问控制器来限制直接存取对象的私有属性,这样做有以下的好处:

  • 避免对封装数据的未授权访问。
  • 帮助保护数据的完整性。
  • 当类的私有方法必须修改时,这种修改在整个应用程序内的影响是有限的。

但是,在实际项目中如果一味地强调封装,对象的任何属性都不允许外部直接读取,反而会增加许多无意义的操作,给编程增加了负担。为避免这一点,在程序设计语言的具体使用过程中,应该根据需要和具体情况来决定对象属性的可见性。