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

python - 使用继承重构一个巨大的 Python 类来做组合

pygame几年前我做了一个游戏。它有效,但不是最好的编码风格,而且有很多经典的代码味道。我最近把它捡回来了,这次我试图用更多的纪律来重构它。

一个很大的代码异味是我有一个巨大的类 GameObject,它继承自pygame.sprite.DirtySprite它有很多与以下相关的代码:

  • 移动精灵的各种方式
  • 动画精灵的各种方法
  • 爆炸精灵的各种方法
  • 等等

我认为精灵的行为方式越疯狂,代码重复越多,更改变得越来越困难。因此,我开始将功能分解为许多较小的类,然后在创建对象时将它们传递进去:

随着我将越来越多的代码分解到这些帮助类中,代码肯定更好、更灵活并且重复更少。但是,对于每种类型的辅助类,参数的数量越来越多。创建精灵变成了一件苦差事,而且代码很丑陋。所以,在另一个重构过程中,我创建了一堆非常小的类来进行组合:

我更喜欢这种方法。这是一种常见的方法吗?在小类中分解所有逻辑似乎具有相同的好处,但是创建对象要干净得多。

但是,这种方法不是动态的。例如,我不能在运行时决定新的混搭。然而,这并不是我真正在做的事情。虽然我做了很多混搭,但使用类语句静态定义它们似乎没问题。

当谈到未来的可维护性和重用性时,我是否遗漏了什么?我听说组合比继承好,但这感觉就像我在使用继承来做组合——所以我觉得这样还可以。

我应该使用不同的模式吗?

0 投票
1 回答
55 浏览

java - 局部参考变量是否也称为组合?

Java_Composition:一个类可以引用其他类的对象作为成员。

问题?:如果它是局部变量,那应该是类的实例变量以将其称为组合还是也称为组合?

演示:第 5 行和第 6 行的局部引用类型变量的前一个问题

0 投票
2 回答
1919 浏览

python - python中组合的实际用法

我一直在阅读有关 python 中的组合的内容,并且在 stackoverlow 上关注了一些文章和答案之后,我想我能够了解它是什么以及它是如何实现的。但我无法找到答案的一个问题是为什么要作曲?(不与继承的利益进行比较)。这是我从这里得到的一个例子:

我想用一个现实的例子来理解,通过分离两个相关的类会受益(以及究竟有什么好处?

0 投票
1 回答
230 浏览

python - 我可以在 Python 中通过组合委托完全模仿继承行为吗?

在 python 中,我想通过组合来模拟以下行为:

输出是:

换句话说,我希望能够创建一个类来复制现有类的行为,但某些方法除外。但是,重要的是,一旦我的程序进入现有类的方法,它就会返回到新类,以防我覆盖了该函数。但是,对于以下代码,情况并非如此:

不是从 Object3 的 method1 调用来自 Object4 的 method2(我想要的行为),而是调用来自 Object3 的 method2(并引发异常)。有什么方法可以在不更改 Object3 的情况下实现我想要的行为?

0 投票
0 回答
89 浏览

javascript - 在javascript中学习对象组合

我仍然试图在我的脑海中了解 javascript 中的对象基础,这似乎与经典范式完全不同。我写了一个玩具示例来获取天气数据,代码如下:

我想知道我是否朝着正确的方向前进?如果不是,在思维过程和代码方面需要什么改进?

PS:我知道我可以通过导出函数轻松编写上述 api,但这是学习对象组合的尝试。

0 投票
0 回答
92 浏览

c++ - 重载组合对象实例化和使用问题

我对带有重载构造函数的 C++ 组合感到有些困惑。我已经在这里这里这里阅读了这些其他文章,但仍然觉得我的问题与那些有点不同。第一个是最有帮助的,我实现了那里的建议,但对如何使用组合对象有一些疑问。

以下是一些代码片段:

所以我的意图是在 habs 类中有两个 tempsensor 类型的变量,并在实例化这些对象时使用 temp 类中的重载构造函数。然后,诸如 main.cpp 中的线程之类的线程将在互斥锁未锁定的情况下不断更新温度传感器。

我希望有人能向我解释为什么我必须在这个 fassion 中调用公共变量: habs_obj.intemp(in).setTemp();而不是这个: habs_obj.extemp.setTemp();

我也这样做正确吗?还有其他方法吗?我阅读了有关复制构造函数的信息,但我认为这不是我需要做的,但我也可能错了。

提前致谢!

0 投票
0 回答
76 浏览

python - 在 Python 3 中确定对象的容器类

Class1实例化Class2如下。Class2还包含另一个变量,例如:

我想创建一个可以读取或写入的方法myDef()。如何从内部访问访问?Class1aamyDef()a

0 投票
1 回答
137 浏览

python - python对象组合和多处理

如果我使用getattr实现对象组合并将对象传递到一个新进程,我会从getattr得到一个 RecursionError 。这是一个例子:

输出是这样的:

为什么 Foo 找不到 _bar 属性而不得不求助于getattr

0 投票
1 回答
111 浏览

javascript - JS 对象组合通过添加原型函数的函数

我一直在摆弄通过 Javascript(特别是 NodeJS)中的组合来构建对象,并且我想出了一种构建对象的方法,但我需要知道这是否是一种疯狂的做事方式。

简单的版本是这样的:我有两个对象,都有两个属性,一个包含一个数字,另一个包含一个字符串。

文件:Cat.js

文件:Car.js

我现在想为这两个对象中的所有属性添加一个基本的 getter/setter 函数。我还希望能够检查传递给这些设置器的值是否与类型匹配。我没有为每个属性编写四个原型函数,而是执行了以下操作:

文件:StringProperty.js

文件:Cat.js

文件:Car.js

现在这两个对象都具备了它们需要的所有基本功能,并且我能够用最少的代码来完成它,并且每当我需要添加另一个字符串属性时,我必须添加的代码量将是最少的。

我疯了吗?这是一件疯狂的事情吗/有没有更好的方法来做到这一点?

编辑:我试图用这个来完成的是我正在处理的应用程序有 100 多个对象,每个对象都有 10 多个属性,并且必须为这些属性中的每一个都编写几乎完全相同的代码的想法设置得不好与我一起。我希望能够有一些代码来添加属性并创建 getter/setter 函数(添加用于属性限制分歧的选项,例如字符串属性的不同长度限制)。我已经查看了多个通过 JS 中的组合构建对象的示例,但我没有尝试过适合 NodeJS 模块结构。

0 投票
0 回答
203 浏览

javascript - 对象组合模式示例

我正在学习 JS,并且遇到了一篇关于 JS 中的对象组合模式的有趣文章。我想知道这段代码:

类中函数的目的是courseObjects什么DwarfWizard

即使我注释掉该函数,我仍然得到相同的结果,所以我想知道它的目的是什么?