是的 !!!!如果我说封装是一种高级的特定范围抽象,
你们中有多少人阅读/赞成我的回答。让我们深入了解我为什么这么说。
在我提出索赔之前,我需要澄清两件事。
一个是数据隐藏,另一个是抽象
数据隐藏
大多数时候,我们不会直接访问我们的内部数据。我们的内部数据不应该直接出去,因为外部人员无法直接访问我们的内部数据。这一切都与安全有关,因为我们需要保护特定对象的内部状态。
抽象
为简单起见,隐藏内部实现称为抽象。在抽象中,我们只关注必要的事情。基本上,我们抽象地谈论“做什么”而不是“如何做”。安全性也可以通过抽象来实现,因为我们不会强调“我们是如何实现的”。由于我们可以更改实现,因此可维护性将会提高,但不会影响我们的最终用户。
我说过,“封装是一种高级的特定范围抽象”。为什么?因为我们可以将封装视为数据隐藏+抽象
封装 = 数据隐藏 + 抽象
在封装中,我们需要将数据隐藏起来,让外部的人看不到数据,我们需要提供可以用来访问数据的方法。这些方法可能在这些东西中具有验证或其他功能,这些东西也对外部人员隐藏。所以在这里,我们隐藏了访问方法的实现,它被称为抽象。
这就是为什么我像上面所说的封装是一种抽象。
那么区别在哪里呢?
不同之处在于,如果我们为了简单性、可维护性和安全性而对用户隐藏某些东西,那么抽象是通用的,并且,
封装是一种与内部状态安全相关的特定封装,其中我们隐藏了内部状态(数据隐藏),我们提供了访问数据的方法,并且这些方法的实现也对外部人员隐藏(抽象)。
为什么我们需要抽象
当您进行设计时,您不会谈论实现。你说如果你给这个方法提供这些参数,它会给出这些输出。我们隐藏方法的内部实现并讨论它将做什么,所以这是一个抽象。
例子
public int add(int a, int b);
这个方法定义告诉我们,如果你给两个变量,它会做加法并返回结果。
在这里,我们不会看实现,我们只看这个方法做了什么,而不是它是怎么做的。方法实现可能因开发人员而异。1.
public int add(int a, int b){
return a + b;
}
public int add(int a, int b){
return b + a;
}
两种方法在做同样的事情,但它们的实现不同。
基本上,
需要抽象来对系统建模。需要封装以增强系统安全性。