封装和数据安全

时间:2019-01-23 02:24:22

标签: c# oop encapsulation

我试图了解面向对象的编程。关于封装,我是这样理解的。

“封装”是指对象隐藏其他类和程序集不必要的数据和行为的能力。

在封装的帮助下,类可以更改内部实现,而不会损害系统的整体功能。

防止由于编程错误而导致代码(数据)意外损坏

封装使一组属性,方法和其他成员被视为单个单元或对象。”

因此,对于封装的数据隐藏/安全性,我理解它就像从团队中其他程序员那里保护数据一样,因为有可能由于编程错误而损坏数据

我的问题是,“我对封装的数据安全性/数据隐藏的理解是正确的吗?或者,它是否不仅限于保护程序员的数据,还使黑客也能保护数据?吗?”

2 个答案:

答案 0 :(得分:0)

封装更像是逻辑,而不是人员。封装是隐藏不相关的细节的行为。

例如,您使用计算机。但是您看不到CPU的外观。它被封装或隐藏在所有塑料物品后面。

在面向对象的编程中,通常有这样一种代码:

CLASS {
  METHOD { 
    // some code
  }
}

“封装”的示例将具有普通用户看不见的“方法”(示例:私有)。

封装:信息隐藏。

现实生活中的封装示例:

  1. 胶囊
  2. 钱包
  3. 盒子

答案 1 :(得分:0)

封装与外部黑客无关,它不是数据安全概念,而是更多关于编程模型的信息。这是一个示例:

    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.StartEngine.Stop的呼叫者不会受到影响。那“简单”版本呢?您需要更改10个(或100个以上)呼叫者,并在更改OutOfControl属性之前检查Running属性。

然后是一个新的case2,case3 ...“更简单”的版本变得越来越难维护。因为它向调用者公开了实现细节。每次启动/停止实现更改时,第一个版本(封装良好的版本)只需要更改启动/停止方法,因为它是执行该行为的唯一位置。