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

c# - 组合代替继承

我正在开发一个带有 MVVM 模式的 WPF,.NET Framework 4.6.1。和 C#。

我的问题不是关于 WPF,而是关于使用组合而不是继承这两个类:

和:

MainViewModel继承自ObservableObject,我不想使用继承。

我可以做这个:

但是当我使用组合时,public event PropertyChangedEventHandler PropertyChanged;它似乎是一个问题。ObservableObject问题在于 XAML 链接时。

我可以在这里使用组合还是必须使用继承?

0 投票
1 回答
300 浏览

go - 在golang的继承方法中使对象可访问

我正在尝试在 golang 中实现继承。下面是例子:

如果 A 被 B 继承,是否可以在 A 的函数中获取 B 的实例?

0 投票
1 回答
1147 浏览

java - 多重继承,在 Java 中使用接口与使用组合

基于一些stackoverflow帖子:

Java 不支持多重继承。

我能想到一些解决方法:

第一个是组合:创建一个将这两个活动作为字段的类。

二是使用接口。// 这是我的问题

我尝试通过接口或组合构造一个可以有AA类方法和BB类方法的类。我读了很多关于继承与组合的文章,但我的问题是接口与组合(哪个更好)。如果我想在单个类 Preference 中使用这两个类方法,

显然,Java 不支持多重继承,我们需要使用接口或组合。

界面:

首先构造这两个类对应的接口:

然后构造一个实现这两个接口的 Preference 类,并在该类中声明两个类对象:

组合: 直接构造一个有两个字段对应两个类对象的类,以便使用它们的方法。

因此,在Preference类中,通过使用其他接口或组合方法,我可以使用派生自AA类和BB类的id()方法和name()方法。

问题:为什么我们应该使用界面,因为组合更简单更好?我们有什么理由应该使用接口而不是组合?换句话说,如何使用java接口在一个类中获取两个类方法,我的方法是正确的方法吗?

0 投票
4 回答
741 浏览

c++ - 组合对象初始化

这是一个有点宽泛的问题,似乎没有一个真正的答案。

很长一段时间以来,我一直对组合对象的初始化感到困惑。我被正式教导为所有成员数据提供 getter 和 setter,并支持指向对象的原始指针而不是自动对象 - 这似乎与 Stack Overflow 上许多人(​​例如这篇受欢迎的帖子)的建议形成鲜明对比。

那么,我应该如何初始化对象组合对象呢?

这是我尝试使用在学校学到的东西进行初始化的方式:

这个设计很吸引人,因为它是可读的(对我来说)。BigObject具有指向其成员对象的指针的事实使得初始化obj1obj2初始化之后成为可能。然而,动态内存可能会使程序在未来变得更加复杂和混乱,因此内存泄漏的时机已经成熟。此外,getter 和 setter 的使用使类变得混乱,并且还可能使成员数据太容易访问和改变。

这实际上是不好的做法吗?我经常发现需要将成员对象与其所有者分开初始化的时候,这使得自动对象没有吸引力。此外,我考虑过让较大的对象构造它们自己的成员对象。从安全的角度来看,这似乎更有意义,但从对象责任的角度来看,意义不大。

0 投票
1 回答
34 浏览

c++ - 我想了解 windows(new rectangle(30, 20)) 在以下代码中是如何工作的

所以我知道newdelete隐式调用构造函数,但我无法理解window(new rectangle (30, 20))它是如何工作的。

0 投票
2 回答
117 浏览

c++ - 对象定义后调用构造函数

如果这个问题已经被问过,我很抱歉。

这是一个简单的代码,用于演示 c++ 中嵌套类的工作。但是,在类中,即使之前已经定义second了对象,我也可以使用类的构造函数在其上调用构造函数。如何在已定义的类实例上调用构造函数?fsecond

0 投票
0 回答
1050 浏览

python - 使用 __getattr__ 方法作为组合模式是否是好的 Python 实践?

首先-如果这是重复的,请接受我的道歉-我感觉我以前看过某种类似的讨论,但我真的找不到。

我的问题是关于 Python 中的对象组合,它应该看起来像是从复合类的每个次要中继承的。用例是多个对象实例共享一个共同的属性核心及其值(而不仅仅是一个共同的结构,这将是一个经典的继承案例)。

我可以用一个简单的属性来做到这一点,即让每个类都有一个名为“shared_attributes”的属性,它本身就是一个存储所有值的类:

但这需要我通过属性访问每个共享属性class.core_attr,这是我不想要的(出于多种原因,其中一个原因是这将需要大量重写大部分代码)。

因此,我想使用依赖于 Python 内置__getattr__对象方法的复合模式,例如:

它应该打印以下内容:

这种模式完全符合我的需求,但它有一些东西想让我确定它......

编辑:(回应一些评论)这个模式必须共享共享类中的所有属性(给定以前的对象):

第二次编辑:我已经使用这种模式几个星期了,效果很好。但是,我仍然希望进行一些讨论,因为我想从现在开始将此模式包含在我的标准工具包中:-)

所以现在我给你的问题很简单:这是一个好习惯吗?这种特殊的 Python 模式有什么缺点吗?我应该注意这里的一些危险吗?

0 投票
1 回答
552 浏览

c# - C#多抽象类组合设计

我正在 Monogame 中准备一个小游戏引擎,在那里我想要由 DrawableObject 和 ClickHandler 组成的类似 gameObject 的东西(即:

问题是 - C# 不支持多重继承,我需要使用接口。我已经制作了 DrawableObject 和 ClickHandler 抽象类,因此它们可以已经实现了一些功能。

有什么提示我可以重新设计它以实现它吗?我不想将整个实现移动到我将其作为接口派生的每个类。

0 投票
1 回答
699 浏览

javascript - 为什么要使用 this.props.children?

还有其他类似的问题已经“回答”了,但答案并不完整,也没有解决真正的问题。

这实际上是一个带有子问题的两部分。

我已阅读文档,请不要只引用文档。

这个问题的动机:

我提出这个问题的原因是,在提出这个问题时,文档给出了一个非常非常笼统的例子,说明如何使用它以及这样做时使用的方法,但这个例子并没有给我们真正的上下文。它不是可用的 IRL。该示例可以在整个应用程序中重复使用,无需押韵、理由或理智。真的可以吗?

有人告诉我你会使用 this.props.children,“当你不知道会通过什么孩子时”。但从技术上讲,您永远不会真正知道需要更多或不同孩子的变化可能会发生。所以这很模棱两可。

我还发现了 Jake Trent 的一篇有趣的文章:http: //jaketrent.com/post/send-props-to-children-react/

本文展示了如何根据组件的类型添加/删除传递给这些“未知子项”的道具,这很简洁(当您构建第三方组件时可能是一个好主意)。

到目前为止,我最大的收获是,当您指定 this.props.children 时,您将孩子的权力授予父母,这是一个很好的理由还是只是一个副产品?(例如:proptypes,实际类型检查......)但是,

请举例!

0 投票
2 回答
561 浏览

c++ - 可变参数模板函子调用

所以我一直在尝试使用可变参数模板从更方便的子类型中组合对象,但我无法让它完全按照我的意愿去做。

这不是有效的语法,所以就是这样。

理想情况下,我希望能够使用这样的东西

在这种情况下应该输出“AB”,并且通常适合组合行为。