问题标签 [encapsulation]

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 回答
1224 浏览

inheritance - Clojure 允许封装和继承,但我可以将它们结合起来吗?

这是一个过于简单的示例:

我可以封装一个实现细节,例如使用一个原子作为计数器:

但这意味着我需要重新定义所有内容以添加功能(无继承):

而如果可以只扩展一个功能:

或者我可以只暴露原子并拥有独立的功能:

看来最好的选择是放弃封装,如果“继承”(或更准确地说:扩展)是可取的。

0 投票
2 回答
1090 浏览

oop - 封装是抽象的子集吗?

由于封装和抽象都与信息隐藏有关,我可以将封装理解为抽象的子集吗?

0 投票
3 回答
2520 浏览

javascript - 对象外的 JavaScript 函数封装

请参阅以下脚本:

当我调用x(123).y()时,消息显示123在x( )中声明的函数y( )

现在我想声明另一个函数z()它将驻留在x()之外,但行为与y() [associate with x() ]

可能吗?如果可能怎么办?

0 投票
2 回答
3485 浏览

c# - 在 C# 中,方法可以返回 List 以便客户端只能读取它,但不能写入它吗?

假设我有一个 C# 类:

客户可以这样称呼它:

有没有办法使Add方法失败,因为只返回只读版本_barList

0 投票
3 回答
683 浏览

language-agnostic - 传入应该知道的参数不会隐式违反封装吗?

我经常从测试驱动开发人员那里听到,让一个函数隐含地获取大量信息是一件坏事。我可以看到从测试的角度来看这会很糟糕,但从封装的角度来看有时不是必要的吗?想到以下问题:

使用 Random 和 OrderBy 是否是一个好的 shuffle 算法?

基本上,有人想在 C# 中创建一个函数来随机打乱数组。有几个人告诉他,随机数生成器应该作为参数传入。对我来说,这似乎是对封装的严重违反,即使它确实使测试更容易。数组混洗算法是否需要任何状态,而不是它正在混洗调用者不必关心的实现细节的数组?获取此信息的正确位置难道不是隐式的,可能来自线程本地单例吗?

0 投票
3 回答
224 浏览

python - 什么技术有利于在 Python 和 Objective-C 之间发送封装的数据,然后再进行转换?

我正在尝试创建一个客户端/服务器网络应用程序。客户端软件使用 Objective-C (Mac) 编写,服务器软件使用 Python (Linux) 编写。我想在任一端封装对象数据,并通过互联网将其发送到另一端。这将包括标准类型,如字符串、双精度和数据结构(数组、字典)以及二进制文件。

我的问题是,你会如何建议我这样做?什么技术有利于在两种不同的编程语言之间发送封装的数据,然后再进行转换?特别是Objective-C和Python?

Python 有 pickle/cPickle,它允许你获取 Python 对象并将它们封装到一个文件中,但是取消腌制它们会给你留下 Python 对象而不是 Obj-C 对象。我也见过 XML 和 JSON,尽管我仍然会遇到将对象转换的问题,例如将 Python 字典转换为 Obj-C NSDictionary,反之亦然。

从我收集到的信息来看,XML/JSON 可能很难与二进制数据一起使用,需要在封装之前先将其转换为文本。我可能会发送大量二进制数据(每个请求 50-100MB),因此文本转换会显着增加文件的大小,这是我想避免的。

谢谢你的帮助!

0 投票
4 回答
2265 浏览

c++ - 按键擦除矢量元素

我定义了以下内容并用元素填充它:

但我想要删除具有特定键的元素...

但它不允许我。我将如何正确处理分配给该键的元素?

0 投票
13 回答
2123 浏览

c# - 封装不是很可笑吗?

对于我的软件开发编程课程,我们应该为 RSS 提要制作一个“提要管理器”类型的程序。这是我如何处理 FeedItems 的实现。

很好很简单:

我为此被标记了,“正确”的示例答案如下:

现在对我来说,这似乎很愚蠢。老实说,我不敢相信我被标记了,当这和我做的完全一样的事情时,我做的事情要多得多。


它让我想起在 C# 中人们总是这样做的:

我的意思是我知道他们为什么这样做,也许稍后他们想验证 setter 中的数据或在 getter 中增加它。但是,为什么你们不这样做,直到出现这种情况?

抱歉,这是一种咆哮,而不是真正的问题,但冗余让我抓狂。为什么 getter 和 setter 在不需要的时候如此受欢迎?

0 投票
3 回答
223 浏览

design-patterns - 行为逻辑的抽象——有设计模式吗?

我需要抽象一些行为代码,并且在尝试引用调用这些行为的类中的对象时遇到问题,让我尝试解释一下:

我的“父”类有一个名为CurrentPage的属性。我也有一些行为逻辑,修改CurrentPage属性,目前这是写在同一个类中。我现在需要在很多地方重用这种行为,所以我想将它封装/抽象成一个单独的......呃......类?

我能感觉到可能有一种设计模式可以满足我的需求,但我不知道该使用哪一种。

有人可以帮忙吗??

谢谢,马克

(我正在使用 C#、Silverlight 和 MVVM。CurrentPage通知属性,而不是字段,因此不能作为ref类型传递到 Behavior 子类中)

更新:根据要求添加示例:

我正在尝试将 DoWork() 提取到一个单独的类中。

0 投票
1 回答
163 浏览

asp.net - 当服务(RSS、REST API)与我的用户界面(webforms)共享一个通用模型时如何将它们解耦的建议?

我有一个 Web 应用程序,它被安排到数据、业务和 UI 项目中。随着系统的发展,通过构建所有三个项目并将它们部署在一个包中来部署更改。这种做法效果很好,并且允许产生“三层”的错觉,而无需解决真正独立系统的通信、版本控制问题。

所以随之而来的是对一些数据的 XML 摘要的请求,我的想法转向了一个花哨的 WCF 服务,有一天,它可能是我的“Web API”(啊……头脑……它是一只多么邪恶的小猴子)。所以,假设这在“这真的是最好的主意吗?”中幸存下来。测试这里是我的问题:

当与两个不断发展的“客户”从一个不断发展的“模型”中提供内容时,你最成功的结构是什么?