问题标签 [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 回答
275 浏览

java - 无法在 Java Swing 中应用组合而不是继承

我试图在创建 Swing 组件时采用组合而不是继承(这意味着我创建了一个不扩展任何东西的类,特别是不是 Swing 组件,例如JPanel),但我遇到了 Eclipse 的 Window Builder 插件的问题当我尝试切换到我的代码的设计视图时。

它抛出以下异常:

没有根方法

解析器找不到任何根方法(解析的入口点)。解析器从每个 GUI 工具包的已知方法开始解析。例如,对于 Swing,它从 JPanel 或 JFrame 的构造函数开始。如果当前解析的类不是 Swing 组件的子类,解析器将尝试查找 main(java.lang.String[]) 方法。如果它也不存在,则会显示此异常。通常这意味着您正在尝试解析 WindowBuilder 不支持的内容(例如,非 GUI 编译单元)。

请注意,即使 WindowBuilder 无法自动识别您的 Code Pattern,有时您仍然可以通过提供 @wbp.parser.entryPoint JavaDoc 提示来教 WindowBuilder 使用它。例如:

然后它建议我可以应用上述 JavaDoc 的方法,但是当我这样做时,它们都不会产生可见的设计。我没有创建一个main()方法,因为它在这种情况下没有任何意义。

非子类和支持JDialog类紧随其后。如果第一类子类,我可以看到设计JPanel,但我试图避免这种情况。

CustomerAddressesSection.java

JDViewCustomer.java

0 投票
2 回答
185 浏览

javascript - 为什么 Object.assign 添加到原型的构造函数?

我正在学习 Javascript 中的组合,并且想知道为什么我的代码中的 Object.assign() 将方法添加到原型的构造函数而不是对象的构造函数。我将链接下面的代码。基本上,代码是使用 Object.assign() 向 Person 对象添加两个方法(吃和走)。但是,如下图所示,控制台显示的方法属于 Person.prototype 的构造函数,而不是 Person 对象本身。我一定是想多了。任何帮助表示赞赏。谢谢!

在此处输入图像描述


在此处输入图像描述


代码

0 投票
1 回答
47 浏览

python - 如何创建在 Python 中动态更新的列表属性?

我有两个类以一对多的关系相互引用(KidToy下面的示例中)。当我分配一个新Toy的到时Kid,我也希望Kid分配到Toy

根据toys属性列表创建自定义类并重新定义方法(例如append,, )会起作用extenddelete但我想知道是否有更好的方法。

输出:

我想Buzz被分配Andy

0 投票
1 回答
121 浏览

c++ - 函数重载的顺序是什么

我对下面问题的结果有疑问。f从 main调用函数时,f(B &)尽管我重载了 int 运算符并且f(int)首先定义了,但调用会转到。

如果我注释掉该f(B &)函数,则调用将转到f(int)并打印 5。

我期待它能够f(int)发挥作用,print 5但它却相反prints 2。为什么它不去f(int)而不是f(B &). 为什么会发生这种行为,谁能解释一下?

0 投票
1 回答
66 浏览

python - 实现代表“带有标题的列表”的类的pythonic方法是什么?

我试图更好地理解 python 中的组合与继承,所以我制作了一个有希望的简单示例。

假设我想实现一个类,该类TitledList的行为类似于标准列表,但具有一个附加属性title,用于保存包含列表名称的字符串。和方法可能必须重新实现以合并标题__repr____str__但否则我想保留list. 初始化程序将接受可选的仅限关键字参数title

我可以看到创建此类的两种方法。我可以走组合路线,并定义一个具有两个属性的类,.contents(常规列表)和.title. 这大概看起来像

但是我不确定我将如何去抄袭所有的方法,list所以我不必不断地到处引用my_titled_list.contents或重新实现我使用的所有列表方法。

另一种选择是做整个互联网上每个人都说 不做 事情,并从list类继承。我想在那种情况下我会做这样的初始化程序吗?

这对我来说似乎更直接。但肯定整个互联网上的每个人都说不要扩展list是有原因的。

这里有什么优点和缺点?有没有一种简单的方法可以让组合解决方案按照我直觉想要的方式工作?继承解决方案有很多我不理解的缺点吗?我应该考虑第三种选择吗(UserList?)

0 投票
1 回答
216 浏览

c++ - C++ 中的对象组合

我正在尝试在 C++ 中实现某种对象组合。这个想法是创建一组所有数据结构,这些数据结构可以通过组合只知道基本数据结构操作的抽象类来创建。例如,可以通过将 pusher 与 popper 组合来创建堆栈,通过将 queuer 与 popper 组合来创建队列等。

问题是,尽管 Pusher、Popper 和 Queuer 只是作为抽象类,并且它们永远不会被实例化,它们必须知道数据结构内部是如何存储数据的。

目标是拥有不可知的抽象类,这些抽象类仅用于将方法定义传递给具体的数据结构类,方式如下:

你可以看到,尽管 Pusher 和 Popper 不知道元素,但 Stack 知道,这才是最重要的。但是,此代码无效且无法编译。我怎样才能写出有效的东西来达到同样的效果?

0 投票
1 回答
106 浏览

java - 如何做训练作文 - 班级的作文

我目前正在为 uni 做一个火车模拟项目。

这是我的类层次结构:

我的问题:

  • 每个教练都有一个唯一的 ID。然而,Engines 和 Trainsets 共享它们的 ID-Space(“series-name”)。“名称”由RollingStock继承,并且TrainsetEngine都具有“系列”属性。

我创建了一个类“SharedIdSpace”来实现这个功能。但我不太确定如何很好地解决这个问题(TreeMap,...,?)。

现在,我的主要问题是我必须实现以下功能:

"机车车辆可以编成火车。编组时必须遵守以下限制:

  • 必须始终在有效列车的开始或结束处设置至少一个机车/列车。
  • 组合时,必须始终考虑机车车辆在所需组合点是否具有合适的联轴器。
  • 正在组成的机车车辆尚未在另一列火车上使用。 [...]

我该如何实施?恐怕我没有有用的想法。

0 投票
4 回答
1342 浏览

python - 一个令人困惑的对象组合python代码

目前,我正在上一个关于 python 的在线速成课程,我遇到了一个令人困惑的代码。

如下图所示,是一个专门用来查出棉质polo衫数量的代码。

很明显,棉 Polo 衫的数量是 4,但代码给出了 10,即棉 Polo 衫和运动裤的数量之和,作为答案(实际上被认为是正确的)。

我的问题是,polo.Stock_by_Material 方法不应该只在实例“polo”而不是“polo”和“sweatpants”中迭代字典中的元素吗?我的意思是“马球”和“运动裤”甚至不在同一个班级,那么 polo.Stock_by_Material 方法怎么会计算两个班级的数量呢?

如果我在这里犯了一些愚蠢的错误,请原谅我。我只有 1 周的时间进入 python,没有任何编程经验。非常感谢!

0 投票
0 回答
40 浏览

javascript - 闭包/对象组合调查:为什么第一个断点只命中一次,而闭包范围内的断点被重复命中?

可以在周六下午的对象组成/关闭调查中使用一些反馈(它是否准确,是否缺少任何关键点,非关键点,您能否帮助回答剩余的问题/提供资源来这样做)。提前致谢 :)

在此处运行:https ://www.typescriptlang.org/play#code/ 或在某些打字稿调试环境中或删除所有类型并在节点中运行

问题:

  • 为什么只有在表示为时才第一次debugger/console.log('input:', input)命中,而不是在传入新值时的每次后续调用?outersetClosureScopesetClosureScope
  • 这个内存存储在作用域执行上下文和内存引用方面实际上是如何工作的?

结论:

当函数outer表示为变量时setClosureScope

  • 传递给外部函数的值作为闭包范围存储在内存中
  • 这种将数据包装在闭包中的技术/方法是: - 在对象组合中很常见 - 功能强大,因为它将数据锁定在将这些数据属性封装为成员的对象内的嵌套闭包的范围内
0 投票
2 回答
40 浏览

c++ - 用于访问容器数据成员的适当 API

我有以下课程:

该类是否应该具有用于​​直接修改say m_palettes 元素的公共成员函数,例如

,或者更“正确”,只允许通过一对API访问整个向量:s

第一个选项会更有效,因为它不需要创建数据成员的临时副本,但始终使用这种设计会使接口变得臃肿。对于类中的每个容器,它都需要“深度”的 getter 和 setter。

注意脏标志。因此,以下内容会破坏抽象: