【问题标题】:Encapsulation and data security封装和数据安全
【发布时间】:2019-01-23 02:24:21
【问题描述】:

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

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

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

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

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

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

我的问题是,“我对与封装相关的数据安全/数据隐藏的理解是否正确?或者,它是否不仅限于保护数据免受程序员的攻击,它还能够保护数据免受黑客攻击?”

【问题讨论】:

  • 听起来你需要做更多的研究,成为这方面的专家,才能自己满意地回答。这个问题太宽泛了,它要求场外资源,以及固执己见的答案。请阅读有关提问的帮助并进行相应的编辑,以便人们可能会帮助您
  • 你知道什么是有趣的吗? - 有它的 WIKI en.wikipedia.org/wiki/Encapsulation_(computer_programming)
  • @TheGeneral 感谢您的回复。我已根据您的输入编辑了我的问题。

标签: c# oop encapsulation


【解决方案1】:

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

    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+)个调用者,在更改 Running 属性之前检查 OutOfControl 属性。

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

【讨论】:

  • 感谢@Danny Chen。这就是我一直在寻找的。我浏览过的一些博客让我感到困惑,即封装也是为了数据安全。所以,想澄清一下。你的回答帮助了我。再次感谢:)
【解决方案2】:

封装在编写代码时更多是从逻辑角度而不是从人的角度。封装是隐藏不相关的细节的行为。

例如,您使用计算机。但是你看不到 CPU 的样子。它有点像封装或隐藏在所有塑料材料后面。

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

CLASS {
  METHOD { 
    // some code
  }
}

“封装”的一个示例是具有普通用户看不到的 METHOD(例如:私有)。

封装:- 信息隐藏。

封装的真实例子:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2021-02-02
    • 2017-11-29
    相关资源
    最近更新 更多