问题标签 [object-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 投票
2 回答
523 浏览

swift - Swift 继承/对象结构

在 XCode 中将以下复杂对象层次结构定义到 Playground 中:

创建这些类的实例会产生令人困惑的结果:

结果表明barbaz是由其父实例组成的对象,而不是从它们继承。

这只是 XCode 呈现这些对象的方式,还是它们的结构不像我所期望的那样?

0 投票
4 回答
131 浏览

c++ - 需要多重继承吗?

我有如下情况:

我在这里考虑多重继承。即, makemixed派生自BC。但是有一些已知的问题(例如, 钻石问题)。

另一种解决方案可能是组合。

但是什么是正确的解决方案,请指教:)

提前致谢!

0 投票
1 回答
492 浏览

arrays - Enterprise Architect 代码生成 - 组合 - 成员变量作为数组

我有这个类图 类图组成

和多重性 1 : 0..*

此模型生成的代码:

我想将成员变量TestKlasseA作为数组 ( m_TestKlasseB)

我需要改变什么?

--

问候提高者

0 投票
1 回答
8482 浏览

c++ - 唯一指针和 const 正确性

我没想到这段代码会编译:

如果ptr是一个原始的 C 指针,我会同意的。但由于我使用的是智能指针,我无法理解这背后的基本原理是什么。

我使用唯一指针来表达所有权,在面向对象编程中,这可以看作是一个对象组合(“部分”关系)。

例如:

或者:

如果 Car 类的实例是常量,为什么 Engine 也不应该是常量?如果它是一个共享指针,我完全可以接受。

有没有可以反映我想要的行为的智能指针?

0 投票
1 回答
374 浏览

c++ - 使用 unordered_map 值初始化指向向量的指针时出错

我有一个名为 street_map 的类,其中包含一个带有 int 键和 type 值的地图vector<edge>。在其中一种方法中,我试图初始化一个指向该vector<edge>值的指针以获取其内容。

该行vector<edge>* v = &(it->second);给出了错误:

Cannot initialize a variable of type 'vector<edge> *' with an rvalue of type 'const std::__1::vector<edge, std::__1::allocator<edge> > *'

这是边缘类:

我想知道这是否是因为 const 关键字以及如果是因为 const 关键字如何解决这个问题(我应该保留 const 关键字,但我想如果没有其他解决方案我可以摆脱它)。

0 投票
1 回答
146 浏览

python - Python中对象组合的switch语句

我在设计适用于对象组合的(Python)开关模式时遇到问题。更具体地说,我想创建一个将“entity_id”作为参数(+其他相关参数)的函数,为它创建一个对象和匹配的组件(可能使用附加参数)。这是一个玩具示例

我想要类似的东西:

使用 for 循环和 if 语句很容易生成上述内容,但是有更好的方法吗?应该很容易

  1. 添加新类型的实体(香蕉、钉子、鲨鱼等),
  2. 添加新的组件(例如可食用的,它告诉实体是否是可食用的以及它包含多少卡路里),

无需在太多地方更改代码。请注意,组件有时需要额外的参数(在函数的输入中给出)。

我已经看到 switch 语句被字典取代,但我的实现(如下)结果很糟糕。添加另一个组件需要向每个实体函数添加代码!

我也不知道如何以优雅的方式将参数传递给组件。附加参数在此实现中不起作用。也就是说,如果我想创建一个苹果的实体(一批)(假设数量 = 5),我将不得不修改每种类型的实体函数以接受数量参数(即使它不使用它),或者修改创建实体后的数量(这并不聪明,因为如果使用 if 语句,那么还不如使用 for loop+if 语句)。

0 投票
1 回答
100 浏览

r - R中的ReferenceClasses和对象组合

我想在 R 中做基本的对象组合,我正面临这个简单的问题。我有 2 个 R5 类,“Lambda”和“Composition”。
“组合”类具有“Lambda”类的属性。无法创建类“组合”:".Object$initialize(...) : argument "lambda" is missing, with no default" 如果 lambda 在初始化方法中有默认值,则它可以工作:initialize = function(lambda=1){ 但我不希望那样。

谢谢你的帮助。

0 投票
2 回答
289 浏览

c++ - 是否可以使用在运行时确定对象选择的 C++ 对象组合?

假设我有一个班级面孔。我希望使用合成来构建面部。Face 有眼睛,所以我可以创建一个 Eyes 类并使用合成将眼睛添加到 Face。

但是,如果我将眼睛子类化怎么办,例如

? (假设接口都是相同的。)

是否可以在运行时组合 Face,比如根据提供给构造函数的某些参数,Face 会得到 BlueEyes 或 BrownEyes?

0 投票
1 回答
817 浏览

c# - 如何在 MEF 2 中导出工厂和/或其方法?

我正在研究MEF 2 (Microsoft.Composition),并希望将其与我现有的代码库集成。

我当前的代码库有一个IFactory带有简单签名的接口:

我想注册我的工厂,这样如果我对工厂进行出口,它就会被注册为Func<T>工厂的T输出。所以是这样的:

将使用以下代码返回一个新Class实例和对该Create方法的引用(作为委托):Func<Class>

我确实看到了这个问题,但它似乎不适用于 MEF 2。现在各种事情都不同了,但似乎更加轻量/精简(如广告中所宣传的那样!)。

是否有可能实现我希望使用 MEF 2 做的事情?

0 投票
1 回答
166 浏览

inheritance - 在不能使用多态性时避免使用 instanceof

我有多个从XSD文件生成的类XJC. 这些类是作为构建过程的一部分自动生成的,因此无法修改。这些类共享一个共同的结构。我有需要使用这些类的客户端代码。但是,某些客户端逻辑对于所有类都是相同的。因此,我不想为每个要支持的类复制客户端代码。在这种情况下想到的流行解决方案是使用接口/继承,以便客户端代码只处理超类/接口而不是特定类。但是,在这种情况下,这种解决方案是不可能的,因为无法修改类。因此,我想正确的方向是使用组合而不是继承。但是,如果使用组合,组合类将需要处理每个特定的类,所以我最终可能会得到很多if (obj instanceof Type)分别处理每个案件。

我考虑过使用一种方法,其中实例被包装,instanceof 逻辑位于包装类而不是客户端代码中。

在这种情况下是否需要使用instanceof?如果是,推荐的方法是什么?


编辑:

反射也可以用来避免多重instanceof。按照给定的示例,如果在每个类(和)getId()中都定义了该方法A,则可能出现以下情况:BC

我忘了提到我对 XSD 没有任何控制权。