我被要求解释什么是封装,我回答说“捆绑修改这些数据的数据和函数,称为封装。”
答案之后是另一个问题 - “因此,根据您的定义,如果我从类的成员函数修改全局变量,则会违反封装。”
回答“是”是有意义的。
我不确定我的解释是否错误或者问题是否有效,我的回答是肯定的。
有人可以提供帮助。
答案 0 :(得分:1)
引自wikipedia:
在编程语言中,封装用于指代两种中的一种 相关但不同的概念,有时是组合 物:
- 用于限制对某些对象组件的访问的语言机制。
- 一种语言结构,有助于将数据与对该数据进行操作的方法(或其他功能)进行捆绑
以我的拙见,后续问题的答案是主观的,这取决于对封装概念的解释。
例如,如果封装数据仅限于类的成员变量,则不会违反。每个人都可以访问不属于对象的全局变量,因此,通过成员函数访问它不包含任何封装违规。
另一方面,如果您认为封装应该应用于整个程序,那么这个全局变量应该捆绑到一个对象,因此,对它的原始访问构成了封装违规。
底线是答案在于神学领域,这意味着它取决于不同编程教条如何解释封装。
答案 1 :(得分:1)
这取决于如何定义和访问全局变量。
想象一下包含声明的头文件,但不包含成员函数的定义,以及包含类成员实现的相应实现文件。
现在将此头文件中定义的全局变量视为内部链接一(static
)。或者放在未命名的命名空间中。它是一个全局变量,但在功能上它与private
static
类成员没有区别。
这是有臭味的代码,但是,我说,变量是正确封装了: