如何定义这个类关系

时间:2013-05-30 16:55:26

标签: uml class-diagram class-relationship

这是我的UML类图(URL)

http://i.stack.imgur.com/TTRoM.png

在上图中,ChildParent(或Child1,Child2和Child3)只能在MainObject-> create_new_object()中初始化,并通过ObjectData-> lib-> add_object(key,newObject)存储在类库中

那么,如何定义ChildParent,Library和MainObject之间的UML类关系?

谢谢

1 个答案:

答案 0 :(得分:1)

类之间的关系是结构性的,而不是行为性的。 MainObject正在创建它,但它不会控制它的生命周期,也不会以任何方式拥有它。创建之后,它被移交给ObjectData,传输到库并存储在那里。 MainObject和ChildParent对象之间存在行为关系,但两者之间没有结构关系。我不应该描述他们之间的任何关系。

图书馆正在存储它。这是典型的整体关系和结构。什么是没有书籍的图书馆?因此我会使用聚合类型的关系。它不是组合,因为库不控制任何ChildParent或Child对象的生命周期,也不暗示在销毁Library对象时将销毁ChildObject。这可能会发生,但鉴于所提供的数据对我来说并不清楚。

编辑作为对评论的回复:

类图显示了类之间的结构关系,而不是它们的用法。当一个类实现一个接口时,你会在图中看到那个关系。在代码(行为)中,您可能看不到这种关系,因为实现隐藏在工厂方法中或由IoC容器提供,或者它甚至可能是从未使用过的关系。

从库中选择类(被调用者)的类(调用者)与调用者和库之间的关系是什么? 很明显,呼叫者和图书馆有行为关系。如果模块发生变化,调用者是否可以从其他类中获取被调用者。因此,库和调用者在类图中没有任何关系。 呼叫者和被呼叫者之间存在结构关系。调用者需要被调用者。您的评论未指定它们之间的确切关系,但存在关系。最弱的形式是依赖关系。与图书馆有关的一个例子是一个人从图书馆借书。当他开始阅读这本书时,是否使用了被叫者。它本质上不属于整个人,但它确实属于人类的某种方法。 实现库有很多方法。它可以是例如衣柜。军人和他的制服之间有什么关系?在某些情况下他需要穿一些制服,但在其他情况下,这些制服是禁止穿的。穿制服是军队的一部分。在执勤期间,如果不穿制服,就不能参军。你离开军队的那一刻你不能再穿上制服了。因此,军队与他的衣橱里的制服有一种构成关系。

调用者和被调用者之间可能存在更多类型的关系。你不能正手说出来。您必须以与任何其他关系相同的方式回答它。第一个问题非常清楚:这是一种结构关系吗?像'是'和'有'的关键词描绘了一种结构关系。像'使用','问道','挑选'这样的关键词表示行为关系。您是否认为它是一种结构关系,那么您应该找出两个类之间的依赖关系。