类与接口的关联

Association between Classes and Interfaces

我对 classes 和接口之间的建模关联有疑问。据我所知,接口指定了对象可以做什么;不提供状态或功能 (When to use an interface instead of an abstract class and vice versa?)。此外,我关于 OOAD(James Rubaugh 的面向对象建模和设计)的书指出,关联描述了对象实例之间具有共同结构和共同语义的一组链接。

现在,假设我有以下实体:

1) ICar接口:定义汽车可以做的操作

2) BMW : 一个实现ICar接口的class

3)IWheel : 定义滚轮功能的接口

4) LuxuryWheel : 一个class实现了IWheel接口

现在来模拟一下BMW和LuuryWheel的关系,从设计的角度,你认为以下哪项是正确的?我已经分享了我对每个人的看法

A) 创建 ICar 和 Iwheel 之间的关联。 BMW class 可以创建 LuxuryWheel class 的具体实例。这是高度灵活的,但将汽车的功能与 Wheel 的功能结合在一起。另外,关联的定义说的是实例之间的关系。

B) 在 BMW class 和 LuxuryWheel class 之间创建关联。解决特定问题;但将宝马与豪华车轮紧密结合

C) 创建BMW class 和Iwheel 接口之间的关联。这样BMW就可以使用任何实现IWheel接口的类型了。

选项 C) 在我看来更好。请分享您的想法。

简单来说一辆汽车可以支持不同类型的电机。所以你必须考虑一个额外的 class 允许添加不同类型的电机。在这种情况下,接口或 classes 之间的关系必须通过一些额外的接口来实现。

为了获得可靠的解决方案,在 ICar 和 IWheel 接口之间创建关联。这是可能的,因为接口是类型。使用关联连接接口意味着,任何实现 ICar 接口的分类器实例必须关联到实现 IWheel 的分类器实例。您还为 car 和 wheel 定义了 abstract 类 并在它们之间建立关联。结果将是相似的。

我同意 Vladimir 的观点,既然你想借助接口对汽车和车轮建模,那么它们之间的关联(实际上是一个组合)应该在接口 ICarIWheel,如下图:

既然类BMWLuxuryWheel实现了接口ICarIWheel,他们也需要realize/implement这个association/composition,例如借助 4 值引用 属性 BMW::wheels,或借助 BMW 中的 4 个不同引用属性:leftRearWheelrightRearWheel, leftFrontWheel, rightFrontWheel.