如何在UML图中描绘/或继承?

时间:2017-06-04 17:21:34

标签: class inheritance uml

所以我想说我有一个名为CelebrityDog的课程。根据用户的需要,CelebrityDog可以是BigDog或SmallDog。

它将继承其中一个属性,但不会同时继承它们。我如何在UML图中描述这个?

2 个答案:

答案 0 :(得分:1)

UML观点

我很遗憾地得到一个不愉快的答案,但根据UML 2.5标准第9.2.4.1节,这在UML中是不可能的:

  

概括定义了泛化/专业化关系   在分类器之间。每个泛化都与特定的分类器相关   更一般的分类器。
  ...
  分类器的实例也是每个的(间接)实例   它的概括。适用于实例的任何约束   泛化也适用于分类器的实例。

换句话说,UML中的继承关系是泛化和特化之间的关系。一个类可以是几个泛化类的特化,但总是在同一时间(即多重继承。

设计视角

我将添加已经令人不快的答案,这无论如何都是一个非常糟糕的设计,你将无法在大多数主流语言中实现。

您可以使用更接近关系现实的模型进行改进:

  • CelebrityDogDog(继承,这始终是真的)
  • DogDogSize(关联,即实施时的构成),可随时间变化
  • DogSize可以专门用于BigDogSizeSmallDogSize

Etvoilà!

答案 1 :(得分:0)

狗是顶级课程。它不包含size属性。 CelebrityDog来自Dog(正常情况下,EverydayDogs)。 BigDog和SmallDog来自CelebrityDog。也许将他们的班级名称更改为BigCelebrityDog和SmallCelebrityDog。

可以使用多重继承来解决这个问题,但这可能令人困惑。