问题标签 [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.
swift - Swift 继承/对象结构
在 XCode 中将以下复杂对象层次结构定义到 Playground 中:
创建这些类的实例会产生令人困惑的结果:
结果表明bar
和baz
是由其父实例组成的对象,而不是从它们继承。
这只是 XCode 呈现这些对象的方式,还是它们的结构不像我所期望的那样?
c++ - 唯一指针和 const 正确性
我没想到这段代码会编译:
如果ptr是一个原始的 C 指针,我会同意的。但由于我使用的是智能指针,我无法理解这背后的基本原理是什么。
我使用唯一指针来表达所有权,在面向对象编程中,这可以看作是一个对象组合(“部分”关系)。
例如:
或者:
如果 Car 类的实例是常量,为什么 Engine 也不应该是常量?如果它是一个共享指针,我完全可以接受。
有没有可以反映我想要的行为的智能指针?
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 关键字,但我想如果没有其他解决方案我可以摆脱它)。
python - Python中对象组合的switch语句
我在设计适用于对象组合的(Python)开关模式时遇到问题。更具体地说,我想创建一个将“entity_id”作为参数(+其他相关参数)的函数,为它创建一个对象和匹配的组件(可能使用附加参数)。这是一个玩具示例
我想要类似的东西:
使用 for 循环和 if 语句很容易生成上述内容,但是有更好的方法吗?应该很容易
- 添加新类型的实体(香蕉、钉子、鲨鱼等),
- 添加新的组件(例如可食用的,它告诉实体是否是可食用的以及它包含多少卡路里),
无需在太多地方更改代码。请注意,组件有时需要额外的参数(在函数的输入中给出)。
我已经看到 switch 语句被字典取代,但我的实现(如下)结果很糟糕。添加另一个组件需要向每个实体函数添加代码!
我也不知道如何以优雅的方式将参数传递给组件。附加参数在此实现中不起作用。也就是说,如果我想创建一个苹果的实体(一批)(假设数量 = 5),我将不得不修改每种类型的实体函数以接受数量参数(即使它不使用它),或者修改创建实体后的数量(这并不聪明,因为如果使用 if 语句,那么还不如使用 for loop+if 语句)。
r - R中的ReferenceClasses和对象组合
我想在 R 中做基本的对象组合,我正面临这个简单的问题。我有 2 个 R5 类,“Lambda”和“Composition”。
“组合”类具有“Lambda”类的属性。无法创建类“组合”:".Object$initialize(...) : argument "lambda" is missing, with no default"
如果 lambda 在初始化方法中有默认值,则它可以工作:initialize = function(lambda=1){
但我不希望那样。
谢谢你的帮助。
c++ - 是否可以使用在运行时确定对象选择的 C++ 对象组合?
假设我有一个班级面孔。我希望使用合成来构建面部。Face 有眼睛,所以我可以创建一个 Eyes 类并使用合成将眼睛添加到 Face。
但是,如果我将眼睛子类化怎么办,例如
? (假设接口都是相同的。)
是否可以在运行时组合 Face,比如根据提供给构造函数的某些参数,Face 会得到 BlueEyes 或 BrownEyes?
inheritance - 在不能使用多态性时避免使用 instanceof
我有多个从XSD
文件生成的类XJC
. 这些类是作为构建过程的一部分自动生成的,因此无法修改。这些类共享一个共同的结构。我有需要使用这些类的客户端代码。但是,某些客户端逻辑对于所有类都是相同的。因此,我不想为每个要支持的类复制客户端代码。在这种情况下想到的流行解决方案是使用接口/继承,以便客户端代码只处理超类/接口而不是特定类。但是,在这种情况下,这种解决方案是不可能的,因为无法修改类。因此,我想正确的方向是使用组合而不是继承。但是,如果使用组合,组合类将需要处理每个特定的类,所以我最终可能会得到很多if (obj instanceof Type)
分别处理每个案件。
我考虑过使用一种方法,其中实例被包装,instanceof 逻辑位于包装类而不是客户端代码中。
在这种情况下是否需要使用instanceof
?如果是,推荐的方法是什么?
编辑:
反射也可以用来避免多重instanceof
。按照给定的示例,如果在每个类(和)getId()
中都定义了该方法A
,则可能出现以下情况:B
C
我忘了提到我对 XSD 没有任何控制权。