在“封装”的上下文中,短语“保护对象免受客户端不必要的访问”是什么意思

In the context of “encapsulation”, what is meant by the phrase “protecting objects from unwanted accesses by a client”

在“C 编程:一种现代方法”的第 19 章中,介绍了封装的思想(尽管在 C 编程语言中“微不足道”)。

作为实施封装的动机,作者暗示了保护对象不被客户端访问的重要性。参考了有关避免结构内数据字段“损坏”的评论。

可能是因为我在软件开发方面还是个新手(我只写过小程序……有几个.h和.c文件),我不太明白的必要性“保护对象”。

归根结底,程序员(使用显式代码)不会决定是否直接访问对象吗?编译器不会“不小心”访问结构并修改成员吧?

根据我的理解,只有当有一段明确的代码说“访问该结构并更改数据”时,才会发生“破坏性访问”......并且大概是负责启动该操作的代码段由用户生成。

因此,封装的唯一目的是保护“程序的目的”免受整个实际编程过程中发生的用户错误的影响吗?

谢谢!

From my understanding, the “corrupting access” would only occur if there was an explicit piece of code that said “access that structure and alter the data”...and presumably the piece of code responsible for initiating that action was user-generated.

是的,这正是问题所在。如果用户 可以 访问内部结构/对象/任何东西,那么他们有 non-zero 的机会。如果您知道某些内部对象对 end-users 没有用,为什么不阻止他们访问它呢?这样您就可以保证您的库按预期工作,因为它的内部结构或对象仅由您自己编写的代码修改。

Perhaps because I am still quite a novice in software development in general (I’ve only ever written small programs...with a few .h and .c files), I don’t really understand the necessity of “protecting objects”.

Ultimately, doesn’t the programmer (with explicit code) dictate whether or not an object is directly accessed? It’s not like the compiler will “accidentally” access a structure and modify members, right?

如果您没有限制对内部对象的访问,您就是将保持内部对象正确的责任推给了最终用户。对于大型图书馆,这可能很难管理。同样,限制对用户不需要访问的内容的访问是免除他们责任和防止错误的一种方式。