问题标签 [information-hiding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
329 浏览

c - 有什么办法可以在 C 中制作“受保护的”typedef?

如果你想切入正题,请跳到最后两段。如果您对我的困境以及我为解决它所采取的步骤感兴趣,请继续阅读下面的内容。

作为实习的一部分,我目前正在开发 C 库的一部分。所以很自然,有些代码部分不应该被用户访问,而其他部分应该是。我基本上正在开发几个架构优化的随机数生成器 (RNG)(均匀、高斯和指数分布数)。后两个 RNG 依赖于 uniform generator ,它位于不同的内核(项目)中。所以,如果用户想要使用多个 RNG,我想确保我不会不必要地复制代码,因为我们受到内存的限制(在不同的地址多次定义相同的函数是没有意义的代码段)。

现在问题出现了。库中所有其他内核的约定是我们有两个头文件和两个 C 文件(每个用于自然 C 实现和优化的 C 版本(可能使用一些内在函数和汇编和/或有一些限制)使其更快更好地适应我们的架构)。紧随其后的是另一个 C 文件(测试平台),我们的 main 函数位于该文件中,它测试两个实现并比较结果。话虽如此,我们不能真正添加​​额外的头文件私有或受保护的项目,我们也不能为所有这些生成器添加全局头文件。

为了克服这个限制,我在 C 文件中使用了extern函数和extern const int,它们依赖于统一的 RNG 而不是每个 C 文件顶部的#define,以使代码更易于移植和修改一个地方。这在大多数情况下都有效。

然而,棘手的一点是我们在这些内核中使用了内部类型(用户不应该看到,也不应该放在头文件中)。同样,为了可移植性,我希望能够在一个地方而不是在多个内核中的多个地方更改此typedef的定义,因为该库以后可能会用于另一个平台,并且对于算法的工作而言,至关重要的是我使用 32 位类型。

所以基本上我想知道是否有任何方法可以让typedef在 C 中“受保护”。也就是说,我需要它在所有需要它的 C 文件中可见,但对用户不可见。它可以在其中一个头文件中,但对于将在他/她的项目中包含该头文件的用户,无论它可能是什么,都不能看到它。

=============================编辑===================== ===========
我还应该注意我使用的 typedef 是一个无符号整数。所以

typedef unsigned int myType

不涉及结构。

============================超级编辑==================== ======
也禁止使用 stdint.h :(

0 投票
2 回答
270 浏览

java - 信息隐藏。什么时候是安全性,什么时候是软件权重?

我正在实现一个 Java 应用程序,我想知道哪个是良好的安全性(信息隐藏)和软件可读性之间的平衡。例如,我定义了一个公共构造函数的许多方法,它内部只有一个对象实例的方法

这样,调用 myFrame 构造函数的外部类无法知道myFrame 如何实例化它的对象,而只能接收想要的对象。这个想法可以应用于任何 myFrame 方法,但我发现它对软件的可读性不是很好,有让它变得闷热的风险。

那么,在您看来,哪个是好方法?将信息隐藏应用于任何方法或仅用于重要的方法?你会怎么做?

我感谢您,知道您的开发人员经验会激发我的思维!

0 投票
2 回答
1621 浏览

python - 装饰器可以访问类的私有成员吗?

我正在编写一个解析 HTML 的类,以便为网页上的配置文件提供接口。它看起来像这样:

除了更复杂和耗时。因为我知道底层配置文件在Profile对象的生命周期内不会发生变化,所以我认为这将是一个缓存结果的好地方,以避免重新计算已知的值。我用装饰器实现了这个,结果如下所示:

当我将此代码提供给 pylint 时,它抱怨cached_resource可以访问客户端类的受保护变量。

我意识到公共和私有之间的区别在 Python 中并不是什么大问题,但我仍然很好奇——我在这里做了什么坏事吗?让装饰器依赖与它们关联的类的实现细节是不是很糟糕?

编辑:我不清楚邓肯答案中的关闭是如何工作的,所以也许这有点混乱,但这会是一个更简单的解决方案吗?

0 投票
4 回答
234 浏览

java - 封装与数据隐藏?

这可能是重复的问题,但我还没有找到答案。

链接 1

封装:

封装是使类中的字段成为私有并通过公共方法提供对字段的访问的技术。如果一个字段被声明为私有,则类外的任何人都无法访问它, 从而隐藏了类内的字段。因此,封装也称为数据隐藏

链接 2

封装:

“它 [...] 是指围绕一些事物集合构建一个胶囊,在这种情况下是一个概念障碍。” — [Wirfs-Brock 等人,1990 年]

“作为一个过程,封装是指将一件或多件物品封装在 […] 容器内的行为。封装作为一个实体,是指容纳(包含、封装)一件或多件物品的包装或外壳。”

“如果封装是‘与信息隐藏一样’,那么人们可能会提出‘所有被封装的东西也被隐藏’的论点。这显然不是不正确的。”

我应该和哪一个一起去?还是我误解了定义?

0 投票
2 回答
22845 浏览

java - Java中的实际示例封装vs信息隐藏vs抽象vs数据隐藏

我知道有很多关于这个问题的帖子,其中有实时示例的理论解释。这些 OOP 术语非常简单,但对于像我这样的初学者来说更容易混淆。但我在这里期待的不是定义和实时示例,而是期待 java 中的代码片段

任何人都可以为Java中的每个提供非常小的代码片段,这将有助于我实际理解封装、信息隐藏、抽象和数据隐藏?

0 投票
3 回答
167 浏览

java - 不使用 super 的子类方法的默认行为是什么?

是否有可能为子类中的方法定义一些默认行为,而无需调用super

例如:假设我们想boolean在超类中设置一个值,而您想对子类隐藏它,有没有办法隐藏对布尔值的修改?假设我们有以下基类BaseTest

及其子类Test

我希望调用 toTest.initialize()mIsInitialized值设置为true而不必调用super.initialize(). 我同样想避免在超类中定义抽象函数。这甚至可能吗?

0 投票
3 回答
90 浏览

coffeescript - 隐藏 CoffeeScript 对象的内部状态

CoffeeScript Ristretto看以下内容:

可以变异queue.head- http://jsfiddle.net/VQLNG/

我怎样才能编写上面的函数以便head不公开?

0 投票
2 回答
6898 浏览

android - 如何在我的 Android 应用程序中添加一点“信息”按钮

我不太确定这是否还没有得到回答,因为我觉得这个问题很难简明扼要地提出来,无论如何我都觉得很难。

我想要的是,例如,我有一个 EditText,提示可能对某些人有意义(小提示),但我觉得对其他人来说,他们可能需要更多解释/或示例。

所以我想要一个小圆形“i”按钮,代表 EditText 旁边的信息。我希望这个按钮做的是,一旦被触摸,就会弹出一个 toast 窗口,显示我想要的帮助信息。

我认为您可以仅从用户体验中描绘出我正在使用的功能!但我似乎无法找到一种很好的方法来做到这一点,就像我想象的那样。

现在,如果您知道的某个地方已经有一个明确的例子,那么链接会很棒,如果没有,一些带有一些解释的代码会很棒。我是 java 和 android 开发的新手,但我正在慢慢但肯定地到达那里。

非常感谢您,再次提供任何帮助或提示!

0 投票
2 回答
1319 浏览

architecture - 在 Go 中存储状态

我正在用 Go 编写一个简单的程序作为学习语言的练习。该程序是一个游戏玩家:它是一个基于文本的游戏,然后通过/exec.Command与之通信。在闲逛并阅读了大量在线文档之后,我设法让骨架工作——相当于 Hello World,我已经建立了双向通信,并且可以处理程序终止等错误。StdinPipeStdoutPipe

现在我正在尝试编写实际的游戏 AI 代码。因为我的目的是学习这门语言,所以我对风格非常谨慎——我不只是想用 Go 编写 C(或其他语言)。

程序中明显的分工(一旦完成所有设置)分为两部分。首先,程序查看当前状态并决定应该向游戏发出什么命令。其次,程序查看返回的数据并相应地更新状态。(是的,这是一个简单的游戏——它等待输入然后响应,没有时间问题。)

我不确定这个状态信息应该去哪里。将它全部转储到全局范围内感觉是错误的,并且制作一个巨大的单例对象似乎更糟(而且 Go 并不是特别 OO)。无论如何,我不想让函数传递并返回 20 多个变量。

一般建议很好,但我最感兴趣的是惯用的 Go 语言。根据要求,我可以共享代码,但我认为这不会有帮助。

0 投票
4 回答
9219 浏览

java - 将密码隐藏在测试用例的 java 类文件中

我正在尝试编写一个 selenium 测试用例,它将放在公司 jenkins 服务器上,所有员工都可以访问我创建的每个 java 文件。

我想要做的不是在那里显示“密码”,我不希望其他员工看到我的密码。有什么办法可以做到吗?