当前位置: 首页 > 知识库问答 >
问题:

封装的目的是什么?它是否提供安全层?

陈实
2023-03-14

正如我所研究的封装一样,它是关于隐藏数据以防止操作。为此,我们声明了私有变量,因此无法从类外访问。但我们可以使用setter-getter方法在类外实现或访问它们。因此,如果我们必须使用setter-getter方法来实现它,那么任何其他人都可以使用setter-getter方法来实现它。那么我们如何避免操纵呢??

共有3个答案

年业
2023-03-14

封装的目的有两个:

  1. 将相关功能捆绑在一起;
  2. 控制对参与提供功能的字段和方法的访问。

getter和setter的目标是确保代码(或类)之外的参与者与您的字段只有一个交互点,从而保持不变量。这有助于:

  1. 防止以非法/不可接受的方式修改值,从而破坏功能

例:两名外部参与者试图同时修改您的账户余额;

例如:将来可以轻松地将状态变量的类型从布尔值更改为枚举,因为它总是从类中的getter访问;

例如:不允许引擎类修改并将汽车类的速度设置为负值,仅仅因为汽车正在倒车。

濮金鑫
2023-03-14

你需要这样看,

您的代码

客户端代码将尝试访问您的代码。通过封装,您的数据将不会受到客户端代码的操作。这将有助于指定可访问性限制。

举个例子,

你正在构建一个游戏,你不希望有人增加你角色的健康(操纵固定数据)

public class GameCharacter {

public int Health{ get; } 

public GameCharacter ()
{
    Health = 100;
}

}

没有人能改变健康!

徐正雅
2023-03-14

封装不是一种安全措施,因为它可以防止人们干扰您的代码。它是一种安全措施,因为人们不能在不通过您的适当渠道的情况下直接进入并更改变量。考虑以下psuedocode。

class ProgressBar {
    public int maximum;
    public int current;
}

vs

class ProgressBar {
    private int maximum;
    private int current;

    ...
    public set_current(int amount) {
        if (amount <= this.maximum) this.current = amount;
    }
}

在最上面的例子中,用户可以进入并干扰当前并打破进度条。在下面的示例中,您的setter可以避免这种情况。

 类似资料:
  • 本文向大家介绍Kafka提供的保证是什么?相关面试题,主要包含被问及Kafka提供的保证是什么?时的应答技巧和注意事项,需要的朋友参考一下 答:生产者向特定主题分区发送的消息的顺序相同。 此外,消费者实例按照它们存储在日志中的顺序查看记录。 此外,即使不丢失任何提交给日志的记录,我们也可以容忍最多N-1个服务器故障。  

  • 我的目标是将放在下,以简化我的应用程序的结构。

  • 我对Spring和Spring Security都是新手。我在读关于Spring Security的文章,它提出了principal的概念,应该是当前登录的用户。但如果我们有多个当前登录用户呢?那么,我的问题是,在Spring安全中,校长到底是什么? 例如,我已经阅读了本教程: http://www.mkyong.com/spring-security/get-current-logged-in-

  • 问题内容: 我正在阅读面向对象的Javascript,并发现了闭包的概念。我不太明白为什么以及何时使用它。其他语言(例如Java)也有闭包吗?我基本上想了解了解闭包的概念如何帮助我改善编码。 问题答案: 闭包是具有绑定变量的第一类函数。 大致意味着: 您可以将闭包作为参数传递给其他函数 闭包存储创建时存在的词法作用域中某些变量的值 Java最初没有对闭包的语法支持(Java 8中引入了闭包),尽管

  • 在我正在做的一个项目中,应用程序是使用类似于以下命令启动的: 我从未见过选项。稍微搜索一下,它似乎用于在Java应用程序中配置随机数生成。 是这样吗?什么时候应用?