问题标签 [data-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.
c - 在 C 中区分特定于实现的类型和变量
假设有一个接口规范“X”。X 要求调用XHeader.h
一个结构X_Fiddle
来保证成员的存在foo
和bar
,两者都是 type int
。然而,实现定义的成员并没有被禁止,如果这样做可以提高效率,实际上是被鼓励的。我需要为我工作的公司编写 X 的实现,并意识到有一些特定于我的实现的成员来存储一些状态会非常方便,所以我写了以下内容:
当然,没有什么可以告诉用户dinky_dingbat
或者dingbat_data
不应该使用的,因为它们是特定于实现的细节,并且可能在未来的某个时候改变或消失。鉴于我无法通过使用不透明指针之类的东西来隐藏实现,我应该怎么做才能使这些内部成员脱颖而出(或其他技巧来隐藏这些东西)?是否有任何常用/标准的方法来处理此类问题?我能想到的最好的方法是使用前导下划线之类的命名约定,但我不确定前导下划线规则是否适用于成员变量,而且我感觉我也混淆了一些 C++ 特定规则。我还想过将它们命名为类似的名称,INTERNAL_dinky_dingbat
或者为内部包含的内部类型设置一个单独的结构X_Fiddle
,但我想尽量减少额外的输入,所以我有点不喜欢它们。或者仅仅拥有一个如上所述的普通结构是否完全可以接受,其中特定于实现的细节在评论和文档中详细说明,当我需要改变事情时,让经验不足和勤奋的人遭受他们自己造成的伤害?
假设我是从头开始和/或我的公司/团队对这种特定情况没有约定。
java - Java中的实际示例封装vs信息隐藏vs抽象vs数据隐藏
我知道有很多关于这个问题的帖子,其中有实时示例的理论解释。这些 OOP 术语非常简单,但对于像我这样的初学者来说更容易混淆。但我在这里期待的不是定义和实时示例,而是期待 java 中的代码片段。
任何人都可以为Java中的每个提供非常小的代码片段,这将有助于我实际理解封装、信息隐藏、抽象和数据隐藏?
java - Java - 继承
OUTPUT 为 1。方法 show 是在 Base 类中继承的,但应优先考虑局部变量,因此输出应为 2 还是编译器隐式在 super 之前添加前缀?
coldfusion - 带有cfc的“invokeImplicitAccessor”好用吗?
在 ColdFusion 10 中,通过<cfset THIS.invokeImplicitAccessor = "true">
在 application.cfc 中进行设置,我们现在可以直接访问属于 cfc 的任何属性。
我不确定开发人员为什么会使用这种功能。
我的问题是,这不违反面向对象编程的数据隐藏原则吗?
c - C 中的内联 Setter 和 Getter 函数
在 C++ 中,我可以在头文件中内联声明一个 getter 函数:
通过包含此头文件,客户端方法和函数可以使用 getter 函数访问私有变量。
我正在寻找用 C 语言对这个概念进行建模:
hello.h:
你好ç:
主.c:
我从 gcc 收到链接器错误:
有没有办法让内联函数(在头文件中)访问另一个翻译单元中的静态变量?
或者有没有办法实现内联的getter函数?
我在嵌入式平台上使用 IAR Embedded Workbench、ARM7TDMI 处理器。
gcc 编译器用于在 PC 上测试概念。
编辑 1:背景
我正在寻找优化关键部分内的 getter 调用。目的是减少在关键部分花费的时间。
编辑 2:没有全局
变量 我们商店使用的编码指南声明没有全局变量。
此外,该系统是运行 MicroCOSII 的 RTOS。
matlab - 如何使用 SVD 修改后重建原始图像
我已经分解了我的图像,svd
并通过添加矩阵来修改奇异值,比如说A
。我怎样才能找回这个矩阵A
。
例如:
A
现在我怎样才能从矩阵取回我的矩阵new
?
java - 实例和方法隐藏:重点是?
有人可以解释一下原因和好处,例如隐藏方法和方法,特别是复制超类成员有什么好处?这难道不是与旨在进一步定义一个类并对其进行改进的继承相违背的吗?
c++ - C++中的数据隐藏
我在 C 中有一些代码,以这种方式使用不完整的结构(简化示例):
某事.h
一些代码.c
我在想,我这里基本上是在做 C++,为什么不试试用 C++ 写呢。问题是(我是 C++ 新手),我如何在 C++ 中实现相同的目标?如果我尝试添加声明不完整类的成员函数,我会得到
从铿锵。通过在头文件中编写完整的类,这将失去数据隐藏的全部意义,并且更改类中的私有变量将强制包括“something.h”在内的每个文件重新编译,我认为这里不需要。我不需要使用“something.h”的文件来知道这个结构/类的大小,我通常只需要一个指针就可以了。我怀疑它应该是这样的:
这样我就可以写出和 C 一样的东西,只是更短,更简洁。有任何 C++ 编码员希望启发这个凡人的 C 编码员吗?
javascript - 一个有助于模块化下隐藏数据的 JavaScript 连接器?
我之前遇到过 JavaScript 模块化下数据隐藏的问题。请参阅以下链接:
模块模式 - 如何将一个模块的代码拆分成不同的 js 文件?
为了说明问题,请参见下面的示例。我的目标是将我的长js文件分成2个文件,但是有些函数需要访问一些私有变量:
first.js:
second.js:
现在这行不通,因为孩子无权访问父母。一种解决方案是parentPrivate
公开可见,但在我的情况下这是不可接受的。
引用@Louis 的话,他回答了之前的一个问题:
“我们不能有一个儿童可以访问但外部公众无法访问的字段(即受保护)。有什么方法可以实现吗?”
如果您想要模块化(即您希望子项与父项分开编码),我认为这在 JavaScript 中是不可能的。可以让孩子和父母在同一个闭包中操作,但这不会是模块化的。无论有没有 RequireJS 都是如此。
问题是父母和孩子不在同一个闭包内。因此我在想,创建一个将文件放入同一个闭包的库是否有意义?
就像是:
当然,我们可以接受更多参数来指定命名空间等。请注意,这与我们从 RequireJS 获得的功能不同。RequireJS实现了模块化,而这个concatenator专注于模块化条件下的数据隐藏。
那么上述任何一个有意义吗?还是我错过了一些重要的点?欢迎任何想法。
javascript - 模块化下实现数据隐藏的 JavaScript Concatenator 库
JavaScript 连接器
我正在考虑编写一个 JavaScript 库来实现模块化下的数据隐藏。我希望得到一些关于这是否有用以及潜在问题是什么的意见。
让我先解释一下这个问题。我想要实现的是这些:
数据隐藏
我所说的数据隐藏是指这种模式:
在这里,好奇的用户将无法更改我的私有变量,也无法调用我的私有函数。
模块化
只要所有内容都在一个 js 文件中,上述方法就可以工作。但是一旦 js 文件变得太大,我想模块化:
first.js:
second.js:
它不再起作用了。当然我可以放在toggleState
一起,privateObj
但总是需要跨模块进行数据通信。这只是一个例证。
这是一个真正的问题吗?
真的有这样的情况,我们希望一个函数可以被其他模块访问,但不能被公众访问吗?我想是的。一个直接的例子是这样的:
在这种情况下,我们都应该同意
与图表相关的东西本身应该是有凝聚力的模块
drawChart() 方法应该由我在其他模块中的代码调用以提供数据
我们不希望用户任意调用我的 drawChart(),因此不希望将其公开
MathJax项目遇到了这个问题。他们的解决方案是在部署之前使用 bash 脚本连接所有脚本。他们需要这样做的原因是,首先模块是相互依赖的,因此它们需要位于同一个文件中,其次,如果组合起来,文件太大而无法管理(30k LOC)。这里完全相同的问题,所以我相信这是一个真正的问题。
提出的解决方案——JS Concatenator
将它们放在一个封闭的地方,在飞行中。
这就是我想象的应该如何工作。在 HTML 中,我有这些:
然后它应该做这样的事情:
并且first.js
被second.js
剥离为:
这行得通吗?
这个提议的解决方案会起作用吗?我错过了一些重要的观点吗?什么是潜在的问题?我该如何实施呢?任何建议都非常感谢!