类和接口之间的关联

时间:2015-01-18 16:18:03

标签: uml ooad

我对类和接口之间的关联建模有疑问。据我所知,接口指定了对象可以做什么;没有提供状态或功能(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)对我来说看起来更好。请分享您的想法。

3 个答案:

答案 0 :(得分:5)

我同意弗拉基米尔的观点,因为你想借助接口建模汽车和车轮,它们之间的关联(实际上是一个组合)应该在接口ICar和{{1}之间建模},如下图所示:

enter image description here

由于课程IWheelBMW实现了接口LuxuryWheelICar,因此他们还需要实现/实现此关联/组合,例如借助于4值引用属性IWheel :: BMW,或借助wheels中的4个不同引用属性:BMWleftRearWheelrightRearWheelleftFrontWheel

答案 1 :(得分:1)

为了获得强大的解决方案,请在ICar和IWheel接口之间创建关联。这是可能的,因为接口是类型。使用关联方式连接接口,实现ICar接口的任何分类器实例必须与实现IWheel的分类器实例相关联。您还可以为汽车和车轮定义抽象类,并在它们之间建立关联。结果将类似。

答案 2 :(得分:0)

简单地说,汽车可以支持不同类型的电机。因此,您必须考虑允许添加不同类型电机的附加类。在这种情况下,接口或类之间的关系必须使用一些额外的接口。