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

java - 打破Java中的封装和信息隐藏

考虑以下代码段。

A该示例仅在并且B被封装在BreakOOP类中时才编译。

这似乎违背了 OOP 的一些基本概念。有人可以解释为什么会编译吗?其背后的原因是什么?

0 投票
1 回答
143 浏览

c - 信息隐藏如何阻止函数访问单个数组元素?

在 Deitel 的 C 如何编程的第 7 章中,作者使用冒泡排序示例来说明信息隐藏不允许函数知道单个数组元素,指针可用于传递地址并以相同的方式使用。

这是使用指针的交换函数:

这是我所做的:

主要的():

我运行了代码并且都正确地对数组进行了排序。所以我认为我的函数实际上获得了对单个元素的访问权限。我理解错了哪一部分?在继续之前,我需要确保我理解每一点,因为跳过一个确实会使即将到来的内容难以掌握。

0 投票
1 回答
116 浏览

gcc - D / DLang:抑制模块私有内联函数的代码生成

我有一个 D 模块,我希望它包含公共和私人部分。我尝试在函数定义之前使用关键字 private 和 static。我有一个函数,我希望将其设为可外部调用/公开,理想情况下我希望它在调用站点内联。该函数调用其他模块内部函数,这些函数旨在为私有的,即不可外部调用。对这些的调用成功地内联在模块中,并且许多垃圾被 CTFE 和已知常量传播处理掉了。然而,GDC 编译器也会生成这些内部例程的副本,即使它们已在需要的地方内联并且它们不应该是外部可调用的。我正在使用 -O3 -frelease 进行编译。我应该做什么 - 即使我使用静态和/或私有,我应该期待吗?

我还简要查看了有关 GCC 的这个线程,希望获得洞察力。

正如我之前提到的,我已经尝试在这些内部函数上同时使用私有和静态,但我似乎无法抑制代码生成。如果调试器需要拥有这些例程的副本来设置断点,我可以理解这一点。我需要强调的是,据我所知,这可能会在链接时以某种方式解决。我没有尝试链接程序,我只是在使用 GDC 查看 Matt Godbolt D Compiler Explorer 中生成的代码。一切都可以用零长度的模板参数列表制作成模板(例如 auto my_fn()( in arg_t x ) ),尝试过,它没有帮助但没有害处。

其他几件事要尝试:我可以尝试使用私有部分创建一个静态类,作为实现包的一种方式,Ada 风格。(严格要求是单实例。)我从来没有做过任何 C++,只有专业的大量 asm 和 C。所以这将是一个学习曲线。

我能想到的唯一另一件事是使用嵌套函数定义,Pascal/Ada 风格,将内部例程移动到调用者的主体内。但这有很多缺点。

粗略的例子

0 投票
2 回答
196 浏览

oop - 信息隐藏和函数式编程编码风格

我正在开发一个名为 的简单类,Simulator它将 s 列表应用于Simulation某个输入。对于每个输入,模拟可以产生或不产生输出,这取决于输入对于每个模拟必须满足的某些条件。产生的结果Simulator是一个输出列表。

这是代码。

如您所见,首先我验证输入是否可由 a 处理Simulation,过滤不能处理的模拟,然后将这些模拟应用于输入。

从面向对象的角度来看,我暴露了Simulation类的内部结构。方法所做的检查操作processable应该隐藏在prepareOutput方法内部。

但是,由于对processable可见Simulator,我可以应用更实用的方法,这非常方便。

哪种方法更好?我还缺少其他解决方案吗?

0 投票
1 回答
44 浏览

windows - 复制命令有什么区别 - windows

谁能解释这两个命令之间的区别?我一般都知道他们做了什么,但不明白(1)和(2)反映了第一个参数会产生什么影响。

(1) 复制/b imagefile.jpg + archive.rar newimagefile.jpg

(2)copy /b archive.rar + imagefile.jpg newimagefile.jpg

0 投票
0 回答
392 浏览

java - 我在java中的电影代码

我只是一个初学者,我有一些挣扎。

这是一个大学作业,我必须制作一个电影数据库,并且必须有四个不同的课程。(即电影、播放列表、电影数据库、界面)。

我已经构建了我的电影代码。在这段代码中,它说我们已经使它不区分大小写(我已经成功地做到了)这是用于电影名称和电影导演名称的。然而,有了这个,编译和运行代码,它就可以工作了。但如果我输入的是电影 1 和电影 2 的导演是相同的。它退出程序运行。但我不想要这个。

这是我输入的代码。在我的代码中,没有 system.exit (0)。

对于电影数据库,我必须在此处存储电影列表(即电影 1、电影 2、电影 3、电影 4)。这显然会以movie.java 代码为食。我正在查看我的笔记并且我不断地回到封装(信息隐藏),这是我应该在哪里寻找还是应该在其他地方寻找?

我们不能在赋值中使用数组。

对不起,这是一个长的。

谢谢你的帮助

卡斯

0 投票
1 回答
168 浏览

import - Idris:从标准库中隐藏数据类型,或者不导入标准库

我知道有一种方法可以使用 %hide 从导入的库中隐藏函数。但它似乎不适用于数据类型名称,如 Nat 和 Vect。有没有办法隐藏数据类型名称,或者只是不导入标准库?

0 投票
3 回答
117 浏览

c++ - C++:对孩子隐藏方法

我有一个名为 的类transform,以及它的子类和translation,它们应该对三角形应用变换。rotationscaling

每个子类都覆盖该apply_transform()方法:

我还有一个名为 的函数apply_transforms,它应该可供外界访问,我使用它来应用多个转换。我将一个列表传递给它transform*以启用多态性。

我唯一的问题是,现在子类也知道这种方法。这让我很困扰,因为子类不应该能够应用所有其他转换。

有一个优雅的解决方案吗?

0 投票
1 回答
46 浏览

php - 如果我将类属性定义为“公共”,会有什么后果?

我知道有很多关于信息隐藏的文章,但我仍然不知道为什么我不应该将类属性定义为公共的。

如果我将属性定义为“公共”,会有什么后果?

请举个例子。

0 投票
1 回答
204 浏览

database - 如何在 MVC 中隐藏数据?

您好,我是 MVC 的新手。我正在构建一个项目。在我的项目中,我不想从我的数据库中删除任何已保存的数据,而是对用户隐藏它们。我看起来有些为数据提供状态,但我不明白。任何人都可以解释这个话题吗?