UML指定对象的创建者和所有者

UML指定对象的创建者和所有者,uml,Uml,我想知道是否有一种方法可以在UML(类或其他图表)中建模,哪个类(或者可能是函数)负责创建另一个特定对象 另外,我想知道如何在类图中指定谁拥有一个对象。我的第一个猜测是用作文。然而,我在stackoverflow上看到一个讨论,说墙可以是一个房间的组成部分,但椅子更愿意被建模为一个集合。但在这种情况下,哪一类人会对椅子的损坏负责?我希望椅子是房间的组成部分,房间负责管理椅子,尽管房间可以在没有椅子的情况下生存。 谢谢您可以在类图中添加一个对象矩形,以举例说明类的对象。在对象矩形的第一个隔间中,指

我想知道是否有一种方法可以在UML(类或其他图表)中建模,哪个类(或者可能是函数)负责创建另一个特定对象

另外,我想知道如何在类图中指定谁拥有一个对象。我的第一个猜测是用作文。然而,我在stackoverflow上看到一个讨论,说墙可以是一个房间的组成部分,但椅子更愿意被建模为一个集合。但在这种情况下,哪一类人会对椅子的损坏负责?我希望椅子是房间的组成部分,房间负责管理椅子,尽管房间可以在没有椅子的情况下生存。
谢谢

您可以在类图中添加一个对象矩形,以举例说明类的对象。在对象矩形的第一个隔间中,指定对象的ID及其类型/类,并用冒号分隔


当您说“谁拥有一个对象”时,您可能指的是对象的类型/类与“拥有”该类型对象的某个其他类之间的生命周期依赖关系。UML没有定义如何在类图中表达这种生命周期依赖关系的任何标准方法。它们可以以用户定义(原型化)依赖项箭头或约束框的形式添加。

正如您已经提到的,一个对象可以有多个所有者或创建者。因此,有几种方法可以在U.M.L.中记录此功能

请记住,当开发人员在类图或序列图中建模一个类时,他/她实际上是指(一个对象):“当我创建这个类的实例时…”

因为,您的问题也适用于静态或类成员

(1) ,可以存在另一个对象的属性或字段,由类图表示:

......................................................
..+-------------------+........+-------------------+..
..|     <<class>>     |........|     <<class>>     |..
..|      CarClass     |........|     MotorClass    |..
..+-------------------+........+-------------------+..
..|[+]   Motor        |<*>-----|        ...        |..
..+-------------------+........+-------------------+..
......................................................
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
..+-------------------+........+-------------------+..
..|          |........|          |..
汽车级。。
..+-------------------+........+-------------------+..
..|[+]电机|------|…|。。
..+-------------------+........+-------------------+..
......................................................
子对象由同一类的函数(可能是构造函数或其他函数)创建,但该属性表示主对象负责或分配或取消分配子对象。在类图中,该关系由成分关联表示,这是两个类之间的一条线,带有填充菱形

(2) 有时所有权过程被分割,子对象被创建在某个地方, 在另一个地方应用,并以另一种方式销毁

通常,函数wheter global或类的一部分创建并返回一个对象。这有时称为所有权转移

该结果存储在其他地方,并不明确,谁将销毁该对象,但它所做的创建将被记录下来

...........................................................................
..+----------------------------------------+........+-------------------+..
..|                <<class>>               |........|      <<class>>    |..
..|            MotorFactoryClass           |........|     MotorClass    |..
..+----------------------------------------+........+-------------------+..
..|[+] CreateMotor(): MotorClass           |------->|        ...        |..
..|[+] DestroyMotor(ref MotorClass AMotor) |------->|        ...        |..
..+----------------------------------------+........+-------------------+..
...........................................................................
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
..+----------------------------------------+........+-------------------+..
..|                               |........|          |..
…汽车工厂等级…汽车等级。。
..+----------------------------------------+........+-------------------+..
..|[+]CreateMotor():MotorClass |----->|…|。。
..|[+]破坏电机(参考电机等级AMotor)--->。。
..+----------------------------------------+........+-------------------+..
...........................................................................
这称为实现关联,这是对象所有权的一半。它被建模为创建子对象的方法之间的箭头, 以及子对象的类。线是虚线

创建对象的主类称为工厂

当一个对象被另一个类破坏时,也会发生类似的情况

(3) 当创建的对象被另一个方法或另一个对象(类)使用时,会发生流程的另一半

有时,应用它的对象被指定给主对象的属性或字段,即使主对象可能不负责删除子对象

......................................................
..+-------------------+........+-------------------+..
..|     <<class>>     |........|     <<class>>     |..
..|      CarClass     |........|     MotorClass    |..
..+-------------------+........+-------------------+..
..|[+]   Motor        |< >-----|        ...        |..
..+-------------------+........+-------------------+..
......................................................
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
..+-------------------+........+-------------------+..
..|          |........|          |..
汽车级。。
..+-------------------+........+-------------------+..
..|[+]电机|<>----|…|。。
..+-------------------+........+-------------------+..
......................................................
这称为聚集关联,与成分关联类似,但钻石未填充。被认为是主要对象,, 对象的暂时所有者,即使对象的创建或破坏没有改变

使用(2)和(3)中的图表和操作作为补充

(4) 对于全局函数或变量,建模非常相似

通常,主程序或库可以类似于类来使用

......................................................
..+-------------------+........+-------------------+..
..|    <<module>>     |........|     <<class>>     |..
..|     Program       |........|    ConsoleClass   |..
..+-------------------+........+-------------------+..
..|[+]   Console      |<*>-----|[+] scan(): void   |..
..|[+]   main: void   |........|[+] print(): void  |..
..+-------------------+........|        ...        |..
...............................+-------------------+..
......................................................
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
..+-------------------+........+-------------------+..
..|         |........|          |..
..|程序|..控制台类|。。
..+-------------------+........+-------------------+..
..|[+]控制台|------|[+]扫描():void |。。
..|[+]main:void |......|[+]print():void |。。
..+-------------------+........|        ...        |..
...............................+-------------------+..
.....................................