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

assembly - 汇编语言是如何整合到程序中的?

我在很多地方读到汇编语言通常不用于创建完整的程序,而是被其他程序用来使某些程序更高效,尤其是那些每秒调用几千次的程序。我想知道如何将少量的汇编代码合并到更大的程序中。

  • 我认为可以制作一个小的可执行文件,然后从另一个程序运行,但这似乎效率低下。

  • 然后我想到了 Visual Studio 的内联程序集,但那是微软特有的,似乎会有更好的方法。

那么如何在不创建单独的程序或使用 Visual Studio 内联汇编的情况下在更大的程序中使用少量的汇编代码呢?

0 投票
3 回答
3867 浏览

php - 我可以使用私有实例方法作为回调吗?

我的特定场景涉及在私有方法中使用正则表达式进行一些文本转换。私有方法调用 preg_replace_callback,但似乎回调需要在对象上公开,所以我被困在脱离私有世界并公开实现细节时,我宁愿不这样做。

所以,简而言之:我可以使用实例方法作为回调而不丢失封装吗?

谢谢。

0 投票
4 回答
3352 浏览

c# - C#:如何巧妙地为桌面应用程序设计 GUI 并考虑封装

我正在开发一个具有相当大的 MainForm 的桌面应用程序。在不同级别的多个容器中有很多控件(SplitContainers、TabPages、Panels)。

现在我想通过将负责数据绑定和清除控件或执行用户交互的所有控制器代码分离到单独的控制器类中来重构这个类。

[编辑]

目的

此应用程序的目的是跟踪订单(称为 Job)及其位置(称为 Jobitem)。每个 Job 都与一个客户相关,每个 Jobitem 都与一个 Article 相关(Jobitem 包含特定于其物品制造过程的信息,因此它包裹着该物品)。Job、Jobitem、Customer 和 Article 具有由 PropertyManager 类管理的动态属性(基本键/值对)。

建筑学

我的应用程序分为 2 个主要项目: 核心包含 3 个 LinqToSQL DataContext 类中的数据模型:

  • ArticleManagement
  • JobManagement
  • PropertyManagement

对于每个 DataContext 类,都有一个XyzManager类将集合中的 LinqToSQL 对象提供给 GUI,封装了 LinqToSQL 数据源。它还处理对其相应 DataContext 类型的创建、删除和修改。

然后我有一个 GUI 项目,自然包含一个主窗体和一些附加窗体,如选项等。截至目前,我的 GUI 项目包含对每个 XyzManager 类的引用,并通过 Manager 类获取和设置数据作为用户交互决定,包含所有控制逻辑。

我已将大部分独立逻辑放入主表单类之外的静态实用程序类中,但我猜这不是理想的方法。

[/编辑]

这是我的第一个更大的桌面应用程序,我很难封装 GUI。截至目前,所有负责处理用户交互的控制器代码都位于 MainForm 类中。

我知道 MVC 模式,但我不确定如何使用我当前的设计将它应用到 C# WinForm 上。

仅我的自定义代码就有2400多行代码,不计入表单自动生成的代码,呈上升趋势。我想重构这个,但我不知道如何以更优雅的方式解决这个问题。

0 投票
2 回答
592 浏览

vb.net - 有没有办法让一个值只能被嵌套类 VB.NET 的父级访问?

总的来说,按照OOP范式,我对封装的理解基本上是这样说的:

  1. 如果成员是私有的,则只能由类访问。
  2. 如果成员受保护,则只能由基类和任何派生类访问。
  3. 如果成员是公开的,则任何人都可以访问它。

如果我有一个嵌套类,我可以声明一个属性只能对该类及其嵌套的父类访问吗?例如:

在示例中,如果这些成员是 Private 或 Protected,我无法从 ContainerClass 的实例直接访问 myNestedObject.myInt 或 myNestedObject.myDbl。但是假设我不想让它们公开,因为那样它们就太暴露了:它们可以从任何地方更改,而不仅仅是在 ContainerClass 对象中。将它们声明为 Friend 仍然太弱,因为这将允许它们在应用程序中的任何位置进行更改。

