问题标签 [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 投票
1 回答
83 浏览

filesystems - 数据销毁

有许多文件粉碎程序可以用来永久删除一个文件。我想知道的是一些实现细节。例如,考虑到 Gutmann 算法,它应该如何处理文件和文件系统?应用程序是否应该遍历所有硬盘集群以覆盖它们?或者打开一个文件,以某种方式更改它的内容,然后删除它就足够了?

反之亦然,如何恢复已删除的文件?我没有找到很多关于这些主题的信息。

我将非常感谢您的回复。

0 投票
7 回答
933 浏览

c++ - 可访问类的私有函数?

一段时间以来,我一直在尝试学习 C++。最近我遇到了以下一段代码:

对于我的一生,我无法弄清楚为什么要使用这些方法void add(Point P)void sub( Point p )工作。

"cannot access private properties of class Point"当我尝试使用addor时,我不应该得到类似的错误sub吗?

gcc使用版本编译的程序4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)。运行时输出:

0 投票
3 回答
225 浏览

c++ - 如何理解 C++ 入门 3rd 中的句子

<C++ primer (3rd)>以下是Stanley B. Lippman Josée Lajoie的第 7.6 章的摘录。

指定为 inline 的函数在调用它的程序中的每个点都“行内”展开。例如,

int minVal2 = min( i, j );

在编译期间扩展为

int minVal2 = i < j ? 我:j;

因此消除了使 min() 成为函数的运行时开销。min() 通过在函数声明或定义中函数的返回类型之前指定 inline 关键字来声明内联:

内联 int min( int v1, int v2 ) { /* ... */ }

但是请注意,内联规范只是对编译器的建议。编译器可能会选择忽略此建议,因为声明为 inline 的函数不是在调用点进行扩展的良好候选者。递归函数,例如 rgcd(),不能在调用点完全展开(尽管它的第一次调用可以)。一个 1,200 行的功能也很可能不会在调用点进行扩展。通常,内联机制旨在优化小型、直线、经常调用的函数。在抽象数据类型的设计中支持信息隐藏是最重要的, 例如 2.3 节介绍的 IntArray 类及其 size() 内联成员函数。

有人可以解释标记为粗体的句子吗?

0 投票
2 回答
228 浏览

c++ - 封装“包含”,因此只公开选定的类

问题:是否可以在隐藏该标头中定义的其他名称空间/类的同时从标头访问特定类?

例如,假设我有头文件 --结果.hpp

在另一个头文件 - api.hpp - 我希望在sports::outcome::Injury无法sports::outcome::Success访问包含api.hpp的文件的情况下使用。那可能吗?如果是这样,我该如何实现?

PS 在实际代码中,api.hpp包含将调用Injury类方法的模板化方法,因此前向声明是不够的。


我的尝试:

在我的无知中,我试图通过将 放置include在内部命名空间中来实现这一点。这是一个SSCCE

当它奏效时,我过早地庆祝:

它是如何失败的:

如果将标准库中的容器用作result.hpp中的类成员,事情就会崩溃。例如,使用这个版本:

编译失败并出现以下错误:

我显然做错了。建议和良好的告白将不胜感激。

0 投票
2 回答
6406 浏览

c++ - 信息隐藏 C++

信息隐藏的原理是什么,C++是如何支持的。C++ 还允许我违反信息隐藏吗?

0 投票
9 回答
50228 浏览

java - 信息隐藏和封装有什么区别?

信息隐藏封装有什么区别?

我读过封装意味着将数据和应该对它们进行操作的过程捆绑在一起。如果是这样,下面的类是否实现了封装?

现在声明数据属性会age private实现信息隐藏吗?

0 投票
3 回答
4057 浏览

java - 如何使用私有 Java 类进行有效的 API 设计

我正在编写我的第一个“API jar”,它将成为开源库并由(可能)其他开发人员使用。我已经阅读了Joshua Block 关于有效 API 设计的论文,他谈到的其中一件事——否则我永远不会想到——是他的最小化访问最大化信息隐藏的概念。基本上,您只希望您的 API 开发人员能够访问他们将使用的 Java 对象,并且您不希望您的 API 开发人员能够访问您的库的任何“胆量”。

在我作为 Java 开发人员的几年中,除了public. 此外,我也从未使用过嵌套类。所以我坐在这里想知道如何在我的 Java API 中实现这种“信息隐藏”最佳实践?我认为私有的,可能是嵌套的,类是答案。但是从哪里开始呢?

  • 每个.java源文件至少需要 1 个public类才能编译。因此,对我来说,要创建一个类private(并且非嵌套),我需要“将它与一个类捆绑在一起。对我来说,这只有在/类密切相关时才public有意义。但是如果我的 API 有一部分只是由与任何其他类似物无关的类(用于可访问性最小化目的)组成?publicprivateprivatepublic
  • 你什么时候让一个private类嵌套,什么时候让它不嵌套?还是只是偏好问题?
0 投票
2 回答
1158 浏览

oop - Fortran 2003/2008 中子类的数据继承

在 Fortran 2003 中,如果一个变量在超类中声明为 PRIVATE,则子类将无法访问它。但是如果所有变量都声明为PUBLIC,程序就会失去“信息隐藏”的属性。

有没有办法在 Fortran 面向对象编程中同时采用“数据继承”和“信息隐藏”?如果不是在 2003 年,那么 Fortran 2008 有什么改进吗?

0 投票
3 回答
5070 浏览

javascript - JavaScript - 如何从 eval 脚本中隐藏全局范围

我通常认为全局范围是一个始终可以从任何地方访问的命名空间。我想知道理论上是否可以完全隐藏全局范围。例如,假设我们有一些我们想要查看的代码eval(在浏览器的控制台中):

通过包装eval调用,this并且window可以隐藏code

但我无法阻止code隐式创建全局变量。有可能吗?我不想用这个东西,我只是好奇。

0 投票
2 回答
855 浏览

java - 接受默认序列化时如何破坏封装?

我经常听到人们说序列化破坏了封装,而这种封装的丢失可以通过提供自定义序列化在一定程度上最小化。有人可以提供一个具体的例子来证明由于默认序列化导致封装丢失是合理的,以及如何通过使用自定义序列化来最小化这种损失?

我将此问题标记为与 Java 相关,但答案可能与语言无关,因为我认为这是跨平台和语言的常见问题。