问题标签 [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 回答
270 浏览

abstraction - 抽象和信息隐藏

抽象意味着隐藏'实现细节'......那么抽象的目标是实现信息隐藏??如果不是实施细节,信息隐藏中隐藏了什么?抽象是一种如何隐藏信息的技术?

0 投票
4 回答
1593 浏览

c# - 界面的目的是隐藏信息吗?

鉴于接口也用于帮助隐藏信息,只为用户提供他们被允许使用的可能方法的子集,并且假设我有一个Personclass 和 interface IPerson

现在主要的是,我可以这样做

或者

所以真的我仍然不受限制使用 Person 。那么界面是如何真正隐藏数据的呢?

0 投票
8 回答
13458 浏览

java - 在 jar 文件中隐藏类

在jar文件中隐藏某些类真的不可能吗?

我不想让类的直接实例化以保持它更灵活。只有工厂(或立面)才能看到这个罐子。

除了创建两个项目之外,还有其他方法可以解决这个问题吗?(两个项目:第一个包含类(实现),另一个引用第一个并包含工厂;稍后将仅引用第二个)

0 投票
6 回答
1368 浏览

java - 编写/实现 API:可测试性与信息隐藏

很多时候,我参与了 API 的设计/实现,我面临着这个困境。

我是信息隐藏的坚定支持者,并尝试为此使用各种技术,包括但不限于内部类、私有方法、包私有限定符等。

这些技术的问题在于它们往往会妨碍良好的可测试性。虽然其中一些技术可以解决(例如,通过将一个类放入同一个包中的包私有性),但其他技术并不那么容易解决,并且需要反射魔法或其他技巧。

我们来看一个具体的例子:

有充分的理由不公开InnerFoo- 没有其他类,库应该可以访问它,因为它没有定义任何公共合同,并且作者故意不希望它可以访问。然而,为了使其 100% TDD-kosher 并且无需任何反射技巧即可访问,InnerFoo应该像这样重构:

这个例子只涉及 3 个 attrs,但有 5-6 个是相当合理的,OuterFoo然后构造函数必须接受 8-10 个参数!在顶部添加 getter,您已经有 100 行完全无用的代码(还需要 getter 来获取这些 attrs 进行测试)。是的,我可以通过提供构建器模式使情况变得更好,但我认为这不仅是过度设计,而且违背了 TDD 本身的目的!

这个问题的另一个解决方案是为 class 公开一个受保护的方法Foo,将其扩展FooTest并获取所需的数据。同样,我认为这也是一种不好的方法,因为protected方法确实定义了一个合同,并且通过公开它,我现在已经隐式地签署了它。

不要误会我的意思。我喜欢编写可测试的代码我喜欢简洁、干净的 API、短代码块、可读性等。但我不喜欢在信息隐藏方面做出任何牺牲,因为它更容易进行单元测试

任何人都可以对此提供任何想法(总的来说,特别是)?对于给定的示例,还有其他更好的解决方案吗?

0 投票
4 回答
1370 浏览

c# - 为什么不是所有的字段/属性/方法都是公开的?

我知道这听起来可能很愚蠢,但我真的很想知道 :) 我目前正在学习 c#,

如您所知,您需要将“对象”(按钮、标签、文本、变量等)设置为公共或任何您喜欢的。

但是,您仍然需要编写如下代码:

那么以其他形式使其无法访问有什么意义呢?为什么每件事都不公开或默认不公开?

谢谢。

0 投票
9 回答
5917 浏览

c++ - 是否可以隐藏在 C++ 代码中定义的密码

...因此浏览反汇编不会立即暴露密码(声明为静态变量)。例如,想象一个附加了一个 zip 文件的程序,它必须为资产打开,但不容易被窥探访问。

我知道完全隐藏或保护那个拉链是不可能的,但我很好奇有什么方法可以至少阻止一个随便的窥探者。

谢谢!

0 投票
4 回答
1457 浏览

java - 仅包含私有成员的 Java 类

最近我遇到了一种情况,我需要为我的 android 应用程序创建一个自定义VideoView 。我需要访问 MediaPlayer 对象并添加一些侦听器。

不幸的是(对我来说),VideoView 类的所有成员都是私有的,所以即使扩展类也不能帮助我访问它的 MediaPlayer 对象(或其他任何东西),我不得不用我的修改。

好吧,虽然听起来我在抱怨“努力工作”,但在这种情况下它比扩展课程更容易(因为所有资源都可用......),但这让我真的怀疑这种信息方法隐藏。这比让主要组件可用于修改/访问(受保护,不公开)更好吗?我的意思是,我知道如果我扩展 VideoView 类,也许有一天他们会更改 VideoView 类中的某些内容,我可能会遇到麻烦,但如果他们会更改类,我自己的(重复)版本会有更大的不同来自 VideoView 类,我的目标不是创建自己的视频视图,而是扩展可用的 VideoView。

0 投票
4 回答
334 浏览

c++ - 一种更简单的 pimpl 形式

为什么不选择这个设计:

而不是这个:

我可以隐藏实现细节并使用源文件中定义的变量和静态函数加速编译吗?如果不是,这个设计有什么问题(除了继承)?

0 投票
4 回答
2393 浏览

design-patterns - 命令模式似乎不必要地复杂(我不明白什么?)

我已经阅读了命令模式,我想我错过了一些东西。Command 对象的存在是为了抽象出 Receiver 对象的细节。在我看来,我们可以简单地停在这里,并持有对 Command 对象的引用以在适当的时间执行适当的方法。

那么,为什么需要调用者呢?这个额外的间接提供了什么好处?我们已经将 Receiver 的详细信息隐藏在了 Command 后面,那么 Command 对客户端也隐藏起来的动机是什么?

0 投票
1 回答
1754 浏览

security - 隐藏 jboss 服务器信息

我想对任何用户隐藏 jboss 服务器信息。(Servlet 2.5;JBoss-5.0/JBossWeb-2.1、JSF/1.2)

这个怎么做 ?