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