我对类和接口之间的关联建模有疑问。据我所知,接口指定了对象可以做什么;没有提供状态或功能(When to use an interface instead of an abstract class and vice versa?)。另外,我的关于OOAD(James Rubaugh的面向对象建模和设计)的书指出,关联描述了一组在对象实例之间具有共同结构和通用语义的链接。
现在,假设我有以下实体:
1)ICar界面:定义汽车可以执行的操作
2)BMW:实现ICar界面的课程
3)IWheel:定义车轮功能的界面
4)LuxuryWheel:实现IWheel接口的类
现在,为了模拟宝马和LuuryWheel之间的关系,从设计的角度来看,您认为以下哪一项是正确的?我已经分享了我对每个人的想法
A)在ICar和Iwheel之间创建关联。 BMW类可以创建LuxuryWheel类的具体实例。这是非常灵活的,但将车的功能与Wheel'能力。此外,关联的定义表明关系是在实例之间。
B)在BMW类和LuxuryWheel类之间建立关联。解决特定问题;但是将BMW与豪华车轮紧密结合在一起
C)在BMW class和Iwheel界面之间建立关联。这样宝马可以使用任何实现IWheel接口的类型。
选项C)对我来说看起来更好。请分享您的想法。
答案 0 :(得分:5)
我同意弗拉基米尔的观点,因为你想借助接口建模汽车和车轮,它们之间的关联(实际上是一个组合)应该在接口ICar
和{{1}之间建模},如下图所示:
由于课程IWheel
和BMW
实现了接口LuxuryWheel
和ICar
,因此他们还需要实现/实现此关联/组合,例如借助于4值引用属性IWheel
:: BMW
,或借助wheels
中的4个不同引用属性:BMW
,leftRearWheel
,rightRearWheel
,leftFrontWheel
。
答案 1 :(得分:1)
为了获得强大的解决方案,请在ICar和IWheel接口之间创建关联。这是可能的,因为接口是类型。使用关联方式连接接口,实现ICar接口的任何分类器实例必须与实现IWheel的分类器实例相关联。您还可以为汽车和车轮定义抽象类,并在它们之间建立关联。结果将类似。
答案 2 :(得分:0)
简单地说,汽车可以支持不同类型的电机。因此,您必须考虑允许添加不同类型电机的附加类。在这种情况下,接口或类之间的关系必须使用一些额外的接口。