java面对对象入门(6)-封装与抽象你搞清楚了吗?

最后更新 : 2020.02.27  

你们中的大多数人都同意封装和抽象在一起会带来很多混乱。大多数博客只会进一步增加混乱。让我们解决这个难题。
在上一篇文章“ 理解java中的抽象 ”之后,我开始撰写这篇文章。我的目标是了解Java中的封装及其与抽象的关系。一开始,我就开始陷入前所未有的混乱之中。在浏览了多个小时并阅读了一些写得很好以及令人困惑的博客条目之后,我能够做出一些清晰的理解。下面跟随我的足迹。

1.简单的封装

将类中的数据和方法与实现隐藏(通过访问控制)结合起来通常称为封装。结果是具有特征和行为的数据类型。封装本质上既有信息隐藏又有实现隐藏。

2.详细封装

我在某个地方读到: “无论发生什么变化,都要封装它”。它被引用为著名的设计原则。对于任何类中的这一问题,在运行时数据中可能发生变化,而在将来的版本中实现的变化也可能发生。因此,封装适用于两者,即数据和实施。
访问控制或实现隐藏将边界置于数据类型或类中,这有两个重要原因。首先是确定客户端程序员可以使用和不能使用的内容。这直接导致第二个原因,那就是将接口与实现分开。
如果您确定客户端程序员除了将消息发送到公共接口之外什么也不能做,那么您可以自由更改不公开的任何内容(例如,程序包访问,受保护或私有),而不会破坏客户端代码。封装可以帮助您实现这一保证。

3.封装与抽象

如果您浏览了我的上一篇文章,您将看到抽象本质上是一个观点,这有助于设置准则。封装是我们实现所需抽象的机制。
简而言之,从OOAD的角度来看:

  • 抽象更多的是“ 什么 ”一类能做到。[ 想法 ]
  • 封装更多地是关于“ 如何 ”实现该功能的。[ 实施 ]

我在很多博客上都看到了与此理论相矛盾的地方。因此,如果您也不同意这一点,请忍受我。另外,我将要求您对与主题相关的想法发表评论。我会很乐意尝试联系或否定。
展望未来,我将以我们众所周知的HashMap类为例。此类负责存储键值对,基于键进行搜索并执行更多操作。从外部,客户端代码仅知道方法名称及其行为。它调用了这些方法并快乐地生活着。这实际上是抽象准则。抽象表示,客户端代码应调用添加键值对的方法,基于键检索值的方法等。应该怎么做?不是抽象业务。
当您开始编写实际代码时,封装就到了。您编写HashMap.Entry类并创建类型的变量Entry[]。然后,您将所有此类内容声明为私有,并仅允许公众访问put()get()方法等。这实际上是封装。实现所需的抽象
我希望您对Java封装有更多的了解,以及它与抽象区别
学习愉快!

更多精彩请关注公众号【lovepythoncn】

- END -

128
0