首页 > 解决方案 > 封装和数据安全

问题描述

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

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

在封装的帮助下,一个类可以在不损害系统整体功能的情况下改变内部实现。

防止代码(数据)因编程错误而意外损坏

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

因此,当涉及到封装的数据隐藏/安全性时,我理解它就像保护团队中其他程序员的数据,因为数据有可能由于编程错误而损坏

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

标签: c#oopencapsulation

解决方案


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

    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
    }

现在代码更短更简单,如果我们想启动一个引擎,只需设置Runningtrue(或者当你想停止时为 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......“更简单”的版本变得越来越难以维护。因为它将实现细节暴露给调用者。每次启动/停止实现更改时,第一个版本(封装良好的版本)只需要更改启动/停止方法,因为它是唯一执行该行为的地方。


推荐阅读