问题标签 [composition]

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

composition - 组合与委托

在实现方面是否有任何区别,因为组合设计与委托不同。例如,下面的代码似乎在进行委托,因为用户不使用 b 就无法访问组合对象(即“a”)。因此,用户需要调用 b 类的接口,然后“b 类”调用“a 类”的适当接口使其委托。这有意义吗?

0 投票
6 回答
445 浏览

oop - 纯组合会破坏 OOP 概念吗?

1)房间没有房子就不能存在,房子“有”房间。(组合)
2)另一种为房间着色的方法是在 House 中有一个方法,该方法将调用 Room 中的 ColorRoom 方法,但这更多的是委托。(我想避免这种情况)

我看到的唯一方法是上面的方法,但看起来返回对私有成员的引用正在破坏 OOP。这是一个好的设计吗?

0 投票
2 回答
162 浏览

.net - 我可以将工作流作为活动添加到另一个工作流吗?

我想在 WF (3.5) 中创建工作流组合。是否可以直接将工作流用作另一个工作流中的活动?我不想使用 InvokeWorkFlowActivity,因为它异步执行工作流。

0 投票
2 回答
278 浏览

c++ - 组成您继承自的类的对象?

我有一个类 Parameter,其目的是表示某个参数可以包含的可能值(实现两个关键方法,GetNumValues() 和 GetValue(int index))。

通常一个逻辑参数(参数值是位标志)最好由 Parameter 类的 2 个或多个实例表示(即一个 Parameter 可以是 1 或 2,一个 Parameter than 可以是 4 或 8,而不是一个 Parameter than can为 5、6、9 或 10)。为了解决这个问题,我想创建一个包含参数的 CompositeParameter 类,并将根据它所拥有的参数组合实现 GetNumValues() 和 GetValue() 函数。

并且由于 CompositeParameter 正在组合参数以使它们充当单个参数,因此“CompositeParameter 是一个参数”关系是有意义的。所以我发现自己的情况是,我有一个类,它组成了它继承自的类的对象,这似乎不正确。但与此同时,我不明白为什么更高级别的代码不能将 CompositeParameters 和 Parameters 完全相同。

我能想到的唯一选择是让 CompositeParameter 简单地组合参数,而更高级别的代码只会处理 CompositeParameters。但是,这有点浪费 b/c,一般情况下 CompositeParameters 只包含一个参数。

想法?

0 投票
6 回答
8512 浏览

scala - 特征继承和自我类型注释之间的区别

在 Scala 中,我已经看到了这些构造

用于实现类似的事情(即S必须在创建实例之前定义抽象方法)。他们之间有什么区别?你为什么要使用一个而不是另一个?

0 投票
5 回答
5258 浏览

oop - 有什么组合不能实现继承可以吗?

组合和继承。

我知道它们都是在适当时选择的工具,并且上下文对于在组合和继承之间进行选择非常重要。然而,关于每种情况的适当上下文的讨论通常有点模糊。这让我开始考虑继承和多态是传统 OOP 的不同方面有多么明显。

多态性允许人们平等地指定“is-a”关系以及继承。特别是,从基类继承隐含地在该类与其子类之间创建了多态关系。然而,虽然多态可以使用纯接口来实现,但继承通过同时传递实现细节使多态关系复杂化。通过这种方式,继承与纯多态完全不同。

作为一种工具,继承为程序员提供了不同于多态性(通过纯接口)的方式,它简化了在琐碎情况下的实现重用. 然而,在大多数情况下,超类的实现细节与子类的要求存在微妙的冲突。这就是我们有“覆盖”和“成员隐藏”的原因。在这些情况下,继承提供的实现重用是通过验证状态更改和跨级联代码级别的执行路径的额外努力来购买的:子类的完整“扁平化”实现细节分布在多个类之间,这通常意味着多个文件,其中只有部分适用于所讨论的子类。在处理继承时,查看该层次结构是绝对必要的,因为如果不查看超类的代码,就无法知道哪些未覆盖的细节会影响您的状态或转移您的执行。

相比之下,组合的独占使用保证您将看到哪些状态可以被显式实例化的对象修改,这些对象的方法由您自行决定调用。仍然没有实现真正扁平化的实现(实际上甚至是不可取的,因为结构化编程的好处是实现细节的封装和抽象)但是您仍然可以重用代码,并且您只需要查看一个地方当代码行为不端时。

为了在实践中测试这些想法,避免传统的继承以结合纯基于接口的多态性和对象组合,我想知道,

有什么对象组合和接口不能实现继承可以吗?

编辑

在迄今为止的答复中,ewernli 认为没有一种技术可以用于技术专长,而另一种则没有。他后来提到了每种技术所固有的不同模式和设计方法。这是有道理的。但是,该建议使我通过询问排他使用组合和接口来代替传统继承是否会禁止使用任何主要设计模式来完善我的问题?如果是这样,在我的情况下没有等效的模式吗?

0 投票
6 回答
291 浏览

c# - C# 字典组合

假设我有一个 A 的任意列表

有没有一种简单的方法可以从 theList 编写字典?(类似于以下内容)

我不想写下面的代码:

0 投票
1 回答
2775 浏览

java - Java GC:提升的顶级对象类(按大小)?

请让我知道在每次年轻 GC 事件之后确定提升到老年代的年轻代内存组成的最佳方法是什么?

理想情况下,我想知道负责的类名,例如,对于每个“年轻一代->老一代”提升块中 80% 的堆;

例子:我有600M年轻一代,每个任期提升6M;我想知道这个 6M 是由哪些物体组成的。

谢谢你。

0 投票
4 回答
4729 浏览

python - python:继承或组合

假设我有class,它使用 的某些功能dict。我曾经在内部合成一个dict对象并提供一些来自外部的访问,但最近考虑简单地继承dict和添加一些我可能需要的属性和方法。这是一个好方法,还是我应该坚持作文?

0 投票
17 回答
243820 浏览

java - 继承与组合的区别

组合和继承是一样的吗?如果我想实现组合模式,我该如何在 Java 中做到这一点?