考虑到在过程编程中您可以拥有本地范围,可以说以下陈述并不完全正确吗?
“在过程程序中,数据暴露给整个程序,而在 OOPs 程序中,它可以在对象中访问,这反过来又保证了代码的安全性。”
(我是学生,实习面试时被问到这个问题)
考虑到在过程编程中您可以拥有本地范围,可以说以下陈述并不完全正确吗?
“在过程程序中,数据暴露给整个程序,而在 OOPs 程序中,它可以在对象中访问,这反过来又保证了代码的安全性。”
(我是学生,实习面试时被问到这个问题)
我同意马克的观点,不完全正确的部分是“确保代码的安全性”。
面向对象的语言在底层做着与过程语言可能做的事情相同的事情:隐藏类型定义,然后将指针传递给包含数据的结构,而不是使用全局。一个例子是 C 的 pthreads 库,它使用不透明类型来防止 API 的用户修改内部数据结构。(不透明只是意味着结构是在私有标头中定义的,因此如果没有指针技巧,用户就无法看到它的内部。)
但是数据安全呢?不,因为您仍然可以使用指针在不透明结构中达到峰值,甚至可以检查堆栈上的数据。这也适用于 C++。黑客仍然可以尝试检查程序的内存(调试器、核心转储、其他技巧)。