所以我想说我有一个名为CelebrityDog的课程。根据用户的需要,CelebrityDog可以是BigDog或SmallDog。
它将继承其中一个属性,但不会同时继承它们。我如何在UML图中描述这个?
答案 0 :(得分:1)
UML观点
我很遗憾地得到一个不愉快的答案,但根据UML 2.5标准第9.2.4.1节,这在UML中是不可能的:
概括定义了泛化/专业化关系 在分类器之间。每个泛化都与特定的分类器相关 更一般的分类器。
...
分类器的实例也是每个的(间接)实例 它的概括。适用于实例的任何约束 泛化也适用于分类器的实例。
换句话说,UML中的继承关系是泛化和特化之间的关系。一个类可以是几个泛化类的特化,但总是在同一时间(即多重继承。
设计视角
我将添加已经令人不快的答案,这无论如何都是一个非常糟糕的设计,你将无法在大多数主流语言中实现。
您可以使用更接近关系现实的模型进行改进:
CelebrityDog
是Dog
(继承,这始终是真的)Dog
有DogSize
(关联,即实施时的构成),可随时间变化DogSize
可以专门用于BigDogSize
或SmallDogSize
Etvoilà!
答案 1 :(得分:0)
狗是顶级课程。它不包含size属性。 CelebrityDog来自Dog(正常情况下,EverydayDogs)。 BigDog和SmallDog来自CelebrityDog。也许将他们的班级名称更改为BigCelebrityDog和SmallCelebrityDog。
可以使用多重继承来解决这个问题,但这可能令人困惑。