首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >封装和数据安全

封装和数据安全
EN

Stack Overflow用户
提问于 2019-01-23 02:24:21
回答 2查看 2.6K关注 0票数 0

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

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

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

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

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

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

--我在这里的问题是:“我对数据安全/数据隐藏的封装理解是正确的吗?或者,它是否仅限于保护来自程序员的数据,并且还可以保护数据免受黑客攻击?"

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-23 02:59:39

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

代码语言:javascript
复制
    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的行为是很好的封装。

让我们修改代码

代码语言:javascript
复制
    class Engine
    {
        public bool Running { get; set; }    //set is changed to public
    }

现在,代码变得更短、更简单,如果我们想启动一个引擎,只需将Running设置为true (或者当您想要停止时设置为false )。随着项目的发展,您将有几种方法将更改Running属性以启动引擎。

这里出现了一个新的case1:有时引擎失去控制,那么它就不能启动/停止。如果您使用的是旧版本,则很容易将代码更改为:

代码语言:javascript
复制
    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...the“更简单”的版本越来越难维护。因为它向调用方公开了实现细节。每次开始/停止实现发生变化时,第一个版本(封装良好的版本)只需要更改开始/停止方法,因为它是执行行为的唯一位置。

票数 3
EN

Stack Overflow用户

发布于 2019-01-23 02:34:51

封装更多的是关于编写代码的逻辑透视图,而不是人员透视图。封装是隐藏不相关的细节的行为。

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

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

代码语言:javascript
复制
CLASS {
  METHOD { 
    // some code
  }
}

“封装”的一个例子是有一个常规用户看不到的方法(例如:私有)。

Encapsulation:-信息隐藏。

现实生活中封装的例子:

  1. 胶囊
  2. 皮夹
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54319187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档