我试图理解面向对象的编程。关于封装,我是这样理解的。
“封装,是指对象隐藏其他类和程序集不需要的数据和行为的能力。
在封装的帮助下,类可以在不损害系统整体功能的情况下改变内部实现。
防止代码(数据)因编程错误而意外损坏。
封装使一组属性、方法和其他成员被视为单个单元或对象。“
因此,当涉及到使用封装的数据隐藏/安全时,我理解它就像保护来自团队中其他程序员的数据一样,因为数据可能由于编程错误而损坏。
--我在这里的问题是:“我对数据安全/数据隐藏的封装理解是正确的吗?或者,它是否仅限于保护来自程序员的数据,并且还可以保护数据免受黑客攻击?"。
发布于 2019-01-23 02:59:39
封装与外部黑客无关,它不是一个数据安全的概念,它更多地是关于编程模型的。下面是一个示例:
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属性以启动引擎。
这里出现了一个新的case1:有时引擎失去控制,那么它就不能启动/停止。如果您使用的是旧版本,则很容易将代码更改为:
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+)调用方,在更改Running属性之前检查OutOfControl属性。
然后又出现了一个新的case2,case3...the“更简单”的版本越来越难维护。因为它向调用方公开了实现细节。每次开始/停止实现发生变化时,第一个版本(封装良好的版本)只需要更改开始/停止方法,因为它是执行行为的唯一位置。
发布于 2019-01-23 02:34:51
封装更多的是关于编写代码的逻辑透视图,而不是人员透视图。封装是隐藏不相关的细节的行为。
例如,您使用计算机。但你看不出CPU是什么样子。它的封装或隐藏在所有塑料材料后面。
在面向对象的编程中,通常有这样的代码:
CLASS {
METHOD {
// some code
}
}“封装”的一个例子是有一个常规用户看不到的方法(例如:私有)。
Encapsulation:-信息隐藏。
现实生活中封装的例子:
https://stackoverflow.com/questions/54319187
复制相似问题