有什么办法可以完成我在这里的目标吗?如果没有,谁能想到一种更明智的方法来实现这样的目标?

0 投票
6 回答
2547 浏览

java - Java中集合类的继承和封装

假设我有以下类型的数据:

现在我需要记住每个客户何时连接到每个服务。
我会做这个结构:

或者,为了能够通过 id 进行搜索,而不必编写所有 equal() 和 hashCode():

现在我可以通过以下方式访问 LastConnection 数据

所有这些看起来都很难看,尤其是我必须将它作为参数传递给数十个期望 LastConnections 映射的方法,所以我正在考虑创建自己的类,它看起来像这样:

好的,我已经知道继承是 3v1l,所以让我们尝试组合:

问题是我不确定尊重 SOLID 原则和所有最佳实践的最佳方法是什么。创建除了扩展已经存在的集合之外什么都不做的类似乎是不必要地增加实体,但会使我的代码更清晰(特别是当有下一个级别时 - 例如按月划分的 AllConnections 地图等)。有什么方向吗?

0 投票
4 回答
4072 浏览

c# - 您多久看到一次滥用 C# 速记 getter/setter 的情况?

在 C# 中,您可以以比其他语言更简单的方式创建 getter/setter:

这将创建一个您无法直接寻址的内部私有变量,并使用外部属性“FooBar”直接访问它。

我的问题是 - 你多久看到一次这种滥用?似乎它很有可能经常违反封装最佳实践。不要误会我的意思,我会酌情使用它,并将它的部分变体用于只读只写类型的属性,但是您代码库中其他作者对它的不愉快经历是什么?

澄清:滥用的预期定义确实是在私有变量合适时创建这样的属性。

0 投票
11 回答
1000 浏览

c++ - C++ 封装技术

我正在尝试正确封装一个 A 类,它只能由 B 类操作。

但是,我想从 B 类继承。

拥有朋友 B 是行不通的——友谊不是遗传的。

完成我想要的事情的普遍接受的方式是什么,或者我犯了错误?

为了给你更多的色彩,A 类代表一个复杂系统的状态。它只能由 B 修改,这些操作可用于更改 A 类的状态。

0 投票
6 回答
205 浏览

oop - 正确应用访问修饰符

我是一名学生,正在寻找可以帮助我进一步了解如何在编写成员/类型时正确地将访问修饰符应用于成员/类型的资源。

我知道(在 C# 中)设置了哪些限制访问修饰符,如私有、公共、受保护等。当我编写自己的小项目时,我倾向于将所有内容都公开。我确信这是一种绝对可怕的做法,因为它只是将封装扔出窗外。我只是不知道何时使用内部与私人之类的东西是正确的。

有没有人有任何好的资源来帮助我理解访问修饰符的正确使用?

0 投票
4 回答
318 浏览

c++ - 如何/应该隐藏 C++ 静态成员变量和函数?

m_MAX 和 ask() 由 run() 使用,否则不应公开。如何/应该如何做到这一点?

0 投票
8 回答
3034 浏览

c# - TDD、DDD 和封装

在遵循我工作场所的“架构师”传下来的不良做法并认为必须有更好的方法之后,我最近一直在阅读有关 TDD 和 DDD 的内容,我认为这些原则和做法将是一个非常适合我们编写的软件的复杂性。

但是,我见过的许多 TDD 示例调用域对象上的方法,然后测试对象的属性以确保行为正确执行。

另一方面,业内几位受人尊敬的人(Greg Young 在他关于 CQRS 的演讲中最引人注目)主张通过删除所有“getter”来完全封装每个域对象。

因此,我的问题是:如果禁止检索其状态,如何测试域对象的功能?

我相信我缺少一些基本的东西,所以请随时称我为白痴并启发我 - 任何指导将不胜感激。