封装到底是什么?

时间:2018-11-02 14:23:44

标签: c# oop encapsulation

我的老师告诉我封装是隐藏数据/信息。

但是我从here中了解到,封装将数据和对数据进行操作的方法捆绑为一个单元。并且这种[封装]允许我们创建信息隐藏机制。例如,将变量设置为只读,或使其可以通过某些检查点访问。

我对吗,封装本身不是隐藏数据,而是隐藏数据的一种方式?

4 个答案:

答案 0 :(得分:3)

没有权威人士可以完全自信地告诉您。不幸的是,您(所有人)每次都必须问说话者/写者到底是什么意思。

大多数时间封装,比信息隐藏要多。

封装有点抽象,不仅可以指数据,还可以指逻辑或一般知识。

隐藏数据就是(通常)隐藏数据(实例变量)。

这些事情如何实现,引发了更多的争论!例如,当实例变量仅声明为 private 时,一些(如果不是大多数)人会引用数据隐藏。即使有相同数据的公共获取者! (链接的文章似乎支持这一立场)

再次与其他人(包括我自己在内)通话时在公开获取者面前隐藏了数据,至少可以这样说听起来很奇怪。

有些人坚持认为,如果返回的数据是不可变,则吸气剂是可以的(数据隐藏适用),因为该数据无法更改。

封装通常与逻辑一起使用。例如:我在此类中封装了如何发送电子邮件等。


问题是,每个人都使用相同的词,因此几乎不可能通过这两种情况来分辨某人的真正含义。如果您想知道某人在说什么,请始终要求一个示例(或两个)。

答案 1 :(得分:0)

这意味着除非该对象允许,否则您不能与另一个对象的内脏混为一谈。它被封装在无法进入的胶囊中。伪像是隐藏信息。如果您封闭起来,只有您可以打开东西,那么您几乎就隐藏了自己内部的所有内容。因此,隐藏是封装的结果。

答案 2 :(得分:0)

根据code complete book

的理解,我将解释封装和数据隐藏

创建类/方法时,主要目的是降低程序的复杂性。您创建了一个类/方法来隐藏信息,因此您无需考虑它。当然,在编写类/方法时,您需要考虑一下。但是,编写完成后,您应该可以忘记细节,而无需了解其内部工作原理就可以使用类/方法。

因此,每个班级/方法都应问一个问题:“为了降低复杂性,我应该隐藏什么?”因此,您开始创建该类/方法提供给外界的接口(其他类/方法)。这包括为界面表示创建良好的抽象,并确保细节保留在抽象的后面。

抽象通过提供允许您忽略实现细节的模型来帮助管理复杂性。 封装是强制执行器,可防止您查看详细信息,即使您愿意。如果我将方法声明为private,我将强迫它只能在类内部使用,而不能从外部使用;如果我将其声明为public,则是说它是方法的一部分。此类提供的接口,可以从外部使用。这两个概念是相关的,因为没有封装,抽象往往会崩溃。

答案 3 :(得分:-2)

考虑一个生日类,该类在构造函数中采用一个生日(DateTime)。 它具有以下已填充的属性

   Public Property _ZodiacSign As String = String.Empty
    Public Property _ChineseZodiac As String = String.Empty
    Public Property _ChineseZodiacChar As String = String.Empty
    Public Property _is21AndOver As Boolean
    Public Property _ChineseDate As String
    Public Property _EstimatesConvievedDate As DateTime

您不知道找出十二生肖或十二生肖的逻辑是什么,或者它们超过21岁,这是一个黑匣子。