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

.net - 你什么时候使用“受保护的内部”访问修饰符?

您可能已经知道,.NET Framework 的protected internal访问修饰符以一种奇怪的方式工作:这并不意味着该类是protected AND internal,它表示该类是protected OR internal;也就是说,修改后的类或成员可以从同一程序集以及同一层次结构中访问。

所以,知道这一点:你什么时候使用它?能给我举个例子吗?.NET 基类库中是否有一个很好的、有启发性的使用示例?

0 投票
11 回答
535 浏览

architecture - 你如何让人们重视抽象和灵活性而不是“完成它”?

当其他人希望跳过官方接口并直接访问底层实现细节时,我有时会遇到困难。

他们认为这样做可以让他们更快地解决问题。我认为这样做会导致我们的架构变得更加紧密耦合,并且随着新需求的出现难以改变。

我指出了当前设计中的所有工作以及设计理念和灵活性的价值,尝试维护和更改脆弱代码的成本,封装和数据隐藏和分层架构的价值以及健壮性,所以规范的微小变化会导致代码的微小变化。他们说“但这会更容易。”

你怎么对付这些人?

0 投票
4 回答
1846 浏览

java - 封装 Java 首选项 API

我曾经为我的应用程序有一个自定义首选项类。对于我的下一个爱好项目,我想切换到 Preferences API。但是 put 和 get 函数需要一个默认值,我不想在源文件中传播默认值。即使我的项目很小,我也无法想象在整个源代码中更改默认值。各位大佬是怎么用api的?我正在考虑将首选项 api 包装在另一个类中,但是使用 API 有什么意义,因为它只减轻了将文件保存到磁盘的负担,而使用序列化并不难?我错过了重点吗?

0 投票
4 回答
3626 浏览

c# - C#:部分类和 Web 服务:分离形式和功能

我正在涉足 Web 服务领域,并且一直在制作一个简单的 Web 服务来模拟数学运算。首先它很简单,传入两个整数,然后根据调用的方法将二元运算符应用于这些(加号、减号等)。

然后我决定让事情变得更复杂一些,并开始传递对象,但后来我发现 Web 服务只公开了类的数据方面,而不是功能方面。

有人告诉我,解决这个问题的一个好方法是让服务端的类成为一个部分类(类封装形式的这一端),而在客户端有另一个部分类(类的这一端封装功能)。这似乎是一种优雅的做事方式..

所以,我已经如上所述设置了两个类,但它似乎并没有像我被告知的那样工作。

我正在尝试的可能吗?如果是这样,我哪里错了?

0 投票
3 回答
418 浏览

oop - 你什么时候停止封装?

我在管理给定通用事务的持久性机制的边界类上有一些事件处理程序:

使用某种 TransactionManager 来包装 SimpleTransaction 和 TransactionPERsistor 对象会更好吗?

是否有任何有用的经验法则可以理解我是否需要进一步的封装?

目前我遵循的经验法则是“如果方法变得太大 - 做点什么”。在处理边界事件处理程序时,有时很难在过程和面向对象之间找到正确的平衡。

有什么意见吗?

干杯

0 投票
4 回答
3333 浏览

c# - 封装 VS 继承 - 如何使用受保护的函数?

在 C# 或 VB.NET 等 OOP 语言中,如果我在超类中创建属性或方法,protected我将无法在我的表单中访问它们 - 它们只能在从该超类继承的类中访问。

要访问这些属性或方法,我需要创建它们public,这会破坏封装,或者将它们重新写入我的类,这会破坏继承。

这样做的正确方法是什么?

0 投票
4 回答
2028 浏览

oop - 封装原理

有一些面向对象的工程原则表明“一个类应该只知道它作为参数的类的契约,或者它使用的任何内部契约”。

在 C++ 中,反例是:

这个原则有名字吗?此外,很高兴看到实际原理而不是我上面的解释。

0 投票
7 回答
11997 浏览

oop - 有哪些不同类型的封装?

有哪些不同类型的封装?

我认为这基本上是指诸如抽象、多态性和继承之类的核心 OO 概念是否正确?

我对封装的理解是它是一种隐藏数据/功能的方法,但我从来没有真正将多态性或继承视为一种封装形式,尽管我可以看到多态性如何被视为封装,因为它可以隐藏你对象的确切类型正在与之互动。

那么,您会说仅此而已,还是我缺少一些核心概念?

编辑我刚刚在评论中注意到有人提到它可能指的是私有/公共方法,也许我对这个问题的思考太多并期待一个比实际更复杂的答案?

0 投票
4 回答
2824 浏览

objective-c - 在实现中创建方法而不在标头中定义

如何在类的@implementation 中创建一个方法而不在@interface 中定义它?

例如,我有一个构造函数,它进行一些初始化,然后从文件中读取数据。我想将文件读取代码分解为一个单独的方法,然后从构造函数中调用该方法。我不想在标头中定义这个方法,因为它只对这个@implementation 上下文是私有的。

这可能吗?

这是我的例子。我有一个从文件中读取 Todo 任务列表的小程序。

这是@interface:

这是@implementation的一部分:

我想要做的是不必在界面中定义以下内容:

0 投票
27 回答
74612 浏览

c++ - 我可以在不使用朋友的情况下从课堂外访问私人成员吗?

免责声明

是的,我完全清楚我所问的完全是愚蠢的,任何想在生产代码中尝试这种事情的人都应该被解雇和/或枪杀。我主要看不能做。

既然已经不碍事了,有没有办法从类外部访问 C++ 中的私有类成员?例如,有没有办法用指针偏移量来做到这一点?

(欢迎幼稚和其他非生产就绪技术)

更新

正如评论中所指出的,我问这个问题是因为我想写一篇关于过度封装(以及它如何影响 TDD)的博客文章。我想看看是否有办法说“即使在 C++ 中,使用私有变量也不是 100% 可靠的强制封装方式”。最后,我决定更多地关注如何解决这个问题,而不是为什么它是一个问题,所以我没有像我计划的那样突出这里提出的一些东西,但我仍然留下了一个链接。

无论如何,如果有人对它是如何产生的感兴趣,这里是: 测试驱动开发的敌人第一部分:封装(我建议在你认为我疯了之前阅读它)。