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

unreal-engine4 - 使用组合而不是继承会导致重复代码?

为了制作最好的武器系统(目前在 UE4 中工作),我一直在将我的所有代码移动到组件中。

这种方法的问题在于,大多数触发组件最终共享了它们实现“触发”行为的很大一部分,我理解这不是很好。这导致我将很多行为转移到基类中,在本例中是触发组件,这破坏了组合模式给我带来的好处

你们将如何使用没有代码重复的组合来实现武器系统?我到底做错了什么让组件共享这么多的实现代码?

另外,我可能在这篇文章中没有说清楚,但这是系统的第二次修订,第一次是使用组件的接口,但是代码的重复使我不得不将其中的一些移动到基类中. 尽管如此,还是很糟糕。

0 投票
1 回答
50 浏览

c++ - C++ 为我的新对象包装子对象数组的正确方法?

例如,我的对象看起来像这样,我想创建一个对象,该对象将使用subOBJs传入的数组执行某些操作。

假设传入的数组有效,那么设计我的构造函数subOBJs是否正确。

0 投票
1 回答
67 浏览

python - OOP 项目 - 初学者 - 寻找反馈

嗨,我刚刚完成了一个非常基本的航空公司预订系统。想要一些反馈,请让我知道你们的想法,如果我混淆了信息或传递了我不应该传递的参数,或者事情没有意义

航空公司等级:处理预订和退款
乘客:有座位分配,并支付机票余额
座位:
头等舱和长途汽车
飞机:
一个字典对象持有座位,乘客作为值传递给这些座位

这是我的代码:

在下面运行:(将输出我对飞机的设想以及如何将座位分配给乘客等)

请让我知道更好的方法或更好的界面等。我会慢慢增加更多的复杂性,但我的主要目标是让航空公司能够在更新飞机容量的同时预订并将乘客安排在飞机上并从座位上退款在这些变化中。

将为每家航空公司添加多架飞机,这无疑会改变某些课程的结构,但现在让我知道我所拥有的是否允许基本的预订和退款操作有效地工作,以及课程设置是否正确或有哪些改进可以制作。

0 投票
1 回答
248 浏览

typescript - TypeScript :: 继承问题

我有一个实现一堆方法的基类,每个方法都返回一个对对象副本的新引用以允许链接。

另外,我有一个派生类,只暴露了基类的一些方法,也暴露了它自己的方法。所有这些方法都应该返回对派生类对象的引用以允许链接。

在这种情况下,我遇到了问题。被覆盖的方法返回的对象仍然是基类的一个实例,不管它是否被强制转换为派生类,派生类中第一次定义的方法都没有被定义。

我想到了一种解决方法,它并不优雅。代替继承,我可以使用组合在派生类对象中包含基类对象的实例。但是,为此,我需要一个额外的构造函数来接受一个基类对象,该对象应该可以在类外部访问,并像funcA(): Derived { return new Derived(this.baseObject) }.

有没有更优雅的方法来解决这个问题?

0 投票
1 回答
131 浏览

c# - 这种在 C# 中比较两个对象的实现会很快工作吗?

我创建了一个比较两个对象的实现。

IEquatable 接口不适合我,因为我需要一个不匹配的特定属性和值的列表。

这样的实施会很快奏效吗?或者也许有一些我不知道的现成解决方案?

这是一个正在比较的对象的示例

这是用于获取属性名称的附加扩展

这是用于比较的基类

这是继承的类进行比较

这是一个使用示例

0 投票
1 回答
175 浏览

python - 如果这是可取的,那么在其中一个组件内访问类组合的正确方法是什么?

假设我有这两个类:

每一个都Leaf属于一个Branch。无论ABranch是否有叶子,它都会继续存在,但如果Leaf没有 a,a 就无法有意义地存在Branch(抛开现实生活中的逻辑不谈)。这意味着我可以通过属性轻松地Leaf从 a中获取每一个。如果我正确理解了组合,a是组合并且每个in都是它的组成部分之一?BranchBranch.leavesBranchLeafBranch.leaves

但是,Leaf实际上没有人知道Branch它属于哪个。所以,我不能让它打印“这片叶子是橙色的,属于分支#14 ”。每当我初始化一个新实例时,我可以添加一个Leaf.branch属性并传递它Leaf,看看 aBranch必须已经存在才能发生,但这对我来说似乎非常错误,因为它看起来像是Branch属于Leaf.

问题是:在我的例子中,我描述的我不能做的最pythonic和正确的方法是什么?我认为的感觉很不对,其实一点也不坏吗?或者更确切地说,这个问题是由糟糕的设计引起的,我应该从另一个角度来看这个问题吗?提前致谢。