【翻译】Java面向对象编程基本概念——封装
原文地址:Java Encapsulation and its Relation With Abstraction
大多数开发人员对封装与抽象之间的异同都存在一些疑惑。网络上也有很多相关的博文,但大多数都使我们更加迷茫。今天,就让我们来拨开迷雾见云天。
一、封装简述
将数据和方法打包至一个类型中,并隐藏相关的实现细节通常称之为封装。封装的结果是一个类型既拥有了属性也拥有了行为。本质看,封装包括信息隐藏和实现隐藏。
二、洞察概念
“无论什么变化,将它封装起来”,这已经被引用成为一项著名的设计原则。软件的变化是无处不在的,运行时数据可能发生变化、未来的发布版本中实现可能发生变化。因此,封装既应用于封装数据也应该封装实现。
访问控制或通过隐藏实现细节来为数据或类型设置边界有两个原因:1) 限定使用者什么可用,什么不可用;2) 将实现细节与接口隔离。
如果我们确定使用者只需要给公共的接口发送信息,其他的什么也不用做,那么我们就可以任意修改那些非公有的代码,而不影响使用者的代码。封装可以帮助我们实现上述目标。
三、与抽象的关系
抽象本质是想法,用来帮助我们制定原则。封装是机制,通过机制实现抽象的目的。
从面向对象的分析与设计(OOAD)的角度来看:
+ 抽象更多的是关于一个类可以做什么。【想法】
+ 封装更多的是如何实现一个功能。【实现】