c# - 封装和数据安全
问题描述
我正在尝试了解面向对象的编程。关于封装,我是这样理解的。
“封装,是指对象隐藏其他类和程序集不需要的数据和行为的能力。
在封装的帮助下,一个类可以在不损害系统整体功能的情况下改变内部实现。
防止代码(数据)因编程错误而意外损坏
封装使一组属性、方法和其他成员可以被视为一个单元或对象。”
因此,当涉及到封装的数据隐藏/安全性时,我理解它就像保护团队中其他程序员的数据,因为数据有可能由于编程错误而损坏
我的问题是,“我对封装方面的数据安全/数据隐藏的理解是否正确?或者,它是否不仅限于保护程序员的数据,还可以保护黑客的数据?”
解决方案
封装与外部黑客无关,不是数据安全概念,更多的是编程模型。这是一个例子:
class Engine
{
public bool Running { get; private set; }
public void Start()
{
this.Running = true;
}
public void Stop()
{
this.Running = false;
}
}
这是一个简单的模型,Engine
可以Start
/Stop
通过它的实例方法,它本质上改变了Running
属性。如果要启动/停止Engine
,只需调用相应的方法即可。我们可以说 的行为Engine
被很好地封装了。
让我们更改代码
class Engine
{
public bool Running { get; set; } //set is changed to public
}
现在代码更短更简单,如果我们想启动一个引擎,只需设置Running
为true
(或者当你想停止时为 false)。随着项目的发展,您将有几种方法可以更改Running
属性以启动引擎。
这是一个新的案例1:有时发动机失控然后无法启动/停止。如果您使用的是旧版本,很容易将代码更改为:
class Engine
{
public bool Running { get; private set; }
public bool OutOfControl { get; private set; }
public void Start()
{
if (this.OutOfControl) return;
this.Running = true;
}
public void Stop()
{
if (this.OutOfControl) return;
this.Running = false;
}
public void SomeOperation()
{
//inside the method sometimes OutOfControl is set to true
}
}
Engine.Start
和的调用者Engine.Stop
不会受到影响。“更简单”的版本呢?您需要更改 10+(或 100+)个调用者,OutOfControl
在更改属性之前检查Running
属性。
然后出现了一个新的case2,case3......“更简单”的版本变得越来越难以维护。因为它将实现细节暴露给调用者。每次启动/停止实现更改时,第一个版本(封装良好的版本)只需要更改启动/停止方法,因为它是唯一执行该行为的地方。
推荐阅读
- python - 线程函数的行为不符合预期 kivy
- database - 如何在 2 个服务器、本地和云上托管相同的项目
- android - 如何从回收站视图 onclick android studio firestore 获取数据
- javascript - 如何在 Vuetify v-switch 中停止传播?
- mysql - 更新表mysql缩写名称
- html - Html css div未显示在左侧
- javascript - 复选框单击有效 2 次
- flutter - 在颤动中使用 StreamBuilder 时将数据传递到下一个屏幕
- apache - 升级后恢复 MAMP 配置
- reactjs - 渲染方法被触发两次